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

Orange Pi Lite - Problem z wyświetlaczem OLED 16x2 I2C w Pythonie

kobrawerde 14 Cze 2017 22:37 2787 7
REKLAMA
  • #1 16530395
    kobrawerde
    Poziom 10  
    Posty: 39
    Ocena: 1
    Mam pytanie dla raczej zaawansowanych w temacie wyświetlaczy LCD w moim przypadku 16x2 ( kompatybilnych z HD44780 ) , oprogramowania w pythonie jak i samym systemie linux u mnie - Armbian Ubuntu Xenial.
    Mianowicie mam problem z LCD 16x2 kupionym po okazyjnej cenie tzw oled czyli troszkę lepsze i wyraźniejsze literki itd. Jak dotąd korzystałem z tzw. "zwykłego" 16x2 z podświetleniem i podpiętym przez: Konwerter LCD HD44780 I2C IIC TWI ARDUINO AVR ARM do czterech pinów w/w i GPIO - Orange Pi Lite. Całość obsługuje program / skrypt w pythonie i czasami program lcdproc z opcją wyświetlania zegara tzw. opcją BIG + oczywiście internetowe radio oparte o programy mpd / mpc.
    Wszystko ładnie i pięknie działa na LCD z tzw. podświetleniem .... na LCD 16x2 Oled + konwerter I2C jest jeden irytujący błąd z ktorym nie mogę sobie poradzić ...mianowicie po uruchomieniu skryptu : python /root/radio.py ktory obsługuje LCD i program mpc wszystko jest OK dopuki nie wyłącze go w linux-ie komędą : killall python .... aby włączyć program lcdproc do pokazywania zegara itp ? ...... wyświetlane są albo jakieś ślaczki albo ewentualnie dane z mpc ale chaotycznie i gdzie popadnie ewentualnie poprzeplatane z danymi dwóch programów tego z pythona i danych z lcdproc ....co więcej nawet ponowna komenda radio.py nie eliminuje tego efektu. Jedynym wyjściem jest odłączenie na chwilę kabelka +3 V / +5V lub GND ...bo ten LCD może pracować na dwóch napięciach zasilania.
    Po wielu poszukiwaniach i porównaniach chyba znalazłem iż jest to wersja Winstar.
    Na wyświetlaczu pisze tylko : EH001602A REV.H(C) ..ale prawie na 100% jest to model o symbolu: WEH001602ALPP5N00001
    Orange Pi Lite - Problem z wyświetlaczem OLED 16x2 I2C w Pythonie
    Orange Pi Lite - Problem z wyświetlaczem OLED 16x2 I2C w Pythonie
    Nie mam pojęcia czemu tak jest czy to wina wadliwego LCD Oled / źle przylutowanych przewodów i konwertera ?... ale raczej nie wyświetlał by wtedy poprawinie (ale tylko z osobna i przy pierwszym uruchomieniu) podanych wyżj programów / skryptów. Może wina tkwi w innych driverach niby kompatybilnych z wyświetlaczami HD44780 w tym przypadku to : Kontroler WS0010 ...
    Może jest jakiś sposób softwerowy aby wyczyścić LCD tego Oled-a lub jego pamięć ( ktora jak widać zapamiętuje jakiś dane nawet po zamknięciu skryptu ) z danych bez konieczności odpinania napięć lub uziemienia GND ? ..... a może wina tkwi w tzw opcji podświetlania której w tym LCD Oled poprostu brak a oprogramowanie dostosowane do LCD z tą opcją coś miesza ? Na wcześniejszym prawidłowo działającym LCD pisze : CBC016002A29-00 ... i nie wiele można na stronie firmy z allegro wyczytać : napięcie 5V / sterownik zgodny z HD44780 / producent : AV-Display .. i tyle.
    Może ktoś bardziej obeznany w temacie coś podpowie ... bo niby można ten LCD użytkować ale ......brak mi fajnej opcji jak wspomniałem która w moim przypadku po naciścnięciu na pilocie przycisku stop zatrzymywała program mpc i uruchamiała skrypt zamykający program radio.py a uruchamiała zegar ( czyli program lcdproc )
    Jeśli będzie trzeba mogę podesłać wszystkie skrypty i programy ...sam projekt Orange Pi + radio internetowe "skleciłem" przy pomocy i według tego tutoriala:
    [Guide] Internet radio + LCD 2x16 + TactSwitch

    Ps. trochę poczytalem w necie i wynika iż Kontroler WS0010 nie jest w pełni kompatobilny z wyświetlaczami HD44780 !!! ...przynajmniej wiem że LCD nie jest uszkodzony :-) ... ale sporo ludzi ma kłopoty jest to związanie chyba także z tym że ten LCD Oled / kontroler ma problemy z 4bitową magistralą ..czy coś koło tego :-) ...nie będąc fachowcem niestety nie możemy korzystać z gotowych przykładów pod LCD HD44780
  • REKLAMA
  • #2 16532650
    kobrawerde
    Poziom 10  
    Posty: 39
    Ocena: 1
    Nie wiem czy w dobrym dziale piszę ale mam prośbę do elektronika / programisty.... wyczytałem iż ten model LCD firmy Winstar oparty o kontroler WS0010 zgodny z LCD 447800 ma jednak problemy ! ......i w moim przypadku nie mogę go w pełni i w 100% używać pod interfejs I2C ... sprawdziłem to podłączając na takich samych ustawieniach dwa tzw. zwykłe LCD różnych firm ( z podświetleniem i kontrolą kontrastu - na OLED-ach przeważnie nie ma tych opcji ) i takowych efektów niema :-( ..... w skrócie LCD firmy Winstar pracuje poprawnie do pierwszego uruchomienia ( inicjalizacji ) potem już są dziwne efekty w postaci przekłamań w kolejności wyświetlanego kodu czy innych ślaczków. Efekt jak na zdjęciu :
    Orange Pi Lite - Problem z wyświetlaczem OLED 16x2 I2C w Pythonie
    Znalazlem kilka przypadków opisujących to wadliwe działanie w/w LCD Oled np. tu:
    https://forum.mikroe.com/viewtopic.php?f=76&t=66331
    Youtube-LCD16x2-Winstar
    Chyba nawet ktoś napisał nową poprawkę (bibliotekę) do dego LCD cytuję :
    Cytat:
    Napisałem własną bibliotekę LCD zgodną z HD44780 LCD / VFD / OLEDdisplays.
    Zalety: prawidłowe i precyzyjne wyznaczniki czasu również w pełni obsługują wyświetlacze OLED "problemowe" firmy Winstar.
    - tryb 4-bitowy bez kontrolki "zajęty" flaga
    - dowolne przypisanie sygnałów do portów mikrokontrolera

    dostępna jest tu : Link
    Ale ja niestety nie mam pojęcia jak to zmienić czy wgrać .... może ktoś bardziej doświadczony pomoże ...
    Ps. w opisach tego problemu pisze iż problem występuje tylko przy 4bitowej magistrali ...czy zatem można uruchomić lub zmusić ten LCD -Oled do pracy na 8-bitowej magistrli z interfejsem I2C i programami komendami pod kontrolery : HD44780 ???
    duża zagwozdka ...pewnie lipa :-(
    Ps. bardzo nie profesjonalne rozwiązanie ...ale dla mnie działa
    OLED 16x2
    Youtube Oled 16x2 Winstar
    pozdro!
  • REKLAMA
  • #3 17381021
    marmat
    Poziom 20  
    Posty: 558
    Pomógł: 14
    Ocena: 48
    To wada występująca tylko w trybie 4 bitowym , w 8 bitowym to nie występuje.
    Aby to wyeliminować należy podać przy inicjalizacji LCD 5 razy komendę 0x00
  • REKLAMA
  • #4 17381222
    kobrawerde
    Poziom 10  
    Posty: 39
    Ocena: 1
    Dzięki za informację ...ale to raczej dla zaawansowanych w temacie :-) ..... jak to wpisać i w które miejsce w danym kodzie ?... chyba driverów czyli pliku : I2C_LCD_driver.py bo raczej chyba nie w radio.py.
    Niby na tej konfiguracji jakoś to działa ale jak wspominałem na forum ubuntu często trzeba w konfiguracji robić opcję opóźnienia czyli sleep ...czemu ??? ale działa jako tako :-) ...w pliku zip konfig pod radio internetowe i drivery I2C / orangePi
    Załączniki:
    • oled-winstar.zip (3.28 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 17382157
    marmat
    Poziom 20  
    Posty: 558
    Pomógł: 14
    Ocena: 48
    Znalazłem taką informację i będę to sprawdzał dam znać
  • REKLAMA
  • #6 21431399
    kobrawerde
    Poziom 10  
    Posty: 39
    Ocena: 1
    Wydaje mi się, iż ten LCD jest OK, ale ma problemy z przełączaniem się między np. skryptem napisanym w Pythonie a programem lcdproc... a może także winę tu ponosi sam program lcdproc i jego ustawienia związane z opcjami delay (opóźnienia) i nawet w README można wyczytać, że nowoczesne LCD mogą mieć problemy i trzeba eksperymentalnie dojść do poprawnych ustawień. LCD działa poprawnie ze skryptem Pythona, ale lcdproc ma fajną funkcję dużego (BIG) zegara, więc walczę z ustawieniami.
    Teraz mam już nowy projekt z LCD 40x2 i OrangePi 3 LTS więcej: https://ubuntu.pl/forum/viewtopic.php?t=186893
    https://drive.google.com/drive/folders/0B0Edy...goto&resourcekey=0-9Ss0jdfkwnd8ugUR_nnR1w
  • #7 21555390
    kobrawerde
    Poziom 10  
    Posty: 39
    Ocena: 1
    Podbijam temat, bo szkoda zakładać nowy... a dotyczy prawie tego samego LCD, jedynie troszkę większy 40x2 Winstar OLED. Problem polega na tym, że nie mogę ustawić/przełączyć kontrastu z 100% na 50% i odwrotnie. Po lekturze w internecie wiem, że jest to możliwe z tym modelem, a komendy niby są takie:
    $FE, $17 - full contrast
    $FE, $13 - half contrast
    W programie lcdproc nie mogłem uruchomić w/w komend i ustawić kontrastu. Tu jest temat o tym: https://github.com/lcdproc/lcdproc/issues/185
    Ale o dziwo w programie do obsługi tego LCD mpd (radia internetowe) zadziałało, czyli jest to możliwe, jednak wpis psuje cały konfig tego skryptu i przez to nie działa on prawidłowo :-( ... może ktoś jest obeznany z Pythonem i programowaniem i coś podpowie. Cały skrypt jest na stronie Ubuntu.pl post wyżej, a kod, jaki zadziałał, to: 0x17 (full kontrast), 0x13 (50%) i podmieniam je w linii zamiast: 0x80

    LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
  • #8 21556147
    kobrawerde
    Poziom 10  
    Posty: 39
    Ocena: 1
    OK ...dzięki podpowiedzi wiem, że trzeba wydać komendę w skrypcie Pythona i koniecznie dodatkowo po tym wysłać jakiś znak na wyświetlacz LCD.
    Przykład
    def main():
      cmd = 0x17
      lcd_byte(cmd, LCD_CMD)
      lcd_string("A", LCD_LINE_1)


    Po tym kontrast zmienia się na stałe.

Podsumowanie tematu

✨ Problem dotyczy wyświetlacza LCD 16x2 OLED firmy Winstar z kontrolerem WS0010, kompatybilnego z HD44780, podłączonego do Orange Pi Lite przez interfejs I2C i obsługiwanego w systemie Armbian Ubuntu Xenial za pomocą skryptu w Pythonie oraz programu lcdproc. Wyświetlacz działa poprawnie po inicjalizacji, jednak pojawiają się błędy w trybie 4-bitowym, takie jak przekłamania znaków i nieprawidłowa kolejność wyświetlania. Rozwiązaniem jest wysłanie pięciokrotnie komendy 0x00 podczas inicjalizacji LCD. Dodatkowo, problematyczne jest przełączanie się między skryptem Python a lcdproc, które wymaga eksperymentalnego dostosowania opóźnień (delay). W przypadku modelu 40x2 OLED Winstar pojawia się także problem z regulacją kontrastu, który można zmieniać komendami 0x17 (pełny kontrast) i 0x13 (50% kontrastu). Aby zmiana kontrastu była trwała, po wysłaniu komendy należy przesłać znak na wyświetlacz. Wskazane jest modyfikowanie sterownika I2C_LCD_driver.py, a nie samego skryptu radio.py. Dyskusja zawiera linki do bibliotek i przykładów kodu oraz odniesienia do problemów zgłaszanych na forach i GitHubie lcdproc.
Wygenerowane przez model językowy.
REKLAMA