Skocz do zawartości

Równoległa praca dwóch mikrokontrolerów.


Pomocna odpowiedź

Napisano

Witam , mam pytanie do bardziej doświadczonych forumowiczów , czy możliwa jest równoległa praca dwóch mikrokontrolerów np. ATmega 8 lub Atmega 16 , tak aby współpracowały ze sobą w układzie i wymieniały dane ze sobą. Za odpowiedż z góry dziękuję i pozdrawiam.

A jakby miały wspólne źródło częstotliwości wzorcowej to chyba mozna znacznie przyśpieszyć transfer danych (mniejsza szansa na błędy).

Nie do końca.

Zależy jaki protokół transmisji wybierzesz. Synchroniczny czy asynchroniczny.

Nawet w transmisji asynchronicznej wymagana jest synchronizacja transmisji.

Zwykle Master w transmisji synchronicznej generuje sygnał CLOCK.

W transmisji asynchronicznej synchronizacja następuje na początku transmisji,
kiedy master generuje pierwsze np. cztery bity synchronizacyjne.

W tym przypadku paczka danych musi być na tyle krótka, żeby nie doszło do

rozsynchronizowania urządzeń.

Komunikacja przez SPI. Należy jedynie pamiętać, aby podczas programowania slave'a resetpować mastera, aby nie przeszkadzał w programowaniu. Prędkości mogą być duże, tylko po co? i tak dużo czasu procesora zajmie interpretacja protokołu transmisji.

Duża prędkośc to w tym wypadku ciekawostka, jednak przy użyciu rs'a o którym była mowa, brak rozbieżności w częstotliwościach znacznie zmniejsza ilośc błędów, sygnał taktujący i tak jest wspólny więc nie ma sensu dodatkowy sygnał od mastera, transmisja asynchroniczna jest w sumie synchroniczna, czyli rozwiązanie trochę bardziej efektywne.

I tak potrzebujesz użyć sygnału taktującego jeśli chcesz korzystać z synchornicznego RSa (USART, z naciskiem na S), albo dać generator kwarcowy, który sporo kosztuje. Ewentualnie drugi uC taktować pierwszym, ale w takim wypadku masymalna częstotliwość taktowania jest połowę mniejsza (czyli np. jeden taktowany 16MHz, drugi 8MHz).

Panowie jeśli jeden uC, będzie taktowany np. z generatora kwarcowego, czy z generatora RC lub wewnętrznego czy czegokolwiek innego, to dla atmegi88 zawsze można wyciągnąć ten sygnał na zewnątrz odpowiednim fusebitem " Clock output on PORTB0; [CKOUT=0]" i podpiąć do drugiego. Takim sposobem sam odblokowuje część źle zaprogramowanych fusebitów dla wyboru taktowania dla uC.

Komunikację można załatwić na wiele sposobów najprościej IMO USARTem w jakiejkolwiek postaci, najlepiej synchronicznym gdyż wymaga minimum przewodów, jeśli chcemy uzyskać maksimum poprawności transmisji to asynchroniczny z przelotem (hand-shake) .

Jeszcze można się komunikować za pomocą: SPI, 1-Wire, I2C, równolegle, co dusza zapragnie, własne protokoły też są tworzone.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...