Przygotowałem komunikację pomiędzy dwoma mikrokontrolerami Atmega16 za pomocą SPI pomiędzy sterownikiem, a robotem mobilnym. Komunikacja zrealizowana jest w taki sposób, że:
dla mastera:
- nadaje najpierw sygnał CS = 0;
- następnie wysyłane są parametry z tablicy o ilości elementów = 3;
- po zakończonej transmisji CS = 1;
dla slave'a:
- zmiana CS z 1 na 0 powoduje uaktywnienie przerwania zewnętrznego INT2, które zeruje SPI_rec_no;
- odebranie każdej danej uaktywnia przerwanie i powoduje zapisanie zawartości SPDR do odpowiedniej komórki tablicy.
Program dla mastera:
main.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
SPI_com.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
SPI_com.h
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Program dla slave'a:
main.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
SPI_slave.c
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jeżeli przesyłany jest tylko jeden parametr (tablica o wielkości 1) wszystko działa poprawnie. Natomiast jeżeli przesyłanych jest więcej parametrów wtedy nie sa odbierane poprawnie, robot zamiast jechać do przodu załącza światło, albo jedzie w złym kierunku, jeżeli ma załączyć światło to wtedy zaczyna jechać i światła mrugają. Czy może ktoś spotkał się z podobnym problemem?