Liczba postów: 2,376
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
04-05-2019, 15:38
(Ten post był ostatnio modyfikowany: 04-05-2019, 15:39 przez kaczakat.)
Komunikacja prze I2C nie jest demonem prędkości. Sprawdź czy działa na 100kHz i ewentualnie spróbuj ustawić na 400kHz. Zawsze to będzie parę ms szybciej.
Czas ładownia danych do oleda może sprawdzić korzystając z funkcji micros(), odczytujesz wartość przed, po, różnica na serial.
Tu na forum wrzuciłem również bibliotekę z przykładem gdy właśnie nie jest buforowany cały ekran, wgranie jednej z 8 linii trwa oczywiście odpowiednio krócej.
Jak widzisz w ramach tego co daje Arduino można już przyspieszyć x32 , a I2C może też chodzić w UNO ok i na 800kHz, trudniej odbierać wtedy dane i nie każdy slave to ogarnie.
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
04-05-2019, 16:31
(Ten post był ostatnio modyfikowany: 04-05-2019, 16:55 przez es2.)
(04-05-2019, 15:38)kaczakat napisał(a): Komunikacja prze I2C nie jest demonem prędkości.
Wysłanie 1kB po I2C, nawet przy 100kHz to ok 92ms. Czas transmisji nie będzie problemem gdy użyje się przerwań. Wtedy obciążenie CPU to co najwyżej kilka procent. RAM'u na bufor wystarczy.
(04-05-2019, 15:38)kaczakat napisał(a): Sprawdź czy działa na 100kHz i ewentualnie spróbuj ustawić na 400kHz.
Standardowo biblioteki obsługujące LCD, na czas transmisji do wyświetlacza, ustawiają 400kHz. Po transmisji przywracają poprzednio ustawianą prędkość.
(04-05-2019, 15:38)kaczakat napisał(a): I2C może też chodzić w UNO ok i na 800kHz, trudniej odbierać wtedy dane i nie każdy slave to ogarnie.
Te 800kHz to sobie darujmy na AVR, bo to porada w stylu "AVR można zasilić z 7V i nic się nie stanie). Ponadto, w dokumentacji SSD1306 wyraźnie napisano, min czas cyklu sygnału SCL to 2,5us. Dawno skończyłem szkołę i może się mylę, ale mnie wychodzi 400kHz.
Przez takie "porady" przekraczania dwukrotnie dopuszczalnych parametrów, projekty na Arduino działają u autora, na stole. Próba powielenia takiego "projektu" bardzo często kończy się niepowodzeniem!
W tym przypadku proponowane jest dwukrotne przekroczenie dopuszczalnej prędkości dla AVR (w projekcie widać, że używany jest sprzętowy I2C) jak i LCD. Może do kompletu zaproponować zasilanie uC napięciem 10V i taktowanie zegarem 32MHz?
Jakość Arduino jest taka sama jak jakość (właściwie jej brak) jego użytkowników.
Liczba postów: 856
Liczba wątków: 2
Dołączył: Nov 2017
05-05-2019, 10:33
(Ten post był ostatnio modyfikowany: 05-05-2019, 10:36 przez es2.)
(04-05-2019, 23:09)kaczakat napisał(a): Ja testowałem i działa
To, że u jednego zadziała nie oznacza, że u innej osoby będzie ok. Problem jest o tyle istotny, że zależnie od egzemplarza układu, napięcia zasilania i wielu innych czynników, może działać, może nie działać albo pojawią się błędy, które mogą być częste lub rzadkie.
Posiadając sprzęt i wiedzę nie ma problemu stwierdzić ile można w danej sytuacji "wycisnąć" z układów ale początkujący nie ma wiedzy i najczęściej nie ma sprzętu a jak ma nie wie jak się nim posługiwać.
To, że ja potrafię jeździ na monocyklu czy chodzić po linie nie oznacza, że początkujący to potrafi!!!
Dlatego początkującym nie należy dawać porad przekraczania dopuszczalnych parametrów, do czego potrzeba wiedzy i sprzętu.
PS1
Z AVR można wycisnąć pomiędzy 1 a 2MHz ale programowo.
PS2
Nie użyłem koloru czerwonego! Czerwony to #FF0000, kolor, którego użyłem to #FF3333