Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Atmega32] - Moduł RFID z komunikacją USART

paszport 24 Maj 2016 16:34 696 3
  • #1 24 Maj 2016 16:34
    paszport
    Poziom 4  

    Witam otóż mam problem, gdy najeżdżam na antenę kartą rfid to program w pętli while(1){} powinien wykonać się raz i tyle, jednak po przyłożeniu karty program potrafi 3 razy pod rząd wykonać warunek nawet jeśli karta nie jest przyłożona do anteny. Poniżej kod programu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Uzyte funkcji z biblioteki USARTA:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 3
  • #2 24 Maj 2016 16:51
    grko
    Poziom 33  

    Kilka uwag:
    1. Nie bit tylko bajt w tych komentarzach
    2. Sprawdzasz czy pakiet ma więcej lub 13 bajtów a nie dokładnie 13
    3. Pokaż przerwanie od USARTA bo nie wiadomo czy dochodzi do race conditions na twoim FIFO
    4. Twoja pętla główna oczekuje niby 13 bajtów ale z FIFO pobierasz tylko jeden w razie sukcesu.

    0
  • #3 25 Maj 2016 00:27
    paszport
    Poziom 4  

    Nie mam przerwania program mi ciągle sprawdza w pętli czy pakiet 13 bajtowy przyszedł i czy pierwszy bajt ma wartość 2 (czyli czy karta rfid została przyłożona do anteny). Można zrobić to na zasadzie przerwania, czyli jeżeli jakikolwiek bajt danych napłynie do portu RXD to następuje przerwanie?

    0
  • #4 25 Maj 2016 09:48
    grko
    Poziom 33  

    Cytat:

    Nie mam przerwania program mi ciągle sprawdza w pętli czy pakiet 13 bajtowy przyszedł ...


    Wybacz, ale z tego co wkleiłeś w poscie nr 1 nie wynika to, że napełniasz FIFO w pętli głównej. Stąd moje założenie, że dzieje się to w przerwaniach. Ponadto jeżeli odebrałeś poprawny pakiet danych to powinieneś odebrać z tego FIFO tych 13 bajtów (czego nie robisz).

    0