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

AT89S52 i HD44780 - czarne kwadraty na LCD, program w Bascomie nie działa

sho 18 Wrz 2004 17:12 4215 19
REKLAMA
  • #1 860875
    sho
    Poziom 11  
    Posty: 23
    Witam,
    Mam uklad z prockiem AT89S52 do niego podlaczony jest LCD 16 * 2 na HD44780 i mam nastepujacy problem. Po podlaczeniu napiecia wyswietlacz pokazuje tylko czarne kwadraty na dolnej lini, gorna jest niezaswiecona. Kontrast moge regulowac. Napisalem programik w bascomie( ustawilem porty itp ) ktory wyswietla tekst na dwoch linijkach ale niedziala. Podlaczylem wiec do innego portu diode i po kazdej instrukcji sterujacej lcd zapalam ja i gasze tak zeby wiedziec czy program wogole dziala :). Wyglada na to ze przechodzi tylko instrukcja CLS a na pozostalych chyba sie procek wiesza.
    Prosze o jakies sugestie.
    Z gory dzieki za pomoc.
  • REKLAMA
  • #2 860926
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    sho napisał:
    Witam,
    Mam uklad z prockiem AT89S52 do niego podlaczony jest LCD 16 * 2 na HD44780 i mam nastepujacy problem. Po podlaczeniu napiecia wyswietlacz pokazuje tylko czarne kwadraty na dolnej lini, gorna jest niezaswiecona. Kontrast moge regulowac. Napisalem programik w bascomie( ustawilem porty itp ) ktory wyswietla tekst na dwoch linijkach ale niedziala. Podlaczylem wiec do innego portu diode i po kazdej instrukcji sterujacej lcd zapalam ja i gasze tak zeby wiedziec czy program wogole dziala :). Wyglada na to ze przechodzi tylko instrukcja CLS a na pozostalych chyba się procek wiesza.
    Prosze o jakies sugestie.
    Z gory dzieki za pomoc.


    Witam.
    Przyczyn takiego zachowania wyświetlacza LCD może być wiele :?
    Na którym porcie go masz :?:
    Tryb 4 czy 8 bitów :?:
    Czy dobrze skonfigurowane piny w opcjach :?:
    Można by mnożyć domysły.
    Zbyt ogólnie opisałeś swój problem.
    Musisz podać nam więcej informacji :idea:

    Pzdr.

    Piotrek Sz.
  • #3 861286
    sho
    Poziom 11  
    Posty: 23
    Piny w bascomie sa dobrze skonfigurowane. Wyswietlacz jest podlaczony do portu 2.
    Tryb: 4 bity. R/W wyswietlacza jest podpiete do masy.
  • REKLAMA
  • #4 861398
    radoslaw.kwiecien
    Poziom 14  
    Posty: 56
    Pomógł: 8
    Jaka jest data produkcji Twojego procka? Wczesne wersje procków 89S52 były wadliwe - zamiast 256 miały tylko 128 bajtów ramu. Może też miały inne wady. Jeśli możesz spróbój inny procesor, np. S8252, S53, czyli jakiś sprawdzony. A z połączenia procka z LCD masz dobre? Jaka długość? Jaki kwarc?
    Aha, czarna powinna być górna linia. Jak CLS by działało, to byłby czysty ekran....
  • #5 861605
    Wilku
    Poziom 17  
    Posty: 330
    Pomógł: 5
    Wrzuć tu program, może jest jakiś błąd. Co do błędów w układach 89s52 to ilość RAM-u tu raczej nie gra roli. Jak chcesz sprawdzić procka to najprościej zróbić miganie na wszystkich portach i zweryfikować LED-em. Pozdrawiam.
  • #6 861677
    sho
    Poziom 11  
    Posty: 23
    Dzieki za zainteresowanie. Wiec po kolei :)
    Mam drugi taki sam procesor, objawy te same. Kwarc 8 MHz. Dlugosci kabelkow to ok 3 centymetry. Polaczenia sprawdzane wielokrotnie, to bylo pierwsze co sprawdzalem :). Programik w bascomie jest bardzo prosty ale i tak wstawie:

    
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = P2.3 , Db5 = P2.4 , Db6 = P2.5 , Db7 = P2.6 , E = P2.2 , Rs = P2.1
    
    Cls
    Lcd "Hello, World!"
    Wait 1
    Lowerline
    Lcd "*Test*"
    Wait 1
    
    End


    Jak sprawdzic date produkcji tych prockow ? :oops:
    Nic oprocz nr seryjnych na obudowie nie widze.
  • #7 861811
    radoslaw.kwiecien
    Poziom 14  
    Posty: 56
    Pomógł: 8
    sho napisał:
    Jak sprawdzic date produkcji tych prockow ? :oops:
    Nic oprocz nr seryjnych na obudowie nie widze.


    Data produkacji ma postać czterocyfrową - pierwsze dwie cyfry to rok, a kolejne dwie numer tygodnia w roku - np. 0310 dziesiąty tydzień 2003 roku. Te numery powinny być umieszczone po oznaczeniu częstotliwości, obudowy i wersji temperaturowej, np. 24PI - 24MHz, obudowa DIP (P) zakres temperatury przemysłowy(I).
  • #8 861885
    rtom
    Poziom 18  
    Posty: 458
    Pomógł: 6
    Ocena: 18
    Jestes pewny ze to sterownik HD (Hittachi)? Jaki to jest model wyswietlacza? Przy podlaczeniu wyswietlacza wazne jest odpowiednie wykonanie procedury inicjalizacji i dobranie czasow. Bascom robi wszystko sam i przez to niezawsze LCD zalapie. Co innego w C albo asemblerze. Wiec moja rada, sprawdz najpierw jaki masz model wyswietlacza, a nastepnie wgraj do procka jakis spr. programik wykonujacy sama inicjalizacje, napisanz w C lub asm. Dobrze zainicalizowany wys. powinien nic nie wyswietlac lub powinien migac kursor. Jak Ci sie pokazuje 1 rzad czarnych kwadratow, oznacza to, ze jest zle zainicalizowany.
  • #9 862025
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    sho napisał:
    Dzieki za zainteresowanie. Wiec po kolei :)
    Mam drugi taki sam procesor, objawy te same. Kwarc 8 MHz. Dlugosci kabelkow to ok 3 centymetry. Polaczenia sprawdzane wielokrotnie, to bylo pierwsze co sprawdzalem :). Programik w bascomie jest bardzo prosty ale i tak wstawie:

    
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = P2.3 , Db5 = P2.4 , Db6 = P2.5 , Db7 = P2.6 , E = P2.2 , Rs = P2.1
    
    Cls
    Lcd "Hello, World!"
    Wait 1
    Lowerline
    Lcd "*Test*"
    Wait 1
    
    End


    Jak sprawdzic date produkcji tych prockow ? :oops:
    Nic oprocz nr seryjnych na obudowie nie widze.


    Moment ,ale ja tu nie widzę czegoś takiego jak $regfile="89s52.dat" :?:
    I nie mogę widzieć bo przynajmniej w moim bascomie (v2.0.11.0 DEMO) nie mam pliku "dat" dla takiego procka :idea:
    I może tu jest "pies pogrzebany" ,skoro się procek "wiesza" przy wykonywaniu poleceń LCD-ka.Może się myle ale nic innego narazie nie przychodzi mi do głowy :(

    Pzdr.
    Piotrek Sz.

    PS
    Więc dla jakiego procka kompilujesz kod ?
  • REKLAMA
  • #10 862120
    Wilku
    Poziom 17  
    Posty: 330
    Pomógł: 5
    Co do pliku *.dat to będzie OK jak ustawisz 8052.dat. Jeśli chodzi o program to jak myślisz co zrobi jak wykona ostatni rozkaz? No nie wiadomo co zrobi, pewnie się zawiesi. Brakuje na końcu np. pętli nieskończonej do loop. Procek wtedy wykona wszystkie operacje i zacznie "krążyć" w tej pętli.
  • REKLAMA
  • #11 862127
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Wilku napisał:
    Co do pliku *.dat to będzie OK jak ustawisz 8052.dat. Jeśli chodzi o program to jak myślisz co zrobi jak wykona ostatni rozkaz? No nie wiadomo co zrobi, pewnie się zawiesi. Brakuje na końcu np. pętli nieskończonej do loop. Procek wtedy wykona wszystkie operacje i zacznie "krążyć" w tej pętli.


    Brak pętli ok. ,ale gdzie napis na LCD "*TEST*" :?:

    pzdr.
    Piotrek Sz.
  • #12 862364
    sho
    Poziom 11  
    Posty: 23
    Procki:
    Daty
    0246
    0304

    Porty przetestowane, LEDki mrugaja :)

    LCD:
    Kupilem go jako HD44780, producent to SDEC z tym ze na stronie producenta nie moge znalezc gdzyz zaden nie odpowiada mojemu, troche to dziwne.
    Jednak wszystkie 16 * 2 maja jako kontrolel wpisane NT3881 OR EQUIVALENT z tego co na sieci znalazlem to ten kontroler jest kompatybilny z HD44870.

    BASCOM:
    Wpisywalem LCDInit - bez rezultatow.
    Pliczek z rejestrami jest ustawiony w opcjach na 8052.
    Nie mam petli niekonczocej sie gdyz tak jak wczesniej pisalem zrobilem
    wczesniej po kazdej instrukcji mruganie dioda i tylko zamrugala raz po cls a potem juz zima.

    C:
    Znalazlem wersje demo RIDE i programik inicjalizujacy LCD.
    Ustawilem porty, i nic to samo co bascom.

    Cos mi sie wydaje ze to chyba jest wyswietlacz uwalony. Kompletnie nie mam pomyslu co zrobic. Bede musial zakupic chyba jakis nowy wyswietlacz.
  • #13 862910
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    A czemu czepiacie się wyświetlacza ? skoro procek się wiesza.
    Moja propozycja jest taka.Podłącz te diodę jeszcze raz i mrugaj po każdym poleceniu dla LCD,ale wyświetlacz odłącz od układu i ciekawe co wtedy się stanie ?
    Np.
    ...
    gosub mrugniecieLed
    CLS
    gosub mrugniecieLed
    HOME
    gosub mrugniecieLed
    LCD "TEST"
    gosub mrugniecieLed
    CLS
    gosub mrugniecieLed
    ...
    itd.
    I jestem ciekawy efektu .

    Pzdr.
    Piotrek Sz.
  • #14 864154
    sho
    Poziom 11  
    Posty: 23
    Kolejny dzien walki i jakies postepy :)
    Odpiolem wyswietlacz i procek sie nie wieszal. Podlaczylem z powrotem i nagle zdziwienie wyswietlacz pokazuje 2 linie bardzo slabo.
    Posprawdzalem kabelki wszytko ok. Wiec nie wiem ale nagle tak jakby zaczol dzialac. Z tym ze teraz instrukcje sie wykonuja ale dalej nei widac efektu. Pozmienialem linie w bascomie na przypadkowe i wyswietlacz zamiast napisu wyswietlil jakies przypadkowe pikselki to zrozumiale. Jak sa linie dobrze skonfigurowane to wyswietlacz pokazuje tylko dolna linie cala zaswiecona.
  • #15 865405
    rtom
    Poziom 18  
    Posty: 458
    Pomógł: 6
    Ocena: 18
    To ewidentnie zle wykonywana jest inicjalizacja lub nielaczenie kabelkow. Trzeba empirycznie dobierac czasy podaczas inicjalizacji, przynajmnije ja tak musialem robic. Nie wiem czy bascom ze swoim "wait" pozwala na takie precyzyjne dobieranie. Moze petla for jak w C.
  • #16 865614
    Wilku
    Poziom 17  
    Posty: 330
    Pomógł: 5
    Po tych wszystkich zabiegach to jednak będzie (jak już wspomniał kolega rtom) inicjalizacja. Bascom ma tylko jedno polecenie ( lcdinit ) i nie ma szans (z tego co wiem) ingerowac w poszczegolne czasy podczas inicjalizacji. Sam spotkałem się z czymś takim przy wyświetlaczu LM826XML (2x20). Pod Bascom nie chciał chodzić. Po użyciu procedur którymi "budziłem" inne lcd też nie bardzo. Dopiero jak wydłużyłem nieco wszystkie czasy zaczął pracować jak trzeba. Tak więc kolega sho ma dwa wyjścia: 1. oprogramowanie w asm 2. zamiana lcd z kimś kto używa asm. Ludzie dlaczego Wy nie piszecie skąd jesteście?? Pozdrawiam.
  • #17 865722
    marky1
    Poziom 17  
    Posty: 188
    Pomógł: 10
    Ocena: 8
    Sprawdź na kwarcu 6 MHz lub niższym. Może pomóc.
  • #18 866587
    sho
    Poziom 11  
    Posty: 23
    Wyswietlacz w koncu zaczol dzialac. Dziwne ale w bascomie mimo ustawienia pinow na takie jak byl podpiety wczesniej lcd nie dawal oznak zycia. Dopiero jak ustawilem go wg helpa ale nie pod port 1 tylko do P2
    czyli DB7 - DB4 na P2.7 - P2.4 E = P2.3 RS = P2.2 zadzialal.
    Dzieki wszystkim za pomoc :)
  • #19 2511897
    michal.fita
    Poziom 15  
    Posty: 149
    Pomógł: 2
    Ocena: 2
    Dodam od siebie, że być może brak procedury obsługi odczytu gotowości wyświetlacza na nastepne polcenie ma wpływ na działanie. Ja walczyłem z tym długi czas, żeby odpowiednio długie czasy wystawienia sygnału na porcie 80c51 dawały rezultaty w postaci 100% wyświetlania tego co chcę.

    Koledzy słusznie zwracają uwagę, że jedne wyświetlacze są "szybkie", inne "wolne". To jest poważny problem.
  • #20 3337893
    Kraśny
    Poziom 2  
    Posty: 3
    a ja mam moze takie idiotyczne pytanie,ale w jakiej kolejnosci sa ponumerowane piny tego wyswietlacza? sa 2 rzedy, opisane "1" i "2", y drugiej strony jest "314"? ktos doszedl do prawidlowej kolejnosci? Jaki jest najprostszy schemat by podlaczyc to do LPT?

