witam
Temat być może jest trochę mylący. Ale do rzeczy. Bawię się zestawem zl3avr i jestem na etapie obsługi transmisji w kodzie RC5 w asemblerze. W książce "Mikrokontrolery AVR ATmega w praktyce" podane są gotowe programy do nadawania i odbierania wiadomości w RC5. O ile procedurka nadawania nie budzi żadnych moich wątpliwości, o ile w przypadku odbierania danych mam pewne pytania.
Autor opisuje swój program następująco: "Jest to podprogram obsługi przerwania INT1, wywoływany przez opadające zbocze zdemodulowanego sygnału odbieranego (do końcówki INT1 dołączone jest wyjście odbiornika IR).W związku z tym, że układ zegarowy pilotów jest mało dokładny konieczna jest jego ciągła synchronizacja z nadajnikiem. W programie dokonuje się tego poprzez oczekiwanie na środkowe zbocza, występujące przy transmisji każdego bitu. Tu zachodzi zawsze zmiana z 1 na 0 lub z 0 na 1.
Fakt wykrycia zbocza środkowego (poczynając od pierwszego bitu startu) autor wykorzystał do zerowania układu licznikowego (8-bitowego licznika 2 w trybie CTC), wykorzystywanego jako czasomierz. Licznik taki powinien odmierzać czas równy 3/4 okresu transmisji jednego bitu czyli 0,75*1,8ms (900us+900us=1,8ms czyli długość jednego bitu). W chwili jego przepełnienia stan sygnału odbieranego jest badany, ponieważ na jego podstawie określić można wartość kolejnego bitu (testowanie zachodzi w środku pierwszego półokresu jego transmisji). Następnie układ powinien oczekiwać na zbocze środkowe (co powinno trwać 1/4 okresu przesyłu bitu) i opisywana procedura powinna się powtarzać (z cykliczną synchronizacją pracy licznika) aż do chwili odebrania ostatniego bitu rozkazu. W przedstawionym podprogramie zachodzi również testowanie, czy nie przekroczono czasu oczekiwania na zbocze środkowe(także tutaj odmierzany jest dla wygody czas 3/4 okresu, choć teoretycznie powinien on wynosić o połowę mniej). Zdarzenie to oznacza, że wystąpił błąd- popdprogram zostaje wówczas zakończony. W przeciwnym razie przepisuje on odebraną wiadomość do odpowiednich zmiennych."
1. W stanie "spoczynku" wejście INT1 od odbiornika IR jest w stanie wysokim bo wejście ma włączone podciąganie. Układ zareaguje na pierwsze zbocze opadające?
2. Od kiedy odliczany jest pierwszy czas 3/4 okresu? Wydaje mi się że według podprogramu włączany licznik jest od razu po przejęciu przerwania. Ale jeśli tak to dalej mi się coś nie zgadza. Zgadzałoby się wszystko ażeby licznik zaczynał liczyć w momencie pierwszego zbocza rosnącego pierwszego bitu startu. Zresztą tak autor napisał w cytowanym wyżej opisie: "Fakt wykrycia zbocza środkowego (poczynając od pierwszego bitu startu) autor wykorzystał do zerowania układu licznikowego"
3. Dlaczego odbierany jest dopiero drugi bit startu?
W załączniku dołączyłem odpowiednie podprogramy.
dzięki z góry
Temat być może jest trochę mylący. Ale do rzeczy. Bawię się zestawem zl3avr i jestem na etapie obsługi transmisji w kodzie RC5 w asemblerze. W książce "Mikrokontrolery AVR ATmega w praktyce" podane są gotowe programy do nadawania i odbierania wiadomości w RC5. O ile procedurka nadawania nie budzi żadnych moich wątpliwości, o ile w przypadku odbierania danych mam pewne pytania.
Autor opisuje swój program następująco: "Jest to podprogram obsługi przerwania INT1, wywoływany przez opadające zbocze zdemodulowanego sygnału odbieranego (do końcówki INT1 dołączone jest wyjście odbiornika IR).W związku z tym, że układ zegarowy pilotów jest mało dokładny konieczna jest jego ciągła synchronizacja z nadajnikiem. W programie dokonuje się tego poprzez oczekiwanie na środkowe zbocza, występujące przy transmisji każdego bitu. Tu zachodzi zawsze zmiana z 1 na 0 lub z 0 na 1.
Fakt wykrycia zbocza środkowego (poczynając od pierwszego bitu startu) autor wykorzystał do zerowania układu licznikowego (8-bitowego licznika 2 w trybie CTC), wykorzystywanego jako czasomierz. Licznik taki powinien odmierzać czas równy 3/4 okresu transmisji jednego bitu czyli 0,75*1,8ms (900us+900us=1,8ms czyli długość jednego bitu). W chwili jego przepełnienia stan sygnału odbieranego jest badany, ponieważ na jego podstawie określić można wartość kolejnego bitu (testowanie zachodzi w środku pierwszego półokresu jego transmisji). Następnie układ powinien oczekiwać na zbocze środkowe (co powinno trwać 1/4 okresu przesyłu bitu) i opisywana procedura powinna się powtarzać (z cykliczną synchronizacją pracy licznika) aż do chwili odebrania ostatniego bitu rozkazu. W przedstawionym podprogramie zachodzi również testowanie, czy nie przekroczono czasu oczekiwania na zbocze środkowe(także tutaj odmierzany jest dla wygody czas 3/4 okresu, choć teoretycznie powinien on wynosić o połowę mniej). Zdarzenie to oznacza, że wystąpił błąd- popdprogram zostaje wówczas zakończony. W przeciwnym razie przepisuje on odebraną wiadomość do odpowiednich zmiennych."
1. W stanie "spoczynku" wejście INT1 od odbiornika IR jest w stanie wysokim bo wejście ma włączone podciąganie. Układ zareaguje na pierwsze zbocze opadające?
2. Od kiedy odliczany jest pierwszy czas 3/4 okresu? Wydaje mi się że według podprogramu włączany licznik jest od razu po przejęciu przerwania. Ale jeśli tak to dalej mi się coś nie zgadza. Zgadzałoby się wszystko ażeby licznik zaczynał liczyć w momencie pierwszego zbocza rosnącego pierwszego bitu startu. Zresztą tak autor napisał w cytowanym wyżej opisie: "Fakt wykrycia zbocza środkowego (poczynając od pierwszego bitu startu) autor wykorzystał do zerowania układu licznikowego"
3. Dlaczego odbierany jest dopiero drugi bit startu?
W załączniku dołączyłem odpowiednie podprogramy.
dzięki z góry