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

piotrs
-
-
Posty:48
Rejestracja:29 kwie 2003, o 04:19
pilot rc5

Postautor: piotrs » 9 lut 2004, o 22:35

Czy wie ktos jak zrobic zeby wyznaczony pin portu zmienial swoj stan tylko gdy wciskamy przycisk w pilocie np. nr1 , ale gdy go puszczamy stan pinu wracalby do starego stanu??

slawko-k
-
-
Posty:9
Rejestracja:8 lut 2004, o 11:38
Lokalizacja:Łańcut
Kontaktowanie:

Postautor: slawko-k » 11 lut 2004, o 18:55

Witam.

Wydaje mi sie ze w petli trzebaby odczytywac czy pilot nadaje jakis kod. Jak tak to ustawia odpowiedni pin w zaleznosci od klawisza jak nie to reset wszytskich pinow.

piotrs
-
-
Posty:48
Rejestracja:29 kwie 2003, o 04:19

Postautor: piotrs » 12 lut 2004, o 04:01

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.

KAT
-
-
Posty:16
Rejestracja:10 lut 2004, o 14:43

Postautor: KAT » 13 lut 2004, o 12:54

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

piotrs
-
-
Posty:48
Rejestracja:29 kwie 2003, o 04:19

Postautor: piotrs » 14 lut 2004, o 17:13

witam !
Dzieki za podpowiedz , ale narazie ucze sie na 89c2051 . AVR to moze pozniej . Probowalem cos stworzyc wzorujac sie na twoim przykladzie ale nic z tego mi nie wyszlo :cry:
pozdr

KAT
-
-
Posty:16
Rejestracja:10 lut 2004, o 14:43

Postautor: KAT » 14 lut 2004, o 19:47

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

piotrs
-
-
Posty:48
Rejestracja:29 kwie 2003, o 04:19

Postautor: piotrs » 5 mar 2004, o 04:13

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

dj_grabek
-
-
Posty:1
Rejestracja:9 mar 2004, o 19:07
Kontaktowanie:

Postautor: dj_grabek » 9 mar 2004, o 19:11

a jezeli co chodzi o dowolny przycisk to mozna prosciej .. ;]

do
if p3.2 = 1 then
p3.0 = 1
Waitms 100
end if
loop


napewno dziala ;)

piotrs
-
-
Posty:48
Rejestracja:29 kwie 2003, o 04:19

Postautor: piotrs » 10 mar 2004, o 01:56

witam !
Dzieki za pomoc .Jednak chcialbym , zeby mozna bylo kontrolowac kilka wyjsc i jakims latwym rozwiazaniem!
pozdr

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 35 gości