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ępilot rc5
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Czesc!
Dzieki za podpowiedz, ale cos takiego chyba probowalem robic . Jest tylko jeden problem, ze wyjscie zmienia swoj stan na krociutni okres czasu (pulsuje) .
Probowalem mniej wiecej cos takiego :
Dim Command As Byte , Subaddress As Byte
Wy1 Alias P1.0
Wy2 Alias P1.1
Reset Tcon.0
On Int0 Receiverc5
Enable Int0
Enable Interrupts
Do
Loop
Receiverc5:
Getrc5(subaddress , Command)
If Command = 1 Then
Disable Int0
Reset Wy1
Waitms 100
Enable Int0
Else
Set Wy1
End If
If Command = 2 Then
Disable Int0
Reset Wy2
Waitms 100
Enable Int0
Else
Set Wy2
End If
Return
Pozdr.
Dzieki za podpowiedz, ale cos takiego chyba probowalem robic . Jest tylko jeden problem, ze wyjscie zmienia swoj stan na krociutni okres czasu (pulsuje) .
Probowalem mniej wiecej cos takiego :
Dim Command As Byte , Subaddress As Byte
Wy1 Alias P1.0
Wy2 Alias P1.1
Reset Tcon.0
On Int0 Receiverc5
Enable Int0
Enable Interrupts
Do
Loop
Receiverc5:
Getrc5(subaddress , Command)
If Command = 1 Then
Disable Int0
Reset Wy1
Waitms 100
Enable Int0
Else
Set Wy1
End If
If Command = 2 Then
Disable Int0
Reset Wy2
Waitms 100
Enable Int0
Else
Set Wy2
End If
Return
Pozdr.
Siemka.
Jeśli nie przeszkadza Ci Bascom AVR to możesz sprubować tego programiku. Przetestowałem go i działa tak jak chciałeś. Gdy naciśniemy przycisk na pilocie to pin zmienia swój stam (ale tylko wtedy). Po zwolniemniu przycisku stan pinu wraca do stany początkowego.
Config Portb = &B11111111 'konfiguracja pinow
Portb = &B11111111 'ustawienie stanu spoczynkowego
Config Portd = &B0111110
Portd = &B1111011
Config Rc5 = Pind.6 'konfiguracja wejscia RC5
Enable Interrupts 'globalne zezwolenie na przerwania
'wykorzystywany jest TIMER0 do generowania opuznien po odbiorze sygnalu RC5
'zezwolenie na jego przerwania ustawiane jest automatycznie
Dim Adress As Byte 'deklaracje zmiennych
Dim Command As Byte
Dim Q As Bit
Do
Portd.2 = 0
If Q = 1 Then
Portd.2 = 1
End If 'petla glowna programy
Getrc5(adress , Command)
Command = Command And $b10111111 'przeliczanie
'jesli uzywasz pilota od tv to adress nie jest wazny (to 1)
If Command = 1 Then 'jak sam napisales np.1
Gosub Zmien
Else
Q = 0
End If
Loop
End
Zmien:
Q = 1
Return
W moim '2313 programik ten zajął 21% flash'u.
PZDR
KAT
Jeśli nie przeszkadza Ci Bascom AVR to możesz sprubować tego programiku. Przetestowałem go i działa tak jak chciałeś. Gdy naciśniemy przycisk na pilocie to pin zmienia swój stam (ale tylko wtedy). Po zwolniemniu przycisku stan pinu wraca do stany początkowego.
Config Portb = &B11111111 'konfiguracja pinow
Portb = &B11111111 'ustawienie stanu spoczynkowego
Config Portd = &B0111110
Portd = &B1111011
Config Rc5 = Pind.6 'konfiguracja wejscia RC5
Enable Interrupts 'globalne zezwolenie na przerwania
'wykorzystywany jest TIMER0 do generowania opuznien po odbiorze sygnalu RC5
'zezwolenie na jego przerwania ustawiane jest automatycznie
Dim Adress As Byte 'deklaracje zmiennych
Dim Command As Byte
Dim Q As Bit
Do
Portd.2 = 0
If Q = 1 Then
Portd.2 = 1
End If 'petla glowna programy
Getrc5(adress , Command)
Command = Command And $b10111111 'przeliczanie
'jesli uzywasz pilota od tv to adress nie jest wazny (to 1)
If Command = 1 Then 'jak sam napisales np.1
Gosub Zmien
Else
Q = 0
End If
Loop
End
Zmien:
Q = 1
Return
W moim '2313 programik ten zajął 21% flash'u.
PZDR
KAT
W każdym razie chodzi o coś co by "odświeżało" zezwolenie za zmiane stanu pinu podczas trzymania przycisku. Z tego co pamiętam w 8051 odebranie RC5 wykożystuje przerwania, więc możesz umieścić tą zmienną Q (zezwolenie) w instrukcji obsługi przerwania.
get_rc5: 'program obsługi przerwania
disable interrupts
getrc5(adres,komenda) 'odbiór transmisji
if komenda=1 then 'np.1
q=1
end if
enable interrupts
return
A sprawdzanie zezwolenia znajdowałoby się w programie głównym.
do
--------
if q=1 then
portd.1=1 'tu np. wyjściem byłoby D.1
else
portd.1=0
end if
[*]
q=0 'zerowanie zmiennej aby możliwe było właściwe zinterpretowane następnej transmisji ("paczki")
--------
loop
Lepiej zaraz po procedurach inicjacji umieścić linijke
Q=0
Nie testowałem tego programu więc jest on tylko teoretyczny . Możesz spróbować czegoś takiego. Możliwe, że będzies musiał użyć polecenia w stylu wait xx, żeby uniknąć pulsowania na tym pinie wyjściowym [*] (lub zastosować jakiś obwód RC o odpowiedniej stałej czasowej na wyjściu). Chyba, że reszta programu zajmie procesor na odpowiedni czas. Powodem tego jest fakt, że przy tym samym kwarcu procesory AVR są szybsze od '51. Można by wprowadzić jeszcze jedną zmienną, która by zezwalała na zerowanie Q w normalnym programie, jeśli program "przeleciał" przez warunek if Q=1 then.
A co do wersji programu Bascom to zachęcam do sprubowania AVR. Praktycznie niczym się nie różni od 8051, a posiada większe możliwości:)
PZDR
KAT
get_rc5: 'program obsługi przerwania
disable interrupts
getrc5(adres,komenda) 'odbiór transmisji
if komenda=1 then 'np.1
q=1
end if
enable interrupts
return
A sprawdzanie zezwolenia znajdowałoby się w programie głównym.
do
--------
if q=1 then
portd.1=1 'tu np. wyjściem byłoby D.1
else
portd.1=0
end if
[*]
q=0 'zerowanie zmiennej aby możliwe było właściwe zinterpretowane następnej transmisji ("paczki")
--------
loop
Lepiej zaraz po procedurach inicjacji umieścić linijke
Q=0
Nie testowałem tego programu więc jest on tylko teoretyczny . Możesz spróbować czegoś takiego. Możliwe, że będzies musiał użyć polecenia w stylu wait xx, żeby uniknąć pulsowania na tym pinie wyjściowym [*] (lub zastosować jakiś obwód RC o odpowiedniej stałej czasowej na wyjściu). Chyba, że reszta programu zajmie procesor na odpowiedni czas. Powodem tego jest fakt, że przy tym samym kwarcu procesory AVR są szybsze od '51. Można by wprowadzić jeszcze jedną zmienną, która by zezwalała na zerowanie Q w normalnym programie, jeśli program "przeleciał" przez warunek if Q=1 then.
A co do wersji programu Bascom to zachęcam do sprubowania AVR. Praktycznie niczym się nie różni od 8051, a posiada większe możliwości:)
PZDR
KAT
Czesc !
Dzieki za podpowiedz. W koncu udalo mi sie cos stworzyc .Wyglada to mnij wiecej tak:
Wy1 Alias P1.2
Wy2 Alias P1.3
Dim Command As Byte , Subaddress As Byte
Config Lcd = 20 * 2
Reset Tcon.0
Wy1 = 0
Wy2 = 0
On Int0 Receiverc5
Enable Int0
Enable Interrupts
Cls
Lcd "Waiting for RC5 "
Wait 1
Cursor Off
Do
Wy1 = 0
Wy2 = 0
Waitms 100
Loop
Receiverc5:
Getrc5(subaddress , Command)
Disable Int0
If Command = 1 Then
Wy1 = 1
Waitms 200
End If
If Command = 2 Then
Wy2 = 1
Waitms 200
End If
Enable Int0
return
Bardzo wazne - opoznienie musi byc conajmniej 200 ms!!!
Ale jesli ktos ma jakies lepsze rozwiazanie to byloby dobrze widziane
pozdr
Dzieki za podpowiedz. W koncu udalo mi sie cos stworzyc .Wyglada to mnij wiecej tak:
Wy1 Alias P1.2
Wy2 Alias P1.3
Dim Command As Byte , Subaddress As Byte
Config Lcd = 20 * 2
Reset Tcon.0
Wy1 = 0
Wy2 = 0
On Int0 Receiverc5
Enable Int0
Enable Interrupts
Cls
Lcd "Waiting for RC5 "
Wait 1
Cursor Off
Do
Wy1 = 0
Wy2 = 0
Waitms 100
Loop
Receiverc5:
Getrc5(subaddress , Command)
Disable Int0
If Command = 1 Then
Wy1 = 1
Waitms 200
End If
If Command = 2 Then
Wy2 = 1
Waitms 200
End If
Enable Int0
return
Bardzo wazne - opoznienie musi byc conajmniej 200 ms!!!
Ale jesli ktos ma jakies lepsze rozwiazanie to byloby dobrze widziane
pozdr
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości