• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Mega2560 pro wolna praca programu z u8glib
#1
Kupilem płytkę Mega 2560 pro i podłączyłem do niej duży 5" lcd  mono 240 x 128 na sterowniku T6963c .
Kod:
U8GLIB_T6963_240X128 u8g(49, 48, 47, 46, 45, 44, 43, 42, 37, 36, 35, 34, 33);
Obsługuje to biblioteka u8glib.I pytanie takie do kolegów czyta biblioteka tak muli procesor że prosty program do liczenia sekund na millis() :
Kod PHP:
if (millis() - lastmillis >= 1000 ){ // odliczanie sekund stopera
 
    lastmillis millis();      
      
         sekundy 
++;
 } 
nie liczy dokładnie sekund tylko strasznie opóźnia wskazania o jakieś 400ms każdą...Ponadto reakcja na przyciski jest masakrycznie opóźniona.Na arduino nano i adafruit działa to normalnie.Mega 2560 pro  16Mhz zakupiona w Chinach.Nie udało mi się wypalić bootloadera i programuje przez ISP.Może Fusy mam źle ustawione ..

Sprawdzane mk avrcalculatorem:

LOW : 0xFF
HIGH :0xD9 na 0xD8 nie wgrywa programu
EXTENDED: 0x FD
zewnętrzny kwarc > 8Mhz podział przez 8 wyłączony
 
Odpowiedź
#2
Wyświetlacz po prostu jest stary, nie wiem jakiej prędkości od niego oczekujesz. Mega w Arduino może mulić bardziej niż w C AVR, pisząc program na Atmegę do komunikacji równoległej zrobiłbyś to tak by wszystkie piny do 8 linii były na jednym porcie, wtedy jednym bajtem w kilka cykli zegara wysyłasz całość. W Arduino wszystkie piny są przemapowane i musiałbyś sobie sprawdzić czy nie korzystasz z 3 czy 4 portów, a dodatkowo użycie uniwersalnych oznaczeń pinów to już X x wolniejszy kod – porównaj sobie czas migania led z digitalWrite i przesunięciami bitów na porcie.
Ale jest łatwiej i nie musisz wiedzieć jakie porty masz, coś za coś.
Jak Cię interesuje ile coś trwa to można użyć funkcji micros() przed i po danej funkcji, przypisać do zmiennych, odjąć i wiesz. A jeszcze lepiej wystawić wartość przeciwną na jakiś pin i po funkcji wrócić, czas zmierzyć analizatorem logicznym lub oscyloskopem.
Jak pętla loop trwa ponad sekundę to oczywiście nic nie będzie responsywny program.
Co do bootloadara to znalazłbyś tu na forum wskazówki jak to zrobić. Arduino czasami ma dziwne wersje AVRDUDE i nie zgrywa się z dziwnymi sterownikami USBASP. Oczywiście nie musisz wgrywać bootloaderem, ale wypalenie bootloadera to przede wszystkim prawidłowo ustawienie fuse płytki zgodnie z oczekiwaniami kompilatora.
Ściągnij sobie AVR LAB ++ 2.4, on ma wrzucone AVR DUDE działający z Arduino (MK ma jakąś starą wersję i jeszcze zmodowaną, by ktoś widział swoje IMIĘ przy wgrywaniu Big Grin), jak LAB odczytuje Ci OK przez programator to zlokalizuj używaną wersję AVR DUDE przez Arduino (podaje to w komunikatach przy wgrywaniu, binarka i config są w różnych katalogach), podmień na tą z AVR LAB. Albo zmień sterowniki, poszukaj ZADIG, są trzy wersje do wyboru.
Funkcja mills() też trwa kilka us, może lepiej to zrobić tak:

Kod:
uint32_t currentmillis=millis(); //moga tez byc globalne
static  uint32_t lastmillis=0; //moga tez byc globalne
if ((uint32_t)(currentmillis - lastmillis) >= 1000UL ){ // rzutowanie omija klatwe przepelnienia licznika 50dni
    lastmillis = currentmillis;      
     
        sekundy ++;
}
Jak czytasz dwa razy funkcję millis() to lekko to przesuwa w czasie o czas działania tych operacji. Więc zależy, bardziej chcesz mieć stały interwał  czy bardziej 1s między  ostatnim działaniem w tej grupie poleceń. No i by się nie wysypało za jakiś czas rzutuj na 32 bity bez znaku.
 
Odpowiedź
#3
Dzięki za obszerną odpowiedź.Dało to mi dużo do myślenia.Będę robił doświadczenia z tym lcd bo to jest jedyny który widać w pełnym słońcu.
I jeszcze pytanie  skąd można pobrać tego AVR Lab++ oprócz elektrody na której nie mam punktów..
 
Odpowiedź
#4
AVR LAB można pobrać  z forum autora programu: https://rctruck.pl/forum/download/file.php?id=35515.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości