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

[Rozwiązano] Wyświetlacz Winstar OLED 16x4, nie działa z konkretnym MCU

Maciejb2 19 Lis 2018 17:35 960 9
  • #1 17570683
    Maciejb2
    Poziom 11  
    Cześć,
    Walczę z problemem już kilka dni. Kończą mi się już pomysły więc proszę o pomoc. Płytka z paroma modułami komunikacyjnymi, zasilaniem, XMega128A4 i wyświetlacz z serii WEH 16x4 - driver zgodny z hd44780.
    Przed zamówieniem pcb soft pisany był na prototypie w płytce stykowej z XMegą16A4. Tam LCD dział jak trzeba. Sam wyświetlacz był testowany też ZL15AVR z ATMegą32 z podobnym rezultatem. Fragmenty schematów poniżej:
    Wyświetlacz Winstar OLED 16x4, nie działa z konkretnym MCU Wyświetlacz Winstar OLED 16x4, nie działa z konkretnym MCU

    Moduły GSM, BT, przetwornica do SIM300 zostały odcięte i na chwilę obecną nie wnoszą nic do działania reszty więc pominę je w opisie.

    Sam wyświetlacz został najpierw uruchomiony z ATMegą32, później kod przerobiony pod XMegi i sprawdzony z XMegą16A4. Po przyjsciu płytek docelowych wyświetlacz trafił na stałe na pcb razem z XMega128A4. Wtedy pojawiły sie problemy.
    Po zasileniu, wyświetla się prawidłowo tekst powitalny - utrzymuje się na wyświetlaczu do następnego odświeżenia. Następne wartości maja bardzo duża szanse zostać wyświetlone źle lub wcale. Im więcej razy odświeżam wartość tym większe bzdury są wyświetlane. Za pierwszy razem jest to przekłamanie np. tylko jednego znaku, za drugim trzech a za trzecim kursor wypada poza zakres ekranu i tekst znika częściowo lub całkowicie. To tylko przykład ponieważ w jaki sposób się to objawi jest dosyć losowe natomiast pewne jest to, że wysypie się tym bardziej im częściej zmieniona będzie zawartość.
    Oczywiście fizycznie płytka "przedzwoniona" nie ma zwarć miedzy liniami. Wszystkie luty poprawione 3 razy. Wszystkie siejące interfejsy, zasilania odcięte. Na chwile obecną działa tylko MCU, LCD i dwa LDO. Próbowałem walczyć z wartosciami rezystorów szeregowych na interfejsie LCD. Dolutowałem po 10nF do każdego pinu LCD:
    Wyświetlacz Winstar OLED 16x4, nie działa z konkretnym MCU

    Odciąłem wejscie LDO 3V3 i podlutowałem do wyjscia LDO 5V0 (LCD). Rozpiąłem interfejs LCD i przelutowałem na inny port MCU. Niestety nic nie wskórałem. Mój kod jest całkowicie amatorski i zapewne zawiera błędy - mam nadzieje, że tam kryję sie probem ponieważ MCU do tanich nie należał i jego wymiana mi się nie uśmiecha.
    Przypomnę tylko, że ten sam kod, działa prawidłowo na innej XMedze oraz ATmedze (przerobione mapy).

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


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


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/code]
  • #3 17570931
    Maciejb2
    Poziom 11  
    excray napisał:
    Zapewne dlatego, że totalnie olałeś zalecenia producenta co do czasu realizacji poszczególnych komend:
    Wyświetlacz Winstar OLED 16x4, nie działa z konkretnym MCU
    To jest tylko 1 z 3 stron. Tutaj znajdziesz całą listę - strony 10-12:
    https://www.newhavendisplay.com/appnotes/datasheets/LCDs/RW1067.pdf


    Czyli oczekiwanie na flagę zajętości po każdym zapisie nie jest wystarczające?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodałem 2ms po każdej komendzie - nie zmieniło to nic
  • #4 17571019
    excray
    Poziom 41  
    Maciejb2 napisał:
    Czyli oczekiwanie na flagę zajętości po każdym zapisie nie jest wystarczające?

    Czytasz pin który jest ustawiony jako wyjście? To raczej nie ma sensu.

    Maciejb2 napisał:
    Dodałem 2ms po każdej komendzie - nie zmieniło to nic

    To się pochwal tym nowym kodem.
  • #5 17571128
    Maciejb2
    Poziom 11  
    Usunąłem oczekiwanie na D7, rzeczywiście brakuje tam zmiany kierunku - dzięki. Dodałem opóźnienia w main'ie:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    efekt po 3 sekundach:
    Wyświetlacz Winstar OLED 16x4, nie działa z konkretnym MCU

    po 6 sekundach:
    Wyświetlacz Winstar OLED 16x4, nie działa z konkretnym MCU
  • #6 17571166
    excray
    Poziom 41  
    Zamień sobie chwilowo to testowanie BF na zwykłego "delaya" 50us.
  • #7 17571213
    Maciejb2
    Poziom 11  
    Gotowe, ale nadal sieczka na wyświetlaczu. Wygląda to tak jakby śmieci pojawiały się na D4-7. W treści wyświetlanej pojawiają się przekłamania ale i komendy potrafią być pomylone np. zamiast wyczyścić zawartość to przesuwa tekst w prawo.
  • Pomocny post
    #8 17571390
    excray
    Poziom 41  
    Wydłuż czas trwania LCD_NOP. Tak do 0.5us.
  • #9 17572506
    Maciejb2
    Poziom 11  
    0.5us? Przy clocku 2MHz to jeden takt zegara...

    Dodano po 34 [minuty]:

    excray napisał:
    Wydłuż czas trwania LCD_NOP. Tak do 0.5us.


    Podniosłem taktowanie do 32MHz i dodałem po 0.5us po każdym LCD_NOP. Bez rezultatu.

    Dodano po 16 [minuty]:
  • #10 17576038
    Maciejb2
    Poziom 11  
    Problem rozwiązany. Zwarłem 7805 dedykowany do zasilania LCD i podałem 5V z zasilacza na całość. Wyświetlacz ruszył aż miło. Zapewne 7805 przysiadał w trakcie zapisu do LCD. Te zapady musiały być bardzo, krótkie bo obserwowałem wcześniej 5V na oscyloskopie z pasmem 20MHz i trigger nic nie złapał.
    Wyświetlacz Winstar OLED 16x4, nie działa z konkretnym MCU
REKLAMA