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

Komunikacja UART między ATmega8 8MHz a ATmega16 16MHz - czy to możliwe?

CyccX 03 Lip 2013 15:53 4626 17
  • #1 12483015
    CyccX
    Poziom 15  
    WItam,

    czy możliwe jest zrealizowanie komunikacji między procesorem atmega 8 pracującym z wew oscylatorem 8mhz [nadajniek], a atmega 16 pracującym z kwarcem 16mhz [odbiornik]???

    czy łącząc ze sobą mikrokontrolerry muszą one być taktowane jednakową prędkością ?
  • #2 12483217
    Paul_K
    Poziom 12  
    Komunikacja UART między ATmega8 8MHz a ATmega16 16MHz - czy to możliwe?

    Myślę że możesz :)
    UARTnie jest taktowany kwarcem , tylko pamiętaj o tej samej prędkości iw programach
  • #3 12483296
    kundzios
    Poziom 19  
    Paul_K napisał:
    Komunikacja UART między ATmega8 8MHz a ATmega16 16MHz - czy to możliwe?

    Myślę że możesz :)
    UARTnie jest taktowany kwarcem , tylko pamiętaj o tej samej prędkości iw programach


    A niby czym jest taktowany? Nie istnieje dodatkowy wbudowany (i stabilny) generator dla U(S)ART'a. Z naszego zegara głównego ale po wybraniu odpowiedniego dzielnika, kwarce oczywiście nie muszą być takie same ale Baud Rate musi być takie same. Jak nie wierzysz zobacz sobie jak wygląda wzór na BAUD w nocie i co podstawia się za fosc.

    Niestety transmisja poprzez U(S)ART nie jest możliwa jeśli jeden któryś z procesorów nie jest taktowany z kwarcu. Dokładniej to jest możliwa, ale można spodziewać się błędów, odsyłam do noty, tam można sobie policzyć błąd jaki wyniknie z odchyłki.

    CyccX :arrow: Do takiej wymiany danych nadaje się SPI jeśli układy są w miarę blisko, sygnał CLK z mastera "zsynchronizuje" slave'a podczas odbioru.
  • #4 12483338
    tmf
    VIP Zasłużony dla elektroda
    CyccX napisał:
    WItam,

    czy możliwe jest zrealizowanie komunikacji między procesorem atmega 8 pracującym z wew oscylatorem 8mhz [nadajniek], a atmega 16 pracującym z kwarcem 16mhz [odbiornik]???

    czy łącząc ze sobą mikrokontrolerry muszą one być taktowane jednakową prędkością ?


    Jak już ci napisano w przypadku ATMegi nie jest zalecana praca z generatorem RC, potrzebny jest kwarc. Chyba, że... zastosujesz synchroniczny interfejs USART. Wtedy oprócz Tx i Rx masz jeszcze linię CLK. ATMega to całkowicie wspiera, a USART urządzenia slave jest taktowany przez USART urządzenia master, odpadają więc problemy z odchyłkami częstotliwości zegarów.
  • #5 12483357
    CyccX
    Poziom 15  
    chciałem się poprostu dowiedzieć czy będzie działać mi komunikacja atmegi8 8MHZ z atmega 16 mhz jesli tak to super.

    obecnie mam dwie atmegi 8 8mhz oba z wewnętrznego generatora, i gadają bez problemu na 32400
  • #6 12483696
    tmf
    VIP Zasłużony dla elektroda
    Nie patrz na to co ci przez przypadek działa, tylko na to co jest napisane w notach. Przy informacjach na temat generatora RC łatwo znajdziesz jego stabilność, a z tego już łatwo policzyć o ile muszą się zmienić warunki (zasilanie, temperatura), żeby to nie działało.
    Ergo, problemem nie jest to, że jedna ATMega działa z zegarem 8, a druga 16 MHz, tylko to, że jedna działa z wewnętrznym generatorem RC, który nie jest przewidziany do taktowania USART. A przynajmniej nie bez specjalnych zabiegów.
  • #7 12483896
    kundzios
    Poziom 19  
    CyccX, podgrzej Atmegę z taktowaniem RC i możesz otrzymywać głupoty zamiast prawidłowych danych. Działać działa bo akurat Ci się udało, jak chcesz aby działało stabilnie to niestety zostaje dołożenie kwarcu lub zmiana typu transmisji.
  • #8 12488027
    CyccX
    Poziom 15  
    ok rozumiem, zrezygnuję z wewnętrznego RC, i zamontuje kwarce.

    dla ścisłości komunikacja jaka używam to UART, wykorzystuje tylko linię Rx w jednym i Tx w drugim procku, nie dzielę się miedzy nimi SCK.

    Dodano po 11 [minuty]:

    Panowie a jak to jest z kondensatorami przy kwarcu ??? są one potrzebne ??? czy zaprogramowanie CKOPT jest wystarczające
  • #10 12491321
    kundzios
    Poziom 19  
    CyccX, podaj dokładniejszą specyfikację (np. odległość układów od siebie) to łatwiej będzie nam podpowiadać. Każdy rodzaj magistrali ma swoje lepsze i gorsze punkty.
  • #11 12501346
    CyccX
    Poziom 15  
    tmf napisał:

    Tak, kondensatory przy kwarcu są niezbędne, CKOPT możesz włączyć.


    właśnie podłączyłem kwarc i procesor rusza z prędkośćia 16mhz, bez żadnych zewnętrznych kondensatorów :). tylko zatrzymuje się gdy dotknę palcem kwarcu, czy podłączenie kondensatorów spowoduje że procek nie będzie się zatrzymywał ???



    specyfikacja jest taka że ma to być komunikacja jednokierunkowa z jak najmniejszą ilością linii. odległość między nadajnikiem a odbiornikiem to ~50cm w warunkach samochodowych.

    tak szczerze korzystam z UART bo komunikację rozwiązałem za pomocą jednej lini [tak naprawdę są trzy bo tą samą linią przesyłam jeszcze zasilanie do płytki odbierającej czyli GND, 5V, TX]

    o USART nie pomyślałem bo nie wiedziałem że jest takie coś i nie wiem jak się taką transmisję obsługuje w bascom :) no i jednak jedna dodatkowa linia to też dla mnie działa na nie korzyść.

    Ma to być tak że nadajnikiem jest atmega8 taktowana 8mhz , a odbiornik to mega16 16mhz - wymagana większa prędkość do obsługi GLCD

    Dodano po 35 [sekundy]:

    komunikacja polega na przesyłaniu 6 bajtów danych co około 300ms
  • #12 12501568
    kundzios
    Poziom 19  
    CyccX napisał:
    tmf napisał:

    Tak, kondensatory przy kwarcu są niezbędne, CKOPT możesz włączyć.


    właśnie podłączyłem kwarc i procesor rusza z prędkośćia 16mhz, bez żadnych zewnętrznych kondensatorów :). tylko zatrzymuje się gdy dotknę palcem kwarcu, czy podłączenie kondensatorów spowoduje że procek nie będzie się zatrzymywał ???



    specyfikacja jest taka że ma to być komunikacja jednokierunkowa z jak najmniejszą ilością linii. odległość między nadajnikiem a odbiornikiem to ~50cm w warunkach samochodowych.

    tak szczerze korzystam z UART bo komunikację rozwiązałem za pomocą jednej lini [tak naprawdę są trzy bo tą samą linią przesyłam jeszcze zasilanie do płytki odbierającej czyli GND, 5V, TX]

    o USART nie pomyślałem bo nie wiedziałem że jest takie coś i nie wiem jak się taką transmisję obsługuje w bascom :) no i jednak jedna dodatkowa linia to też dla mnie działa na nie korzyść.

    Ma to być tak że nadajnikiem jest atmega8 taktowana 8mhz , a odbiornik to mega16 16mhz - wymagana większa prędkość do obsługi GLCD

    Dodano po 35 [sekundy]:

    komunikacja polega na przesyłaniu 6 bajtów danych co około 300ms

    Widzę że ostro kombinujesz :)
    1. Kondensatory obowiązkowo muszą być, tak jest i koniec. Poczytaj dokładniej notę katalogową. Bez kondensatorów to jak 5kg młotek na cienkiej nitce, cudem wisi...
    2. UART nadaje się na taką odległość, ale niestety w samochodzie są spore zakłócenia, bez filtracji się nie obędzie, jakaś kontrola wysyłanych danych wskazana.

    Widzę że jesteś bardzo początkujący w tym temacie, może Cię czekać sporo rozczarowań, samochód nie jest łatwym miejscem na transmisję danych. Samo zasilanie musisz filtrować, jak wysyłasz zasilanie z jednej do drugiej płytki to także musisz je odfiltrować, uważać aby zakłócenia nie weszły od strony wypuszczonego zasilania z płytki gdzie jest stabilizator 5V.
    Jeśli oba UART'y ustawisz na taki sam Baud Rate to będzie działać. Zostaje kwestia zakłóceń.
  • #13 12501701
    M. S.
    Poziom 34  
    W moim sterowniku kotła CO M32 wysyła po UART bajt do M8 informujący o aktualnie potrzebnej prędkości pracy wentylatora. Oba pracują na wewnętrznym generatorze od kilku lat non stop 8-O . Błędów brak. Jedynie przed uruchomieniem musiałem podregulować zegar M8.
  • #14 12501738
    kundzios
    Poziom 19  
    Działać działa, ale zalecane to nie jest, od zmiany temperatury może się znacznie "rozjechać", może twój algorytm wysyła bajty tak często że nawet jak jeden bajt przyjdzie błędny to zaraz będzie poprawiny na nowy, mogę gdybać. Faktycznie po kalibracji wew. RC można to ładnie zgrać, ale i tak nie jest to zalecane, jak zależy na większej niezawodności to jednak polecam rezonator kwarcowy.
  • #15 12504533
    CyccX
    Poziom 15  
    wcale nie jest tak źle z tą transmisją gdyż już wykonałem jedne takie urządzenie ale na 2x atmega 8 taktowane RC 8mhz. I wszystko działa piknie :) widocznie mam fart.

    Układ wyposażyłem w kondensatorki filtrujące więc jakoś tam filtracja jest.

    I podobnie jak u kolegi wyżej, podłączyłem kwart bez kondensatorów 36pF i śmiga.



    ale narodziło się nowe pytanie Panowie:

    oba uC które wykorzystuje pracują na napięciu 5V by sprawnie taktować je kwarcem 16mhz. Jeden z nich współpracuje z układami [SPI] które działają na napięcie 3.3V. Dlatego by móc komunikować ze sobą układy o różnych napięciach pracy użyłem level translatora max3373. Podczas lutowania i testowania układów napotkałem na nie lada zaskoczenie.

    Ustawiłem cały port C jako wyjście i na każdym porcie stan wysoki.
    JtAG wyłączony.
    Do portc.7 podłączony jest translator, portc.6 wisi w powietrzu.
    Level translator zasilany regulatorem 3.29V , atmega zasilana z USB 4.99V.

    I tak mierząc napięcia:

    na nóżce portc.6 mam stan wysoki 4.78V, a ku mojemu zdziwieniu na nóżce portc.7 mam 3.33V.. Za translatorem jest tak jak powinno czyli 3.29V. Nóżka ma Toggle stan co 2 sekundy i za każdym razem stan wysoki to 3.33V.

    Czy atmega 16 ma jakieś systemy auto adaptacji czy jakieś inne czary ??? Bo może się okaże że nie muszę stosować tych level translatorów
  • #16 12508528
    CyccX
    Poziom 15  
    Pytanie nr 2.

    Koledzy, kto opisze mi jak zrealizować transmisję przez UART tak by proces transmisji był kontrolowany. Mam na myśli by ODBIORNIK wysyłał informację do nadajnika że jest gotowy do odbierania kolejnego pakietu danych i wtedy by nadajnik wysyłał kolejna paczkę.
  • #18 14055012
    jhusak
    Poziom 13  
    Odgrzeję temat, bo odpowiedzi nie ma:

    Cytat:
    na nóżce portc.7 mam 3.33V


    Czyżby wewnętrzna zabezpieczająca dioda na wejściu translatora ściągająca napięcie wejścia do napięcia zasilania translatora?

    Przeczytaj NAJPIERW notę translatora, tam zapewne jest albo opisane, że tak jest, albo wręcz jest zamieszczony schemat wejścia. Oszczędzisz sobie i innym czasu, który następnie można przeznaczyć na coś ciekawego :)

    Generalne podejście: nie znasz noty na pamięć - nie zabieraj się za robienie poważnych rzeczy. Zabawa i nauka - oczywiście tak, ale odpowiedzialność za nie zawsze pracujący układ wymaga znacznie zwiększonego nakładu pracy od projektanta.

    Z takim podejściem nie miałem raczej problemów z działaniem układów, które zaprojektowałem. Wyjątek - raz nie zabezpieczyłem bramek tranzystorów mosfet 2n7002 (pracujących jako wejścia z zewnątrz) i co dziesiąty układ po podłączeniu nie działał. 60V to zbyt mało na elektrostatyczne wyładowania... Dioda zenera na 9v zaporowo do masy załatwiła sprawę.

    Druga sprawa - odchyłki wewnętrznego generatora RC dla atmegi8 przy stabilnym zasilaniu 5V to 8MHz +-2.5% w zakresie temperatur -30 ..+70 stopni Celsjusza (oczywiście w nocie jest to napisane), podczas gdy maksymalny błąd dopuszczalny rozjechania prędkości to 5%, osiągany dopiero w temp. 110 stopni Celsjusza. Co nie zmienia faktu, że na kwarcu będzie działało stabilniej, niż stabilnie.
REKLAMA