Problem z programowaniem mikrokontrolera Atmega1284 - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Mikrokontrolery (https://forum.arduinopolska.pl/dzial-mikrokontrolery) +--- Wątek: Problem z programowaniem mikrokontrolera Atmega1284 (/watek-problem-z-programowaniem-mikrokontrolera-atmega1284) Strony:
1
2
|
Problem z programowaniem mikrokontrolera Atmega1284 - ElektronPL - 25-04-2020 Witam! Spotkałem się z dziwnym zachowaniem mikrokontrolera Atmega1284 (lub kompilatora). mianowicie uruchomiłem pewny wyświetlacz LCD (24bit kolor, 160x240) tego typu obrazek zajmuje 115200 bajtów. W ramach testu chciałem zapisać w pamięci mikrokontrolera obrazek i wyświetlić na tym ekranie. Kompilator nie pozwolił mi stworzyć jednej tak dużej tablicy. Zmieściłem w czterech. Efekt - jak widać zdj, w pewnym momencie grafika się psuje. Zauważyłem że moment kiedy pojawia się problem to dokładnie 65536 (czyli gdy bit 16 adresu pamięci zmienia się na 1). [attachment=997] I może ktoś pomyśleć po co mi system wyświetlania jednej grafiki. Oczywiście nie o to chodzi - posiadam parę projektów z tym mikrokontrolerem, a ten który teraz tworze niebezpiecznie zbliża się do tej granicy 65KB. Poza tym czysta ciekawość, nie podoba mi się, że to nie działa tak jak chce Kod: (jest tu tylko część odpowiadająca za wysyłanie faktycznego obrazu bo kod jest długi i ciężko się od razu połapać) Kod: for (byte j = 0; j < 60; j++) // linie od 1 do 60 PS: Na pewno nie chodzi o komunikację z wyświetlaczem bo gdy wyświetlam np. czarno-białą grafikę, aby zająć mniej niż 65KB pamięci to wszystko jest OK. Z góry dziękuję za pomoc i pozdrawiam! RE: Problem z programowaniem mikrokontrolera Atmega1284 - RPI86 - 26-04-2020 Pobierając dane z pamięci o adresie większym niż 65536 musisz ustawić RAMPZ. Użyj funkcji z sufiksem _far. O pamięć programu się nie martw bo problem pojawia się po przekroczeniu 128kB ponieważ licznik rozkazów AVR liczy słowa a nie bajty. Ile czasu rysuje się obrazek? Pewnie kilka sekund? RE: Problem z programowaniem mikrokontrolera Atmega1284 - ElektronPL - 26-04-2020 (26-04-2020, 08:56)RPI86 napisał(a): Pobierając dane z pamięci o adresie większym niż 65536 musisz ustawić RAMPZ. Użyj funkcji z sufiksem _far. O pamięć programu się nie martw bo problem pojawia się po przekroczeniu 128kB ponieważ licznik rozkazów AVR liczy słowa a nie bajty.A to zaskakujące bo 1 obraz rysuje się około 100ms. I nie mogło by wolniej bo ten wyświetlacz nie ma pamięci sram więc jak by było wolniej to na ekranie było by widać ewidentne "fale" obrazu. I dzięki za pomoc, pomogło. RE: Problem z programowaniem mikrokontrolera Atmega1284 - RPI86 - 26-04-2020 Mnie wychodzi bliżej 200ms niż 100. Jak mierzyłeś ten czas? RE: Problem z programowaniem mikrokontrolera Atmega1284 - RPI86 - 26-04-2020 (25-04-2020, 18:40)ElektronPL napisał(a): Kompilator nie pozwolił mi stworzyć jednej tak dużej tablicy.AVR-GCC tak ma, niczym Pascal ograniczający tablice do 64kB, AVR-GCC, nie wiadomo czemu, ogranicza tablice dla odmiany do 32kB ale jest na to sposób. RE: Problem z programowaniem mikrokontrolera Atmega1284 - ElektronPL - 26-04-2020 (26-04-2020, 14:34)RPI86 napisał(a):Zdradzisz jaki to sposób? Czasu nie mierzyłem raczej masz racje. Mój pomiar polegał na tym że rozregulowałem pokrętło w wyświetlaczu (wtedy widać falowanie obrazu) i na kamerze sobie policzyłem ile w sekundzie. I chyba powinienem swój pomiar podzielić na dwa jak teraz na to patrze bo ten ekran robi linie 1,3,5 i 2,4,6 w przeplocie.(25-04-2020, 18:40)ElektronPL napisał(a): Kompilator nie pozwolił mi stworzyć jednej tak dużej tablicy.AVR-GCC tak ma, niczym Pascal ograniczający tablice do 64kB, AVR-GCC, nie wiadomo czemu, ogranicza tablice dla odmiany do 32kB ale jest na to sposób. [attachment=998] RE: Problem z programowaniem mikrokontrolera Atmega1284 - RPI86 - 26-04-2020 Sposób prosty, stworzyć plik .o. Biorać jednak pod uwagę, że wyświetlacz działa wolno, obrazek zajmuje prawie całą pamięć, kompresja raczej nie wchodzi w grę bo AVR jest wolny, to należałoby zmienić AVR na coś mocniejszego a przy okazji tańszego. RE: Problem z programowaniem mikrokontrolera Atmega1284 - ElektronPL - 26-04-2020 (26-04-2020, 19:00)RPI86 napisał(a): Sposób prosty, stworzyć plik .o. Biorać jednak pod uwagę, że wyświetlacz działa wolno, obrazek zajmuje prawie całą pamięć, kompresja raczej nie wchodzi w grę bo AVR jest wolny, to należałoby zmienić AVR na coś mocniejszego a przy okazji tańszego.Tak, przetestowałem go na Arduino DUE. Nie dość ze działa szybciej to w jednej zmiennej bez problemu mieści się cała grafika. Dodatkowo teoretycznie można zmieścić 4. Tak czy inaczej to był tylko eksperyment jak Arduino sobie poradzi z obsłużeniem takiego wyświetlacza - i bardzo dobrze bo dowiedziałem się czegoś nowego o mikrokontrolerach . Dzisiaj kupiłem specjalny driver, który ma pamięć SRAM i wtedy ten wyświetlacz będzie miał więcej sensu - oczywiście mówiąc o Arduino. Btw bardzo mi się podoba na tym forum, że uznaje słowo Arduino za błąd ortograficzny - piękna ironia. Dziękuję za pomoc, pozdrawiam! RE: Problem z programowaniem mikrokontrolera Atmega1284 - RPI86 - 26-04-2020 Driver, sram. Jaki to koszt? Nie taniej użyć lepszego CPU? RE: Problem z programowaniem mikrokontrolera Atmega1284 - RPI86 - 26-04-2020 Mega1284 kosztuje 30zł, STM32G070RBT6 6zł a ma 2 razy więcej RAM i inne dodatki. Na LCD przydałoby się 128kB RAM. STM32F411RET6 wychodzi drogo 24zł, tani jest L412 ale ma tylko 80kB RAM. Masz dwa wyjścia, albo drogo ale i tak taniej niż mega1284 i szybko, łatwo i przyjemnie albo tanio, bardzo tanio porównując do mega1284 i trochę zabawy w sofcie aby konwertować dane przy wysyłaniu do LCD. Nie napisałeś co chcesz zbudować bo może zupełnie inny CPU trzeba dać.Może potrzeba bardzo dużo RAM? A może FLASH? Może sprzętowe szyfrowanie? |