Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

obsluga getrc5 z przerwania

karolj
-
-
Posty:4
Rejestracja:9 lis 2003, o 23:54
Lokalizacja:radom
Kontaktowanie:
obsluga getrc5 z przerwania

Postautor: karolj » 4 mar 2004, o 22:53

czy ktos wie dlaczego w bascomieAVR nie dziala polecenie getrc5 jesli zostanie wywolane z procedury obslugi przerwania ? i czy da sie cos zrobic zeby dzialalo (umieszczanie getrc5 w glownej petli programu odpada, bo to strasznie spowalania caly program)
pozdrawiam
karol

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 4 mar 2004, o 23:57

Instrukcja odbioru kodu RC5 wykorzystuje przerwanie od timera. W AVR jest tak ze gdy wykonywane jest przerwania inne sa blokowane.
Aby dzialal ci odbior w przerwaniu, nalezy w nim odblokowac przerwania instrukcja enable interrupts.

karolj
-
-
Posty:4
Rejestracja:9 lis 2003, o 23:54
Lokalizacja:radom
Kontaktowanie:

Postautor: karolj » 5 mar 2004, o 22:22

dzieki, niby dziala, ale jednak nie tak jak potrzeba. program odbiera kod zaledwie kilka razy a nastepnie zawiesza sie.

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 5 mar 2004, o 22:36

Podeslij mi te procedurkne to zerkne. Nie powinien sie program zawieszac.

karolj
-
-
Posty:4
Rejestracja:9 lis 2003, o 23:54
Lokalizacja:radom
Kontaktowanie:

Postautor: karolj » 5 mar 2004, o 23:18

calosc wyglada tak:
po kilku zmianach dziala :)
ale mam jeszcze pytanie: czemu po wcisnieciu przycisku na pilocie procedura obslugi int0 wykonywana jest dwukrotnie ? niby to juz nie ma wiekszego znaczenia, ale jednak mnie to gryzie :)
dzieki bardzo i pozdrawiam
karol


$lib "mcsbyte.lbx"
Config Rc5 = Pind.2
Stop Watchdog
Enable Interrupts
Enable Int0
On Int0 Odbierz
Config Int0 = Falling
Dim Adres As Byte
Dim Komenda As Byte
Dim Licznik As Byte
Dim Licznik2 As Byte
Dim Nowy As Bit
Cls
Do
Locate 1 , 10
Lcd Licznik2
If Nowy = 1 Then
Nowy = 0
Locate 2 , 1
Lcd Adres ; " " ; Komenda
If Adres = 0 Then
If Komenda = 1 Then Incr Licznik
If Komenda = 2 Then Decr Licznik
Home
Lcd Licznik
End If

Enable Interrupts
Enable Int0
End If
Loop


Odbierz:
Disable Int0
Enable Interrupts
Incr Licznik2
Nowy = 1
Getrc5(adres , Komenda)
Komenda = Komenda And &B00111111
Disable Interrupts
Return

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 5 mar 2004, o 23:42

Instrukcja komenda = komenda And &B00111111 powinna byc zapisana jako :komenda = komenda And &B01111111

karolj
-
-
Posty:4
Rejestracja:9 lis 2003, o 23:54
Lokalizacja:radom
Kontaktowanie:

Postautor: karolj » 6 mar 2004, o 00:30

a to akurat nie ma znaczenia bo w standardzie rc5 kody sa do 63. no chyba ze w celu eliminacji ewentualnych przeklaman, kiedy to na 6. bicie pojawia sie jakies bzdury. ale w tym przypadku chodzilo mi jedynie o sprawdzenie samej idei obslugi getrc5 przy wystapieniu przerwania na int0.
pozdrawiam, karol

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 6 mar 2004, o 00:55

Oto moja sprawdzona idea: Do
If Odebr_kod = 1 Then
Cls
Lcd "Adres: " ; Address Lowerline
Lcd "Komenda:" ; Command
Reset Odebr_kod
Enable Int0
End If
Loop
End

Pobr_rc5:
Disable Int0
Enable Interrupts
Getrc5(address , Command)
Command = Command And &B01111111 Set Odebr_kod Return Przy czym przerwanie mam wywolywane poziomem, a nie zboczem.

Awatar użytkownika
Kamilkozi
-
-
Posty:229
Rejestracja:19 mar 2004, o 11:48
Lokalizacja:Gdańsk
Kontaktowanie:

Postautor: Kamilkozi » 21 mar 2004, o 23:11

przerwanie int0 jest wykonywane dwukrotnie, po nacisnieciu przycisku pilota, ponieważ dane kodu Rc5 sa zawsze przesyłane przynajmniej dwukrotnie, jezeli trzymamy przycisk to oczywiscie wiecej. informacja o tym, że trzymamy przycisk jest zawarta w najstarszym bicie komendy(czyli w tym przypadku w zmiennej command) - jest on po prostu zmieniany na przeciwny w kazdej kolejnej paczce impulsów.

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 22 mar 2004, o 00:00

Ten bit niweluje instrukcja Command = Command And &B01111111

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 45 gości