Potrzebowałem szybkiej i niewymagającej dokładnego zegara komunikacji pomiędzy dwoma uC, a UART, SPI i i2c miałem zajęte. Wziąłem więc kartkę o ołówek i wyrzeźbiłem bibliotekę. Pomysł nie był specjalnie odkrywczy: dwie linie, linia danych i linia zegarowa, przy czym transmisja bitu wygląda w następujący sposób:
1) ustawienie stanu linii danych
2) puls linii zegarowej
3) czekanie na puls linii zegarowej (potwierdzenie)
4) goto 1)
Całość zaimplementowałem z użyciem dowolnego przerwania zewnętrznego (PCINTn lub INTn) i dowolnego innego GPIO. Na początku pliku nagłówkowego jest obszerna konfiguracja pozwalająca skonfigurować bibliotekę do własnych potrzeb (timeouty, długości impulsów, czasy zbocz, użycie wbudowanych pullupów i inne). Nie widzę sensu pisania szczegółów, jako że są one w komentarzach.
Ustawiając timeout odpowiednio długi można użyć transmisji danych do obudzenia procesora z deep-sleep, co też u mnie okazało się być niezwykle przydatne.
Wydaję mi się, że odwaliłem kawał porządnej roboty, może komuś się przyda. Szkoda mi tak porostu chować to do szuflady.
I tak, wiem że pod SPI i i2c można podpiąć więcej niż jedno urządzenie i nie, nie mogłem tego zrobić. Nie chce mi się tłumaczyć dlaczego.
1) ustawienie stanu linii danych
2) puls linii zegarowej
3) czekanie na puls linii zegarowej (potwierdzenie)
4) goto 1)
Całość zaimplementowałem z użyciem dowolnego przerwania zewnętrznego (PCINTn lub INTn) i dowolnego innego GPIO. Na początku pliku nagłówkowego jest obszerna konfiguracja pozwalająca skonfigurować bibliotekę do własnych potrzeb (timeouty, długości impulsów, czasy zbocz, użycie wbudowanych pullupów i inne). Nie widzę sensu pisania szczegółów, jako że są one w komentarzach.
Ustawiając timeout odpowiednio długi można użyć transmisji danych do obudzenia procesora z deep-sleep, co też u mnie okazało się być niezwykle przydatne.
Wydaję mi się, że odwaliłem kawał porządnej roboty, może komuś się przyda. Szkoda mi tak porostu chować to do szuflady.
I tak, wiem że pod SPI i i2c można podpiąć więcej niż jedno urządzenie i nie, nie mogłem tego zrobić. Nie chce mi się tłumaczyć dlaczego.
