16-01-2025, 19:58
Dzięki za odpowiedź.
Właśnie o to chodzi że nie chcę mieć 100% kontroli nad rejestrami itp. Po to się sięga po języki takie jak Arduino żeby nie trzeba było się w takie rzeczy bawić. Równie dobrze można zejść jeszcze niżej i zamiast w C pisać w assemblerze.
Jak wspomniałem, programistą jestem raczej kiepskim, coś tam wiem ale jestem za cienki aby napisać własny tego typu kod od początku do końca. Gdybym umiał to bym napisał, a nie przerabiał czyjś.
Spodziewałem się, że wywołanie funkcji analogRead() samoczynnie ustawi odpowiednie rejestry uC. W tym przypadku wiele wskazuje na to że tak się nie dzieje. Może trzeba coś więcej niż wywołać funkcję? Próbowałem podejrzeć jak to robią inni ale niestety nie znalazłem niczego sensownego.
Jeśli chodzi o sam kod to chyba tragedii nie ma. Wprawdzie kompilator podaje tylko bardzo ogólne informacje, ale nie wygląda to źle:
Ramu faktycznie nie ma wiele ale jeśli chodzi o I2C to w tym uC sam Atmel poleca wykorzystać USI do tego celu. Jest nawet dokument temu poświęcony - "AVR310: Using the USI module as a TWI Master"
Można tam trafić na taką informację:
Ogólnie oryginalny kod działa dobrze, nie zauważyłem aby się coś zacinało itd.. Zresztą sądząc po zawartości strony autora tego kodu, można dojść do wniosku że zna się na tym, tworzy np. mini konsole do gier z wykorzystaniem tego uC.
Oryginalnego kodu i zasobów uC bym się nie czepiał, błąd jest albo po mojej stronie, albo w jakiejś bibliotece Arduino. Chciałbym się dowiedzieć co tu jest nie tak i albo to poprawić jeśli to moja wina, albo ew. zgłosić błąd do autora wadliwej biblioteki.
Rozwiązanie z ręcznym ustawianiem zawartości rejestru traktuje jako działanie diagnostyczne, a nie docelowe, szczególnie że i tak nie działa w 100% poprawnie.
Właśnie o to chodzi że nie chcę mieć 100% kontroli nad rejestrami itp. Po to się sięga po języki takie jak Arduino żeby nie trzeba było się w takie rzeczy bawić. Równie dobrze można zejść jeszcze niżej i zamiast w C pisać w assemblerze.
Jak wspomniałem, programistą jestem raczej kiepskim, coś tam wiem ale jestem za cienki aby napisać własny tego typu kod od początku do końca. Gdybym umiał to bym napisał, a nie przerabiał czyjś.

Spodziewałem się, że wywołanie funkcji analogRead() samoczynnie ustawi odpowiednie rejestry uC. W tym przypadku wiele wskazuje na to że tak się nie dzieje. Może trzeba coś więcej niż wywołać funkcję? Próbowałem podejrzeć jak to robią inni ale niestety nie znalazłem niczego sensownego.
Jeśli chodzi o sam kod to chyba tragedii nie ma. Wprawdzie kompilator podaje tylko bardzo ogólne informacje, ale nie wygląda to źle:
Kod:
Sketch uses 3972 bytes (48%) of program storage space. Maximum is 8192 bytes.
Global variables use 15 bytes (2%) of dynamic memory, leaving 497 bytes for local variables. Maximum is 512 bytes.Można tam trafić na taką informację:
Cytat:The USI Two-wire mode is compliant to the TWI bus protocol, but without slew rate limiting on outputsCzyli w zasadzie można mówić o sprzętowym I2C choć z pewnymi ograniczeniami. Czy Arduino z tej możliwości korzysta nie wiem.
and input noise filtering.
Ogólnie oryginalny kod działa dobrze, nie zauważyłem aby się coś zacinało itd.. Zresztą sądząc po zawartości strony autora tego kodu, można dojść do wniosku że zna się na tym, tworzy np. mini konsole do gier z wykorzystaniem tego uC.
Oryginalnego kodu i zasobów uC bym się nie czepiał, błąd jest albo po mojej stronie, albo w jakiejś bibliotece Arduino. Chciałbym się dowiedzieć co tu jest nie tak i albo to poprawić jeśli to moja wina, albo ew. zgłosić błąd do autora wadliwej biblioteki.
Rozwiązanie z ręcznym ustawianiem zawartości rejestru traktuje jako działanie diagnostyczne, a nie docelowe, szczególnie że i tak nie działa w 100% poprawnie.

