logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega32][C/AVR studio 5]ATmega32A <-> ATmega32 - błąd komunikacji USART

jordas88 29 Lis 2012 14:43 2535 4
  • #1 11589073
    jordas88
    Poziom 2  
    Witam próbuje skomunikować dwie atmegi (ATmega32A i ATmega32) po uarcie, ale nie do końca mi to wychodzi. Mianowicie problem wygląda następująco:

    Posiadam dwa moduły do komunikacji bezprzewodowej miface1b oparte o ATmege32 oraz płytkę stykową z ATmegą32A. Pojedynczy znak za pośrednictwem terminala i przejściówki USB<=>UART wysyłam przez jeden moduł, drugi moduł po odebraniu przesyła przez UART dane do mojej ATmegi32A. Na pokładzie uC siedzi najprostszy program "echo+1", dane odsyłane tym samym torem nie wracają w takiej formie jaką bym sobie życzył. Wysyłając znak np. "1" odbieram symbol "ć". Odebrane dane nie są losowe, "1" daje zawsze w odpowiedzi "ć", "5" oraz "6" daje zawsze "ó".

    Przy pomocy drugiego terminala i przejściówki USB<=>UART podglądałem po kolei co dzieje się z wysyłanym przeze mnie znakiem. Wysyłając "1":
    - bezpośrednio z przejściówki wychodzi "1",
    - po przesłaniu torem radiowym odebrany symbol to "1",
    - po przetworzeniu przez program echo+1 dostaję "2",
    - i tu pojawia się problem, symbol "2" wraca UARTEM do modułu radiowego i z drugiej strony pojawia się jako nasze "ć".
    Z tego wnioskuję, że problem leży właśnie w tym miejscu.

    Moduły radiowe działają na oprogramowaniu od producenta, pojedyncze znaki przesyłają miedzy sobą bez żadnych problemów w obie strony.
    Próbowałem zamieniać moduły miejscami, podłączałem cały układ do jednego zasilania (wspólna masa dla każdego układu).

    Kod programu "echo+1":
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie mam pomysłu jak to naprawić... :cry:
  • #2 11590088
    Konto nie istnieje
    Konto nie istnieje  
  • #3 11593451
    jordas88
    Poziom 2  
    Odsyła zinkrementowaną wartość odebranej zmiennej. Komunikacja odbywa się przez USART. Chyba, że się mylę.
    Pozdrawiam.
  • #4 11594550
    Konto nie istnieje
    Konto nie istnieje  
  • #5 11615437
    jordas88
    Poziom 2  
    majeranek53 napisał:
    Chyba, że ja się też mylę.
    Mój program działa poprawnie. Za to Ty na pewno się mylisz. Zapraszam do zapoznania z tabelą kodów ASCII.

    Po przeszukaniu całego internetu i wielu nieudanych próbach rozwiązania problemu udało mi się częściowo naprawić sytuację. Mianowicie po zmniejszeniu prędkości transmisji wyłącznie na mojej ATmedze32A większość znaków przesyłana jest poprawnie.

    Teraz mam inny problem, jak dobrać prędkość aby wszystkie znaki wysyłane były prawidłowo. Błąd występuje np. przy odbieraniu 0b00111000, które odczytuje jako 0b00110000.
REKLAMA