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

[Atmega8][C][rs232] Niewłaściwe odebrane dane z avr

D12 16 Sie 2011 20:59 3165 8
REKLAMA
  • #1 9831746
    D12
    Poziom 14  
    Chce skomunikować swój mikrokontroler Atemga8 z komputerem na którym jest Linux. Na razie to dopiero chce sprawdzić czy to działa, a następnie się nauczyć obsługiwać rs232, więc chce cokolwiek wysłać z avr i odczytać na PC. Jednak otrzymuje nie to co powinienem.

    Do tego posługuję się:
    terminalem serial port :arrow: http://qt-apps.org/content/show.php/QTSerialPortTerminal?content=77764
    z opisu :arrow: http://mikrokontroler.info/obsluga-portu-szer...ikrokontrolerach-avr-rozwiazanie-uniwersalne/
    i biblioteki :arrow: http://homepage.hispeed.ch/peterfleury/uartlibrary.zip

    Na mikrokontroler wgrałem poniższy kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Następnie otwieram port na terminalu (w tym co dałem linka) i w efekcie dostaje tylko same iksy dla kodeka system
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    a dla kodeka UTF8 takie coś
    ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������


    Tak właściwe to nie wiem na 100% czy dobrze ten układ inwentera zrobiłem jest tam kilka kondensatorów do max232 wlutowane. Jednak sprawdzałem wielokrotnie ze schematem to powinno być raczej dobrze.

    Czy ktoś widzi jakieś błędy w kodzie?
  • REKLAMA
  • REKLAMA
  • #3 9831971
    darek1632
    Poziom 15  
    Po pierwsze czy ustawiłeś odpowiednio prędkość ATmegi ?
    Po drugie czy odpowiednio skonfigurowałeś parametry transmisji UART ?
    Po trzecie nie używaj w pętli głównej for( ;; ) instrukcji putc(); lepiej użyj ją za instrucją uart_putc((unsigned char)c);
  • REKLAMA
  • #5 9834142
    D12
    Poziom 14  
    snnaap napisał:
    Fuse bits ustawiłeś na 4000000 MHz?

    W IDE (kontrollerlab) mam ustawione 1 MHz, ale teraz zmieniłem na 1000000UL

    snnaap napisał:
    Pokaż co jest w uart.h.

    To jest z tej bibloteki:
    D12 napisał:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    snnaap napisał:
    Pokaż schemat.

    Brałem go z polskiej książki o programowaniu rs232 w Bascomie: max232 + 4x10uF + 100nF

    darek1632 napisał:
    Po pierwsze czy ustawiłeś odpowiednio prędkość ATmegi ?

    No w kontroller lab dałem 1 MHz to chyba ok :)

    darek1632 napisał:
    Po drugie czy odpowiednio skonfigurowałeś parametry transmisji UART ?

    Dałem 9600 w programie na avr i w terminalu

    darek1632 napisał:
    Po trzecie nie używaj w pętli głównej for( ;; ) instrukcji putc(); lepiej użyj ją za instrucją uart_putc((unsigned char)c);

    No właściwie to tylko przekopiowałem program z tej strony
    D12 napisał:

    i chciałem tylko obczaić czy to działa.

    LordBlick napisał:
    do takich zabaw ja używam cutecom-a
    http://cutecom.sourceforge.net/

    Dzięki tego mi trzeba było konkretny terminal

    Z tym nowym terminalem dostaje takie wyniki z tym samym programem na avr
    00000000: 98 9c 4e 27 e2 61 98 9c   4e 27 e2 61 98 9c 4e 27 
    00000010: e2 61 98 9c 4e 27 e2 61   98 9c 4e 27 e2 61 98 9c 
    00000020: 4e 27 e2 61 98 9c 4e 27   e2 61 98 9c 4e 27 e2 61 
    00000030: 98 9c 4e 27 e2 61 98 9c   4e 27 e2 61 98 9c 4e 27 
    00000040: e2 61 98 9c 4e 27 e2 61   98 9c 4e 27 e2 61 98 9c 
    00000050: 4e 27 e2 61 98 9c 4e 27   e2 61 98 9c 4e 27 e2 61 
    00000060: 98 9c 4e 27 e2 61 98 9c   4e 27 e2 61 98 9c 4e 27 
    00000070: e2 61 98 9c 4e 27 e2 61   98 9c 4e 27 e2 61 98 9c 
    00000080: 4e 27 e2 61 98 9c 4e 27   e2 61 98 9c 4e 27 e2 61 
    00000090: 98 9c 4e 27 e2 61 98 9c   4e 27 e2 61 98 9c 4e 27 
    000000a0: e2 61 98 9c 4e 27 e2 61   98 9c 4e 27 e2 61 98 9c 
    000000b0: 4e 27 e2 61 98 9c 4e 27   e2 61 98 9c 4e 27 e2 61 
    000000c0: 98 9c 4e 27 e2 61 98 9c   4e 27 e2 61 98 9c 4e 27 
    000000d0: e2 61 98 9c 4e 27 e2 61   98 9c 4e 27 e2 61 98 9c 
    000000e0: 4e 27 e2 61 98 9c 4e 27   e2 61 98 9c 4e 27 e2 61 
    000000f0: 98 9c 4e 27 e2 61 98 9c   4e 27 e2 61 98 9c 4e 27 
    00000100: e2 61 98 9c 4e 27 e2 61   98 9c 4e 27 e2 61 98 9c 
    00000110: 4e 27 e2 61 98 9c 4e 27   e2 61 98 9c 4e 27 e2 61 
    00000120: 98 9c 4e 27 e2 61 98 9c   4e 27 e2 61 98 9c 4e 27 
    00000130: e2 61 98 9c 4e 27 e2 61   98 9c 4e 27 e2 61 98 9c 
    00000140: 4e 27 e2 61 98 9c 4e 27   e2 61 98 9c 4e 27 e2 61 
    00000150: 98 9c 4e 27 e2 61 98 9c   4e 27 e2 61 98 9c 4e 27 
    00000160: e2 61 98 9c 4e 27 e2 61   98 9c 4e 27 e2 61 98 9c 


    Bądź takie jak zmienię opcje:
    \0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\0x9cN'\0xe2a\0x98\
  • #6 9838105
    LordBlick
    VIP Zasłużony dla elektroda
    Moim skromnym zdaniem niepotrzebnie zawracasz sobie głowę tą biblioteką, co komplikuje tobie poznanie zasad programowania µC. Podstawa to nota katalogowa...
    Co do "IDE" to ja osobiście używam kate do edycji i terminala do kompilowania( z udziałem Makefile).
    Najprostszy kod - echo:
    Kod: text
    Zaloguj się, aby zobaczyć kod
    BTW. Polecam używanie kwarców z częstotliwościami dopasowanymi do transmisji RS232. W moim przypadku na topie jest 11.0592MHz.
  • REKLAMA
  • #7 10012871
    D12
    Poziom 14  
    Po długiej przerwie z rs232 wziąłem się do pracy i udało mi się odebrać z atmegi to co oczekiwałem. Oto program:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Z tym, że nie zawsze otrzymuje to co chce i muszę resetować i wtedy zależy jak się trafi. To pewnie sprawa błędów. Z tego co czytałem to powinienem dobrać odpowiedni kwarc do atmegi. Jaki polecacie? Potrzebuje zrobić przez rs232 pomiar temperatury przy pomocy układu DS18B20, oraz odczyt z enkodera to będzie taki jak są w lego MINDSTORMS.

    A i mam jeszcze pytanie w tym schemacie: http://www.piekary.net/~jermi/datasheets/avr_rs232obsluga.pdf piny w wtyczce COM 6 z 4 i 7 z 8 są zwarte a ja w swojej nie zwarłem. Czy powinienem je zewrzeć?
  • #8 10018735
    snnaap
    Poziom 25  
    D12 napisał:

    Z tym, że nie zawsze otrzymuje to co chce i muszę resetować i wtedy zależy jak się trafi. To pewnie sprawa błędów. Z tego co czytałem to powinienem dobrać odpowiedni kwarc do atmegi. Jaki polecacie? Potrzebuje zrobić przez rs232 pomiar temperatury przy pomocy układu DS18B20, oraz odczyt z enkodera to będzie taki jak są w lego MINDSTORMS.

    A i mam jeszcze pytanie w tym schemacie: http://www.piekary.net/~jermi/datasheets/avr_rs232obsluga.pdf piny w wtyczce COM 6 z 4 i 7 z 8 są zwarte a ja w swojej nie zwarłem. Czy powinienem je zewrzeć?


    Z tym kwarcem to jakiś "mit" którego temat był poruszany już wielokrotnie na tym forum. Przy prędkości 4800 i Q=1Mhz błąd wynosi 0.2% i jest "osiągalny" w normalnych warunkach użytkowanie uK.

    Co to znaczy, że "nie zawsze otrzymuje to co chcę i muszę resetować".

    Co do błędów wystarczy zaimplementować sobie na komputerze procedurę obliczania CRC, nie musisz nawet jej implementować w uK ponieważ DS sam ją wyliczy. Wystarczy tylko odebrać wszystkie dane od DS i wysyłać je do komputera. Następnie sprawdzić czy CRC się zgada, jeżeli nie zignorować otrzymane dane i po zabawie. Jednym słowem bajka.

    Co do zwierania pinów we wtyczce RS to osobiście robię to tak
    Link

    PS. Co ma robić jeszcze ten procek? Bo jeżeli nic to Atmega w tym przypadku to lekka przesada.
    Pozdrawiam
  • #9 10019006
    D12
    Poziom 14  
    snnaap napisał:
    PS. Co ma robić jeszcze ten procek? Bo jeżeli nic to Atmega w tym przypadku to lekka przesada.


    Kupiłem atmege8 żeby się nauczyć obsługi avr, a przy okazji to zrobić chcę na niej pracę inżynierską.
REKLAMA