Podsumowanie tematu

LABEL_AI_GENERATED
Problem dotyczył wyświetlacza LCD 16x2 z kontrolerem HD44780 podłączonego do mikrokontrolera AT89S52, gdzie po podłączeniu zasilania na LCD pojawiały się tylko czarne kwadraty na dolnej linii, a górna linia była nieaktywna. Kontrast był regulowany poprawnie. Program w Bascomie, wykorzystujący tryb 4-bitowy i port 2, nie wyświetlał tekstu, a mikrokontroler zawieszał się po wykonaniu instrukcji CLS. Sprawdzono konfigurację pinów, długość przewodów (ok. 3 cm), kwarc 8 MHz oraz poprawność połączeń. Wskazano, że problem może wynikać z nieprawidłowej inicjalizacji LCD, gdyż Bascom ma ograniczone możliwości dostosowania czasów inicjalizacji, co jest istotne dla kompatybilności z różnymi wyświetlaczami, zwłaszcza gdy producent LCD stosuje kontroler kompatybilny, lecz nie identyczny (np. NT3881). Sugerowano testowanie inicjalizacji w asemblerze lub C, a także sprawdzenie daty produkcji mikrokontrolera, choć nie miało to wpływu na problem. Po odłączeniu LCD mikrokontroler działał poprawnie, co potwierdziło, że zawieszanie się było związane z wyświetlaczem. Ostatecznie problem rozwiązano poprzez zmianę przypisania pinów w Bascomie na inne linie portu 2 (DB7-DB4 na P2.7-P2.4, E na P2.3, RS na P2.2), co pozwoliło na poprawne działanie wyświetlacza. W dyskusji podkreślono również znaczenie odpowiedniej procedury inicjalizacji i dostosowania czasów sygnałów, a także możliwość problemów z różnymi wersjami wyświetlaczy i ich kontrolerów.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA