POL
ENG

Interfejs spi dla układu ATtiny2313

Znalazłem jakiś czas temu w swojej piwnicy mój stary projekt. Było to zdalne sterownie oparte o ATtiny2313 w nadajniku i ATmega8535 w odbiorniku. Do transmisji danych użyłem wtedy dostępnych modułów radiowych, które mimo wszystko jakoś nie chciały płynnie współpracować. Prawdopodobnie dlatego właśnie, projekt ten znalazł się w miejscu wiecznego osamotnienia ;). Po tych kilku latach postanowiłem wskrzesić go do życia ale używając lepszych modułów RFM70. To sterowanie tymi urządzeniami potrzebny jest interfejs SPI. Z mojego doświadczenia z AVRami wynikało, że będzie to bułka z masłem. I o ile w przypadku ATmegi się nie pomyliłem, o tyle w przypadku malucha czekała na mnie niemiła niespodzianka. Okazuje się, że układ ten nie ma jako tako gotowego bloku SPI. Trzeba go sobie "poskładać". Wziąłem więc do ręki notę katalogową i zacząłem pisać. Wiele tego nie było, bo rejestrów jest raptem kilka, ale mimo to układ nie działał. Przysiadłem bardziej, uważniej studiując zapiski producenta. Dwa popołudnia później postanowiłem przestać być tak ambitny i sięgnąć do Googla. W Internecie roi się od gotowych bibliotek, ale jakoś żadna nie działa. Na forach można znaleźć wiele porad Zenków Cebulaków w stylu "to nie jest nic trudnego, musi działać", "robiłem to kiedyś, działało, ale nie mam już nigdzie kodu", "ten układ ma dedykowany blok do tego". Tracąc już nadzieję, trafiłem w końcu na JEDNĄ stronę, gdzie znalazłem działający program. Nie byłbym sobą, gdybym nie sprawdził, co robiłem źle. Tak na prawdę, to musiałbym napisać "co jest źle", ponieważ kod ten nie powinien działać.


while ((USISR & (1 << USIOIF)) == 0 ) {
  USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC);
}


block diagram


Z fragmentu programu i schematu blokowego powyżej widać, że dla tych ustawień USIDR (Universal Serial Interface Data Register) powinien być sterowany zewnętrznym sygnałem zegarowym. Potwierdza to też fragment noty katalogej poniżej. W moim układzie chciałem i skorzystałem z wewnętrznego taktowania. Z niewyjaśnionych dla mnie przyczyn układ ten jednak działa i nie wymaga zewnętrznego zegara.


clock select


Zatem tu są pliki do pobrania. Życzę miłego używania. Mam nadzieję, że zaoszczędziłem Ci chwilę z życia. Zostaw komentarz jeśli chcesz.


James 2016-02-09
Thanks!



Dodaj komentarz


ATtiny2313 spi interface, spi.c spi.h, AVR SPI, spi library for AVR

Wszelkie prawa zastrzeżone. Projekt i wykonanie strony SrcPro.pl