logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak wyświetlać polskie znaki na wyświetlaczu HD44780 w Atmel Studio?

nariox 23 Wrz 2016 11:11 2133 5
  • #1 15949588
    nariox
    Poziom 11  
    Witam !
    Chciałbym się upewnić co do paru kwestii:

    hd 44780 używa znaków zakodowanych wg ASCII ,i nie ma tam polskich znaków.
    przeglądając bilbiotekę hd44780
    a konkretniej plik
    hd44780-charsets
    doszedłem do wniosku,że aby móc wpisywać polskie znaki bezpośrednio z klawiatury jak zaprezentowany w ostatnim linku na dole kodu źródłowego przykład wystarczy tylko ,że gdy funkcja wysyłająca wyśle 8 bitowy kod polskiej literki w innym systemie kodowym, to wtedy przekierowujemy ją pod adres w DDRAM i wyświetla nam ten znak na ekranie



    Skoro w ASCII nie występują polskie znaki, to jaka wartość przypisze kompilator do polskich literek? Póki co nie jestem w stanie wydedukować tego z biblioteki Pana Piotrka
    WIem tylko że polskie znaki są różnie kodowane w różnych systemach, i w zależności od wybranego systemu kodowania budowana jest pętla ,która mapuje wartość znaku adresem w pamięci DDRAM hd 44780

    Jak taką sytuację rozwiązać programowo?
    Piszę w Atmel Studio
  • #2 15950515
    JacekCz
    Poziom 42  
    Która wersja Atmel Studio?
    v.7 jest na bazie Microsofta Studio i ma (tzn stronę kodową źródeł) to opanowane opcjami.
    v.4 średniowiczna ciągle modna, nie wiem.

    O przemapowaniu rozsądnie mówisz. Ale chaotycznie, musisz wybrac jakąś stronę kodową jak "własną" dla systemu: piszesz o klawiaturze, wyświetlaczu itd... zakonwertujesz się na śmierć.

    Poczytaj stare teksty o PL literkach, ogonki.pl, Grzegrzółka jako podkład teoretyczny
  • #3 15951331
    nariox
    Poziom 11  
    obecnie jestem w 6.2 ,
    AS 7.0 miało problemy u mnie na kompie


    Cytat:
    O przemapowaniu rozsądnie mówisz. Ale chaotycznie, musisz wybrac jakąś stronę kodową jak "własną" dla systemu: piszesz o klawiaturze, wyświetlaczu itd... zakonwertujesz się na śmierć.



    Nie wiem czy dobrze mnie zrozumiałeś
    Literki chce w Atmel Studio wpisać bezpośrednio z klawiatury tak jak w przykładzie
    np:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    zamiast
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i wtedy myslalem skonstruować pętle,tak żeby program za ż,ó,ł,ć itp podstawiał wartości adresu DDRAM, gdzie są zakodowane te znaki


    Tylko jak pisałem wcześniej ,nie wiem jak zadecydować o tym, w jakim systemie kodowym będą te literki, i jakie przyjmą wartości i przy tym tak,żeby pozostałe litery dalej pozostały w ASCII ,żeby hd44780 wyświetlał je poprawnie
  • Pomocny post
    #4 15952442
    arturt134
    Poziom 27  
    Ja w takiej sytuacji zakładam, że kody są z mojej wersji AVR Studio (4.0). Do wyświetlania stringów używam funkcji konwertującej kody polskich znaków na kody LCD (zapisane w CGRAM wyświetlacza). Wiem, że to nie zadziała na innej wersji AVR Studio, ale tak jest najprościej....

    PS. Ostatnio, musiałem zrobić menu po rosyjsku i niestety, ale moja metoda nie zadziałała. AVR Studio 4 nie wyświetla cyrylicy, nawet wklejonej z innego programu.... Wszystkie stringi musiałem kodować jako tablice bajtów z kodami wyświetlacza (na szczęście nie było ich dużo :D ). Wydaje mi się, że będę musiał wymyślić jakąś inną metodę, może konieczna będzie przesiadka na AVR Studio 7, które podobno obsługuje unicode. A może ktoś podpowie mi jakieś inne, proste rozwiązanie?
  • #5 15952509
    JacekCz
    Poziom 42  
    Pogawędzę trochę, nie wszystkie odniesienia z "dużego" programowania znajdują tu sens.

    1. Za ośmiobitowych programów (rozumiemy chyba zgodnie że o 'szerokości' znaku mowa) było niemożliwe pisanie programów na wiele krajów jednocześnie (bez jakiś tricków typu opcja runtime 'strona kodowa').
    2. jak zauważyłeś za ośmiobitowych IDE nie było możliwe edytowanie jak zauważyłeś.

    3. IDE z unikodem załatwia część problemów, ale tu zostaje opracowanie wysyłki unikodowego znaku z IDE do ośmiobitowego znaku w driverze urządzenia. Konwerter czegoś takiego ma znaczą objętość kodu (stałych) jak na AVR.
    4. Co ze znakami które powstają w konsekwencji życia programu (rozumieć: z klawiatury)? W jaki sposób je przechowywać? Przyjęcie założenia "do unikodu" powoduje potrzebę drugiego konwertera i jest 99% bezsensowne.
    3+4 z wielki trudem moge sobie wyobrazić program na AVR na wiele krajów jednocześnie.

    5. Przy braku / z unikodem w IDE i tak jest zalecane pisanie stałych stringów. Za bardzo starego C było to "tricode", wzmiankuję tylko ze względów historycznych.
    5a Np w Javie jak prowadzę duży projekt, Eclipsie się rozleci workspace (miejsce gdzie projecty są organizowane), trzeba z drzewa źródeł odbudować. To nie boli bardzo, ale polskie literki idą się pi....ć. Teoretyczne zalecenia Javy mówią że jeśli już w ogóle musisz dawać narodowe stringi w źródłach *.java to dawaj to Ӓ (cyfrowa notacja unkodu)


    6. generalnym zaleceniem jest wyrzucać wszystkie stringi użytkownika do oddzielnego sursu tylko ze stałymi (np aby tłumacz nie masakrował głównego kodu). Potrafię sobie wyobrazić organizację w C/C++ aby był zerowy narzut na wykonaniu (przez kompilację z tablica rosyjską, polską, czeską, niemiecką). Akurat by to było zbieżne z atmelowym zapisem stałych we flashu, więc dwie pieczenie na jednym ogniu. Jak was to zaciekawi, wejdę w szczegóły.

    arturt134 napisał:
    Ja w takiej sytuacji zakładam, że kody są z mojej wersji AVR Studio (4.0).


    Sugeruję mocne dowiedzenie się jaka standardowa strona kodowa to jest, tzn źle jest ją określasz "aaaaaa ....jakies takie kodowanie jakie ma AS-4". Może 1250 jako aktywna dla polskich windowsów.
  • #6 15958936
    nariox
    Poziom 11  
    witam ! dzięki za wskazówki !
    ostatecznie zrobiłem tak jak podpowiedział kolega JacekCz
    zakodowałem polskie znaki pod odpowiednimi adresami i po prostu zrobiłem pętla ,która sprawdza wszystkie polskie znaki, a jeśli są to zamienia je na adresy z DDRAM i wysyla na wyświetlacz-więc. Zamiast dowiadywać się jaka wartość kryje się pod ą, po prostu kazałem sprawdzić czy dany char to ą,ć,ń lub inna literka .

    Nie zadziałało to tylko w przypadku dużego "Ć" , Atmel nie ma takiej literki w swoim alfabecie;P więc w stringu trzeba wpisywać małe ć.
REKLAMA