Tej biblioteki o której piszesz niestety nie znam, ale na serio może warto po prostu zaopatrzyć się atnelową bibliotekę MK I2C jeśli chcesz nastawić się na szybki rezultat.
https://sklep.atnel.pl/pl/p/0581_0582-M ... teka-C/244Ja pisałem swoją własną obsługę I2C na przerwaniach (akurat mi na tym zależało), ale też poważnie się zakałapućkałem z tym I2C i gdybym nie miał Mirkowej biblioteki jako referencji, to bym wszystkie włosy chyba z głowy wyrwał.
Z rzeczy na których utknąłem w którymś momencie mogę wymienić:
- niepoprawne oczekiwanie na zakończenie operacji TWI (jeśli nie przerwanie, to trzeba czekać na bit TWINT w rejestrze TWCR)
- odpowiednie ustawianie ACK/NACK przy transmisji - błąd potrafi "zawiesić magistralę" w subtelnych okolicznościach - np. kiedy ostatni bit transmisji jest zerem.
- na implementację I2C trochę trzeba patrzyć jak na graf operacji, albo maszynę stanów - zauważyłem, że przejście z poprzedniego stanu do następnego musi być zrobione dokładnie tak jak dokumentacji procka opisane - jak zrobi się coś inaczej, to zaczynają się fajerwerki
podrzucam mój własny przykład implementacji TWI (w trybie Slave) - w dość specyficznym wykorzystaniu - niezbyt generyczne - ale być może się przyda jako referencja, choć z perspektywy czasu nie wydaje mi się ten kod zbyt czytelny - mimo, że sam go pisałem
https://github.com/k-moskwa/kmSigGen/bl ... TWISlave.c