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.

[ATmega8][C] - Niewłaściwe odbierane znaki w PC z mikrokontrolera przez UART

Defozo 31 Gru 2012 17:38 1950 5
  • #1 31 Gru 2012 17:38
    Defozo
    Poziom 17  

    Witam, mam problem.
    Mam podłączony mikrokontroler ATmega8 do komputera przez przejściówkę USB<->RS232 UART TTL opartą o układ PL2303HX firmy Prolific.

    Mikrokontroler ma ustawione standardowe taktowanie 1 MHz.

    Kod, którym zaprogramowałem ATmegę8:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Niestety w PuTTY zamiast "a" odbieram "Ą".
    Mam ustawioną prędkość 19200 bps.

    Dlaczego tak się dzieje i jak to naprawić?

    Proszę o pomoc,
    Defozo

    0 5
  • #2 31 Gru 2012 18:02
    Fredy
    Poziom 27  

    Jeśli tą przejściówkę podłaczyłeś wprost do procka to zapewne nadajesz dane zanegowane. Daj negator i zobacz czy sie poprawi.

    0
  • #4 31 Gru 2012 18:24
    Defozo
    Poziom 17  

    Fredy napisał:
    Jeśli tą przejściówkę podłaczyłeś wprost do procka to zapewne nadajesz dane zanegowane. Daj negator i zobacz czy sie poprawi.

    Przepraszam, jestem początkujący i niezbyt rozumiem.
    Mam dać negator - bramkę logiczną (której nie posiadam), czy zrobić to jakoś programowo?

    quinty napisał:
    Może w menadżerze urządzeń są ustawione inne ustawienia?
    U mnie przejściówka pojawia się jako "USB data cable"
    [ATmega8][C] - Niewłaściwe odbierane znaki w PC z mikrokontrolera przez UART

    Faktycznie, miałem tu inne ustawienia, ale ich zmiana nic nie dała.

    0
  • Pomocny post
    #5 31 Gru 2012 18:38
    BlueDraco
    Specjalista - Mikrokontrolery

    Na ATmega masz ustawioną szybkość transmisji ok. 20.8 kbit/s, a oscylator wewnętrzny jest niedokładny. Zmień taktowanie procesora na 8MHz i zmień błędny wzór na wyliczenie dzielnika, to szanse sukcesu nieco wzrosną.

    0
  • #6 31 Gru 2012 19:45
    Defozo
    Poziom 17  

    BlueDraco napisał:
    Na ATmega masz ustawioną szybkość transmisji ok. 20.8 kbit/s, a oscylator wewnętrzny jest niedokładny. Zmień taktowanie procesora na 8MHz i zmień błędny wzór na wyliczenie dzielnika, to szanse sukcesu nieco wzrosną.

    Zmieniłem taktowanie wewnętrznego oscylatora na 8 MHz i ku mojemu zdumieniu zaczęło poprawnie przesyłać znaki!

    BlueDraco napisał:
    zmień błędny wzór na wyliczenie dzielnika

    A jaki jest poprawny?

    Dziękuję za pomoc,
    Defozo

    @edit

    Temat zamknięty, ale pomyślałem, że ta informacja może się przydać dla szukających poprawnego wzoru na wyliczanie dzielnika:
    Cytat:
    ( FOSC + BAUD * 8UL ) / (16UL * BAUD) -1

    lub
    Cytat:
    ( FOSC / 16.0 / BAUD - 0.5 )

    Źrodło: http://www.mirekk36.blogspot.com/2013/01/rs232-ubrr-jak-prawidowo-obliczac-trick.html

    Pozdrawiam,
    Defozo

    0