Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 3 sty 2025, o 23:51


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 11 lip 2014, o 23:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sie 2013
Posty: 165
Lokalizacja: Sycyna Południowa
Pomógł: 4

Witam Wszystkich. Od wczoraj się męczę się z realizacją funkcji która włączała by i wyłączała na przemian np diodę LED na porcie PB1 w Atmega8. Skorzystałem tutaj z kodu zamieszczonego na płycie CD (RC5_decode z wyświetlaczem LCD i LED podłączonym do PB1) i lekko go zmodyfikowałem do własnych potrzeb. Wszystko działa, ale chciałbym by podczas przyciśnięcia przycisku zasilania na pilocie który ma kod 12 zapaliła się LED przy pierwszym wciśnięciu a zgasiła przy kolejnym. I tu tkwi problem... Jeśli wcisnę przycisk wystarczająco krótko LED się zapali i analogicznie zgaśnie, ale jeśli wcisnę i przytrzymam przycisk, LED zmienia stan co około 100ms. Chciałbym, żeby LED po wciśnięciu przycisku na pilocie zapaliła się niezależnie od czasu wciśnięcia przycisku i analogicznie po powtórnym wciśnięciu zgasła. Poprosiłbym o podpowiedź bądź kawałek kodu który rozjaśni mi sprawę.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2014, o 00:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Rozwiązaniem problemu może okazać się tzw. "toogle bit", który jest wysyłany przez pilot w momencie powtarzania komendy.
Już trochę czasu minęło kiedy zajmowałem się RC5, ale może to trochę rozjaśni sprawę: http://hobby.abxyz.bplaced.net/index.php?pid=3&aid=16


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2014, o 09:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sie 2013
Posty: 165
Lokalizacja: Sycyna Południowa
Pomógł: 4

Witam Ponownie :) Udało mi się rozwiązać problem i już działa ale z jednym małym mankamentem...

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Funkcja działa prawie dobrze, bo jeśli na przemian klikam przycisk zasilania na pilocie to pięknie włącza i wyłącza LED za każdym razem, nie ważne jak długo "molestuje" klawisz zasilania, ale jeśli kliknę w międzyczasie inny klawisz, muszę kliknąć przycisk zasilania 2 razy żeby wyłączyć LED. Muszę chyba jeszcze doczytać jak tego używać ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2014, o 09:24 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27326
Lokalizacja: Szczecin
Pomógł: 1041

hopek napisał(a):
ale jeśli kliknę w międzyczasie inny klawisz, muszę kliknąć przycisk zasilania 2 razy żeby wyłączyć LED. Muszę chyba jeszcze doczytać jak tego używać


DOKŁADNIE tak to będzie się zachowywać z samym toogle bitem ;) dlatego sporo na ten temat wyjaśniam w Greenbooku

http://atnel.pl/jezyk-c-pasja-programowania.html

i tam też unowocześnione biblioteki do obsługi RC5 ale też innych standardów mają przekazywany fajny argument do funkcji o nazwie key_time ;) .... który umożliwia nie tylko od razu z marszu wykorzystanie go do maszyny stanów o jakiej myślisz ale możliwość rakcji na wciśnięcie krótkie klawisza, wciśnięcie długie itp, np:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


spowoduje ci śliczne zapalanie na przemian bez żadnych zaciachów diody LED podłączonej do PC7. Zresztą z tym key_time można wtedy tzw "cuda wianki" robić ... a sam toogle bit nie jest nam potrzebny, jest tylko wykorzystywany do produkcji key_time, że tak powiem. W efekcie końcowym key_time to taki też licznik nadlatujących ramek

i co ciekawe działa to tak fajnie że wręcz opisuję w książce jak tworzyć tzw virtualny toogle bit dla innych standardów podczerwieni jak Sony, NEC czy JVC, które w ogóle nie posiadają tooglebit'a ;) .... a dzięki stworzeniu w protokole jego virtualnej wersji możemy znowu się cieszyć wyprodukowaniem dalej przekazywanej do funkcji zmiennej key_time i mieć dokładnie takie same możliwości jak w RC5

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO