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 - MMusb232TL USART

Dolby1337 22 Lut 2016 18:48 981 22
  • #1 22 Lut 2016 18:48
    Dolby1337
    Poziom 4  

    Witam!
    Mam problem, otóż chcę połączyć komputer z Atmegą8 za pomocą USART'a, lecz nie ma komunikacji ze strony mikrokontrolera. Moduł jakiego używam to MMusb232RL, terminal to Terminal by Br@y. Program, który wgrywam na mikrokontroler:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Zwierałem TXD i RXD w module MMusb232RL i jest echo w terminalu. Połączenia MMusb232RL z mikrokontrolerem: TXD -> RXD, RXD -> TXD. Co robię źle?

    0 22
  • #2 22 Lut 2016 18:55
    grko
    Poziom 32  

    1. Nie definiuj F_CPU w kodzie.
    2. Masz źle konfigurację USARTA . Włączyć receiver i transmiter powinieneś zrobić na końcu a nie na początku inicjalizacji.

    0
  • #3 22 Lut 2016 19:02
    BlueDraco
    Specjalista - Mikrokontrolery

    Masy połączyłeś?

    0
  • #4 22 Lut 2016 19:55
    Dolby1337
    Poziom 4  

    GrzegorzKostka napisał:
    2. Masz źle konfigurację USARTA . Włączyć receiver i transmiter powinieneś zrobić na końcu a nie na początku inicjalizacji.

    Nie wydaje mi się, aby to było błędem.

    BlueDraco napisał:
    Masy połączyłeś?

    Tak.

    Dodano po 33 [minuty]:

    Podłączając MMusb232RL z Atmegą8 w taki sposób:
    RXD -> TXD
    TXD -> RXD
    GND -> GND
    3V3 -> VCC
    jest brak połączenia. Co ciekawe, gdy przerywam połączenie 3V3 -> VCC w terminalu pojawia mi się coś takiego:
    ATMEGA8 - MMusb232TL USART

    0
  • #5 22 Lut 2016 20:18
    grko
    Poziom 32  

    Z tego co widze działasz na internal RC 1MHz. USART może nie działać dla takiego źródła zegara. W datasheet masz tabelkę z ustawieniami UBRR dla danych częstotliwości oraz błędy transmisji.

    0
  • #6 22 Lut 2016 20:26
    Dolby1337
    Poziom 4  

    GrzegorzKostka napisał:
    Z tego co widze działasz na internal RC 1MHz. USART może nie działać dla takiego źródła zegara.

    Dlaczego?

    0
  • Pomocny post
    #7 22 Lut 2016 20:33
    grko
    Poziom 32  

    Otworzyłeś datasheet? Bo coś zdaje mi się że nie bardzo. Tabelka na stronie 153. Nawet zakładając że masz dokładną częstotliwość (a nie masz bo to RC) to nie wyciągniesz baudrate 9600 bo będziesz miał 7% błędu.

    0
  • #8 22 Lut 2016 20:36
    Dolby1337
    Poziom 4  

    GrzegorzKostka napisał:
    W datasheet masz tabelkę z ustawieniami UBRR dla danych częstotliwości oraz błędy transmisji.

    No dobrze, ale błędy wynoszą mniej niż 10% dla częstotliwości 1MHz. U mnie wysyła 3 bity, a odbiera 1 czyli coś jest nie tak.

    0
  • Pomocny post
    #9 22 Lut 2016 20:39
    grko
    Poziom 32  

    Datasheet strona 30.

    Cytat:

    ...
    frequency selected, this calibration gives a frequency within ±3% of the nominal frequency
    ...


    W zasadzie w tabelce z przykładowymi wartościami UBRR masz rozwiązanie Twojego problemu.

    0
  • #10 22 Lut 2016 20:47
    Dolby1337
    Poziom 4  

    Sęk w tym, że jakiś czas temu na tym samym sprzęcie udało mi się nawiązać połączenie i to na wewnętrznym oscylatorze RC. Wtedy, gdy wysyłałem ten sam znak kilkanaście razy, to załóżmy 2 albo 3 razy trafiał się odczyt z błędem.

    0
  • Pomocny post
    #11 22 Lut 2016 20:54
    grko
    Poziom 32  

    Dobra, to ostatni post bo szkoda klawiatury. Nie wiem skąd masz takie info że niedokładność zegara musi być mniejsza niż 10%. Na moje oko to jest %5 (połowa czasu trwania bitu). I jak masz błąd większy niż ta wartość to transmisja nie będzie działać. Kolejna rzecz:

    1000000 / (16 * 9600) - 1 = 5.51041666667

    czyli wpisujesz do UBRR wartość 5. W datasheet masz dla wartości 6 błąd równy 7%. Dla wartości 5 nawet nie chce mi się liczyć. Do tego dokłada się niedokładność wewnętrznego oscylatora RC. No ale próbuj dalej, może jakimś cudem zadziała.

    0
  • #12 22 Lut 2016 21:27
    Dolby1337
    Poziom 4  

    Zauważyłem, że niektóre piny były ustawione jako wyjścia w stanie wysokim. Ustawiłem wszystkie piny mikrokontrolera na wyjścia i stan niski i o dziwo transmisja przebiega pomyślnie.

    Dodano po 24 [minuty]:

    Pojawił się kolejny problem. Otóż transmisja przebiega pomyślnie, gdy procesor zasilany jest napięciem 3,3V. Gdy jest zasilany 5 V pojawiają się błędy:
    ATMEGA8 - MMusb232TL USART

    Jaka jest przyczyna i jak to rozwiązać?

    0
  • Pomocny post
    #14 22 Lut 2016 21:43
    BlueDraco
    Specjalista - Mikrokontrolery

    Niektóre jak widać działają na 3.3, a przy okazji częstotliwość RC odjechała we właściwą stronę no i mamy sukces, dopóki słoneczko nie przygrzeje... ;)

    1
  • #16 22 Lut 2016 21:58
    Dolby1337
    Poziom 4  

    Przepraszam wszystkich za wprowadzenie w błąd, mikrokontroler to ATMEGA8A.

    Dodano po 7 [minuty]:

    BlueDraco napisał:
    Niektóre jak widać działają na 3.3, a przy okazji częstotliwość RC odjechała we właściwą stronę no i mamy sukces, dopóki słoneczko nie przygrzeje... ;)

    Nie bardzo rozumiem co miał na myśli autor wpisu.

    0
  • Pomocny post
    #17 22 Lut 2016 22:13
    BlueDraco
    Specjalista - Mikrokontrolery

    Widać trzeba pisać drukowanymi... To, że Twój układ chwilami działa, chociaż nie powinien - to wynik sprzyjającego zbiegu okoliczności. Z powodu obniżenia napięcia zasilania przestroił Ci się niestabilny generator - no i się udało zasynchronizować trasmisję, przez czysty przypadek. Ok, ale, jak już pisano wyżej - tak się NIE projektuje, bo to droga do katastrofy. Np. jeśli podgrzejesz nieco układ, to może już przestać działać, bo zmieni się częstotliwość generatora.

    0
  • #18 22 Lut 2016 22:18
    Dolby1337
    Poziom 4  

    Mógłbym prosić o jakieś wskazówki na co mam zwrócić uwagę, aby to naprawić?

    0
  • Pomocny post
    #19 22 Lut 2016 22:48
    BlueDraco
    Specjalista - Mikrokontrolery

    Na to wszystko, co w tym wątku powtarzamy Ci do znudzenia.

    0
  • #21 23 Lut 2016 10:13
    Dolby1337
    Poziom 4  

    Ustawiłem źródło taktowania na zewnętrzny kwarc 14,7456 MHz.
    Program:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    ATMEGA8 - MMusb232TL USART

    Transmisja przebiega pomyślnie bez błędów, co widać na załączonym obrazku.

    0
  • #23 23 Lut 2016 11:23
    Dolby1337
    Poziom 4  

    dondu napisał:
    Niezależnie od napięcia zasilania oczywiście? :)


    Tak jest. Zarówno na 3,3V jak i 5V działa tak samo dobrze. :)

    0