Witajcie może ma kto pomysł na komunikacje między mikrokontrolerami i2c
jak rozwiązać probler adresu układów??
może jakiś przykład???
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj siękomunikacja mikrokontrolerów i2c
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Re: komunikacja mikrokontrolerów i2c
Ale jaki to problem?jak rozwiązać problem adresu układów??
Jaki stosujesz mikrokontroler?
Dlaczego podajesz tak mało danych?
MCS Electronics udostępnia bibliotekę do realizacji funkcji układu podrzędnego na I2C, ale z tego co wiem to jest płatna. Jeśli stosujesz mikrokontroler który posiada sprzętowy układ TWI to możesz samodzielnie napisać odpowiednie funkcje.
Sprzętowe realizacje TWI (czyli I2C wg. atmelowskiej terminologii) w ATMega i ATTiny różnią się zasadniczo.mam atmege 8515 jako master i dwie attiny jako slave
W ATmega masz do dyspozycji autonomiczny blok TWI. Do rejestru TWAR wpisujesz mu arbitralnie ustalony adres i2c-slave i spokojnie czekasz na przerwanie informujące, że masz do odebrania dane przysłane do tego właśnie slave-a.
Natomiast TWI w ATTiny jest obsługiwany przez USI (Universal Serial Interface) tzn. uproszczony interfejs szeregowy (wspólny dla SPI i I2C) składający się tak naprawdę tylko z dwóch bloków:
1) rejestru przesuwnego zamieniającego równoległe bajty na strumień bitów i vice versa (Serial In / Paralel In-Out / serial Out)
2) "Two Wire clock control unit" złożonego z 4-bitowego licznika i dosyć prostego automatu potrafiących (w trybie i2c-slave):
- rozpoznać sekwencje START i STOP na magistrali,
- odebrać do rejestru (lub z niego wysłać) 8-bitowe słowo danych
- odliczyć odpowiednią liczbę zboczy SCL taktujących tenże rejestr
- przytrzymać SCL w stanie "L" celem chwilowego wstrzymania transmisji,
- wygenerować dwa rodzaje przerwań.
Znaczniki owych przerwań to:
- USISIF (Start Condition Interrupt Flag) ustawiany po rozpoznaniu sekwencji START na magistrali I2C. Przerwanie to po pierwsze może obudzić uC z trybu obniżonego poboru mocy a po drugie daje programowi sygnał do dokończenia bieżących operacji, przygotowania się do odbioru i zwolnienia (przytrzymanej przez sprzęt) linii SCL zezwalające na dokończenie transmisji.
- USIOIF (Counter Overflow Interrupt Flag) ustawiany po odebraniu wszystkich 8 bitów słowa danych. USIOIF jest ustawiany po każdym słowie danych jakie przeturlało się po magistrali.
Zatem to do Twojego programu należy:
- wybranie sobie adresu i2c-slave jakim będziesz się posługiwał (nazwijmy go myaddr),
- śledzenie ruchu na magistrali, porównywanie odbieranych słów adresowych z wartością myaddr i na tej podstawie przełączanie się między trybami: rozadresowany, zaadresowany do odbioru, zaadresowany do nadawania
- obsługa transmisji w poszczególnych trybach, a w szczególności: konsumpcja danych odebranych, dostarczanie danych do wysłania a także programowa obsługa potwierdzeń ACK/NACK.
Przeczytaj _dokładnie_ sekwencję operacji opisaną na str. 145 PDFa do ATTiny2313:
http://www.atmel.com/dyn/resources/prod ... oc2543.pdf
(Fig.64 + 6 punktowy opis poniżej)
Czy da się to zrobić w Bascomie?
Jeżeli Bascom pozwala na zapis/odczyt rejestrów SFR oraz napisanie własnej obsługi przerwań to da się na pewno. Tyle, że na piechotę - tzn. z PDFem do ATTiny w ręku.
Ale czy Bascom zawiera jakieś gotowe procedury obsługujące i2c-slave z wykorzystaniem hardware-u zaszytego w ATTiny? Nie mam pojęcia.
--
MDz
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 25 gości