Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

OLED 0,96" SSD1306 - Po przeniesiesieniu programu krzaki i zacinanie

xdiax 09 Maj 2015 22:00 1200 9
  • #1 09 Maj 2015 22:00
    xdiax
    Poziom 22  

    Witam. Piszę program zegarka, używającego do wyświetlania ekranu OLED 0,96" I²C, jako RTC : DS3231. Dodatkowo czytnik kart SD na SPI. Jako że program działał bez problemu na Arduino Mega 2560, przeniosłem go na docelowy µC - atmegę 328P. I tu zonk - program w ogóle się nie uruchamia. Gdy odkomendowałem resztę kodu i zostawiłem główną pętlę (void loop), widać, że wszystko działa bardzo wolno, na wyświetlaczu zamiast liter często wyświetlają się "krzaki". Atmega od czasu do czasu resetuje się samoczynnie, mimo podciągnięcia resetu opornikiem 10k. Próbowałem przegrać program na inny mikrokontroler, też 328P. Te same objawy.
    Oto program, który działa na Arduino :

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Przy wgrywaniu na osobny mikrokontroler, jedyne, co zmieniłem to poszczególne piny (zdefiniowane jako stałe na początku kodu).

    Dodano po 54 [minuty]:

    Może powinienem przestawić AtMegę na zewnętrzny kwarc 12 albo 16 MHz ? Bo teraz używam wewnętrznego RC 8MHz ..

    0 9
  • #2 10 Maj 2015 10:42
    xdiax
    Poziom 22  

    Dziś podjąłem kolejną próbę uruchomienia - zostawiłem w programie tylko menu. Wyraźnie wszystko działało wolniej, zacinało się, czasem obraz się całkiem zacinał i atmega się resetowała. Wygląda to trochę jakby brakowało jej mocy obliczeniowej. Co zrobić w takim przypadku ? Testowałem też na arduino nano (ten sam procek) i nie ma tam takich problemów ..

    Dodano po 3 [minuty]:

    Po chwili także avrdude przy wgrywaniu programu zaczął wywalać błędy :
    avrdude: verification error, first mismatch at byte 0x0c12
    0xf1 != 0x00
    avrdude: verification error; content mismatch

    0
  • #4 10 Maj 2015 10:55
    xdiax
    Poziom 22  

    Ponieważ na początku programu, w setupie, dałem funkcję, by na sekundę wyświetliło napis "start" i później wyczyściło ekran. W trakcie pętli menu pojawia się ten komunikat, często z krzakami.

    0
  • #5 10 Maj 2015 12:20
    dondu
    Moderator Mikrokontrolery Projektowanie

    Skoro więc taki efekt występuje musisz najpierw ustalić przyczynę. Zacznij więc od odczytania rejestru MCUSR, za pomocą którego ustalisz, czy występuje jeden z z przypadków określonych bitami w tym rejestrze. Patrz 12.5.1 MCUSR – MCU Status Register strona 67: http://www.atmel.com/images/doc2549.pdf

    Jak to zrobić? O tak:

    Cytat:
    To make use of the Reset Flags to identify a reset condition, the user should read and then
    Reset the MCUSR as early as possible in the program. If the register is cleared before another
    reset occurs, the source of the reset can be found by examining the Reset Flags


    Ustal więc za pomocą MCUSR, czy któryś z tych resetów występuje.

    0
  • #6 10 Maj 2015 14:15
    xdiax
    Poziom 22  

    Dziękuję za odpowiedź, rejestry sprawdzę wkrótce. Jak na razie, udało mi się uchwycić na zdjęciach zachowanie wyświetlacza. Wygląda, jakby nie dość, że poprzekręcała się tablica ascii, to jeszcze niektóre z danych nie docierały .. Wejście do menu kończy się zazwyczaj zacięciem i wyświetleniem napisu start, mimo, że to dwie osobne pętle (!). Co ciekawe, tak jak już pisałem, program prezentacyjny z biblioteki adafruit działa bez problemu
    OLED 0,96" SSD1306 - Po przeniesiesieniu programu krzaki i zacinanie OLED 0,96" SSD1306 - Po przeniesiesieniu programu krzaki i zacinanie OLED 0,96" SSD1306 - Po przeniesiesieniu programu krzaki i zacinanie

    0
  • #7 10 Maj 2015 21:57
    xdiax
    Poziom 22  

    Po wielu próbach udało mi się ustalić prowodyra - była to biblioteka SDFat do obsługi karty sd na magistrali SPI. Jednak nadal nie potrafię zrozumieć dlaczego tak się dzieje .. Co do użycia innej biblioteki - SD (dołączonej do środowiska arduino) nie mam zbytnio możliwości, miejsca w pamięci FLASH jest odrobinę za mało :(

    0
  • #8 16 Maj 2015 20:22
    xdiax
    Poziom 22  

    Ok, jestem pewien co do przyczyny - biblioteki używają za dużo pamięci SRAM. Jedyna, która byłaby dla mnie odpowiednia do obsługi karty SD to Petit FATFs .. Niestety, nie umiem jej zaimplementować :(

    0
  • #9 17 Maj 2015 13:03
    dondu
    Moderator Mikrokontrolery Projektowanie

    xdiax napisał:
    Jedyna, która byłaby dla mnie odpowiednia do obsługi karty SD to Petit FATFs .. Niestety, nie umiem jej zaimplementować :(

    To bardzo prosta w implementacji biblioteka - cze go nie potrafisz?

    0
  • #10 17 Maj 2015 14:07
    xdiax
    Poziom 22  

    Problematyczne dla mnie jest to, że to biblioteka pisana na czysty C++ :D Mój kod jak na razie ma za zadanie jedynie połączyć się z kartą SD.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Niestety, zawsze wyskakuje błąd FR_NO_FILESYSTEM. W pliku konfiguracyjnym pffconf.h obsługa systemu FAT32 i odczyt są włączone. Biblioteka została ściągnięta bezpośrednio ze strony twórcy. Niestety, kod nie kompilował się z powodu rzekomego błędu w pliku diskio.h. Musiałem odkomendować linię :
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0