Skocz do zawartości

Definiowanie znaków w LCD


Pomocna odpowiedź

Pisząc program na Atmege8A skończyło mi się miejsce w pamięci FLASH. postanowiłem więc zdecydowałem że użyje drugiego procka (najprawdopodobniej Attiny25) jako układ "slave" który będzie realizował jakieś dodatkowe podrzędne zadanie.

Następnie pojawiła się chęć wprowadzenia polskich znaków do LCD.

Problem w tym ,że Atmega (układ master) nie ma już miejsca nawet na zdefiniowanie znaków - być może udało by mi się jeszcze wcisnąć ich odczyt bo zostało mi mniej niż 2%.

Wpadłem na pomysł żeby to Attinny25 po włączeniu wyświetlacza wprowadziła potrzebne znaki w Lcd ,a w Atmedze bym się do nich już tylko odwoływał. Czy to mogło by zadziałać?

Link to post
Share on other sites

Posiadasz wyświetlacz graficzny czy alfanumeryczny ???

Jeśli ten drugi to BASCOM ma opcje zdefiniowania kilku znaków niestandardowych...

Link to post
Share on other sites

A pamięć EEPROM ATMegi 8, wątpię ze ja zużyłeś całą. nadaje się tak samo dobrze jak FLASH.

W 512B EEPROMa, można niby zapisać tylko 8 znaków dla wyświetlacza alfanumerycznego, ale jak zastosować by (prostą) kompresję danych to nieco więcej :->

Link to post
Share on other sites
W 512B EEPROMa, można niby zapisać tylko 8 znaków dla wyświetlacza alfanumerycznego, ale jak zastosować by (prostą) kompresję danych to nieco więcej

Że niby jak? Przecież znaki mają rozmiar bodajże 7x6 pikseli, więc bez kompresji mamy 6B na znak - więc można zapisać 85 kształtów.

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wiem jak zdefiniować znaki w normalnym przypadku (wyświetlacz mam tekstowy) ale mi chodzi o to że nie mam już miejsca we FLASHU.

Co do EEPROMA pomysł jest ciekawy. Mógłbyś to bardzie rozwinąć? Do tej pory w EEPROMIE zapisywałem jedynie zmienne tablicowe.

Może jakiś fragment kodu.

Jeśli o ilość chodzi to 7 znaków mi potrzeba tylko naprawdę nie wiem jak je wepchać w 2% z 8kb FLASHA ale EEPROMA mam całego wolnego.

Link to post
Share on other sites

Zastanów się może nad optymalizacją kodu. Jeżeli masz zbędne includy (niektóre mogą oszukać kompilator i mimo nie używania zwiększyć rozmiar kodu), czy niepotrzebnie nie używasz dzielenie albo zmiennych zmiennoprzecinkowych, czy nie masz powtarzających się kawałków kodu, które można wpisać jako funkcja (oraz w drugą stronę, czyli funkcje użyte raz, które mogą być zadeklarowane jako inline).

7 znaków to 42B (o ile używasz wyświetlacza na HD44780 lub podobnego), naprawdę nie masz tyle miejsca?

Link to post
Share on other sites
Pisząc program na Atmege8A skończyło mi się miejsce w pamięci FLASH.

Jaką optymalizację masz włączoną?

Link to post
Share on other sites

Gdzie mam sprawdzić jaką optymalizacje mam włączoną?

Poza tym przeglądałem kod już parę razy i naprawdę skróciłem go już na tyle ile potrafię. Zastosowałem wszelkie "sztuczki" ,które znam. Mój program składa się głownie z podprogramów - odwołuje się do nich z różnych miejsc.

Kompilator pokazuje mi że zostało 2% a więc coś około 163,84 Kb.

Nie mam miejsca nawet żeby zadeklarować te znaki.

Myślę że inicjalizacja tych znaków jest trochę bardziej złożona niż samo zapamiętanie poszczególnych bajtów dlatego mi się nie mieści.

Link to post
Share on other sites

mam napisane obok że programuje w bascomie więc używam BASCOM-AVR

Mój program używa jednego Timera do odmierzania sekundy. W programie głównym (w pętli Do..Loop) mam jakieś pierdółki typu np. obsługa przycisków itp. Gdyby mi się udało pzrenieść zawartość programu głównego w przerwaniu co sekundę , to mógłbym zastosować polecenie NOSAVE przy timerze i dało by mi to dużo wolnego miejsca. Niestety wówczas program sprawdzał by stan przycisków tylko co sekundę więc musiałbym przyśpieszyć wywoływanie przerwania a do inkrementacji sekund użyć jakiejś przeładowującej się zmiennej pomocniczej.

Link to post
Share on other sites
mam napisane obok że programuje w bascomie więc używam BASCOM-AVR

OK, nie popatrzyłem. W takim razie nie pomogę bo BASCOM mnie nie lubi:)

Jeżeli zapełniłeś cały flash Atmega8 i optymalizacje masz włączoną prawidłowo, to czas na zmianę języka na C.

Link to post
Share on other sites

Jesteś genialny!!! 🤯 Z 98% spadło do 87% przy 8kb (tak duży spadek tylko dowodzi jak małe mam jeszcze doświadczenie w pisaniu programów 🤣 ).

Tylko teraz pytanie czy jakieś błędy w programie nie powstaną?

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.