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

[mega8][Bascom] Wyświetlacz LCD nie inicjalizuje się...

siwekyhy 21 Cze 2008 18:24 5415 25
  • #1 5271994
    siwekyhy
    Poziom 14  
    Witam

    Kupiłem wyświetlacz lcd 2x16 z niebieskim podświetlaniem i znaki wyświetlają się na biało zgodny z standardem HD44780. Podłączyłem go do atmegi 8 wszystko połączone jak trzeba i poustawiałem. Po odpaleniu wyświetlacz wyświetla tylko jedna całą linie kwadracików... a żadnego napisu który mu wysyłam nie wyświetla... W sklepie jak kupowałem ten wyświetlacz sprzedawca sprawdził go i wszystko ładnie działało. Byłem u kolegi sprawdzić ten wyświetlacz na zestawie uruchomieniowym Zl11AVR na jego wyświetlaczu zielonym który jest w tym zestawie bez podświetlania wszystko działało a mój wyświetlacz udało się tylko raz uruchomić żeby coś wyświetlał i to jakimś "fartem".
    Szukałem po forum odpowiedzi , próbowałem kręcić kontrastem przed i po uruchomieniu programu , wyłączać/włączać podświetlanie , załączyć wyświetlacz chwilę po uruchomieniu programu, użyć atmegi 8 z kwarcem 4 Mhz , z wewnętrznym kwarcem 1 Mhz i nic... :( :( :(

    Za odpowiedzi z góry dzięki :)

    pozdrawiam :)
  • #2 5272245
    Chyllus
    Poziom 17  
    Wrzuć kod jeśli możesz. Bo trudno zgadywać w ciemno. Powodów może być wiele.
  • #4 5272500
    Freddy
    Poziom 43  
    Już się domyślam co to za wyświetlacz :)
    On ma trochę inaczej sterowanie, piny
  • #5 5272857
    siwekyhy
    Poziom 14  
    W bascomie program jest prosty wygląda tak :

    $regfile m8def.dat

    Lcd " Michał "

    No i na takim programie zadziałał raz na zestawie uruchomieniowym tylko zamiast m8def.dat było attiny 2313. Co do wyprowadzeń to musze być takie same jak w innych wyświetlaczach zgodnych z HD44780 skoro zadziałał na zestawie uruchomieniowym w którym LCD jest wpinany na goldpinach więc nie ma możliwości inaczej rozmieszczonych wyprowadzeń. Męczę się już z tym parę dni i zaczyna mnie to już wkurzać.... :|

    Dodam jeszcze oznaczenie LCD: WC1602ASTBLWNC06
  • #6 5272869
    don diego
    Poziom 32  
    To jest cały program? Chyba trochę krótki, nawet jak na Bascoma:) Jakaś inicjalizacja pewnie by się przydała i poczytanie helpa do Bascoma.
  • #7 5272911
    Chyllus
    Poziom 17  
    :D Serio bardzo krótki.
    Spróbuj coś takiego:

    $crystal = 1000000    'deklaracja częstotliwości pracy kwarcu - ustaw tak jak masz u siebie
    $regfile "m8def.dat" 
    Config Lcd = 16 * 2
    Do
    Cls : Cursor Off : Lcd "test line1"
    Lowerline
    Lcd "test line 2"
    Loop : End
  • #8 5272996
    Tomasz.W
    Poziom 35  
    Tak też nie pójdzie. Wszystko za mało.
    Brak przypisania linii portu procesora do poszczególnych wejść sterujących wyświetlacza. Efekt tego jest taki że programik nie wie gdzie jaki sygnał wystawić
  • #9 5273072
    Chyllus
    Poziom 17  
    U mnie wystarcza. W Bascomie domyślnie przypisane są porty do LCD i dzięki temu nie trzeba w każdym programie wklepywać tych samych linii kodu.
    Bascom wie gdzie jest podpięty LCD a my oszczędzamy czas.
    Musisz zajrzeć do Options>Compiler>LCD.
    A jeśli faktycznie to nie wystarczy to zastosuj to:
    Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6

    Oczywiście przypisz piny tak jak masz na swojej płytce.
    Pozdrawiam
  • #10 5273120
    Balu
    Poziom 38  
    Bo napisanie tej linijki to skaranie boskie tyle pracy...życzę koledze Chylius powodzenia w życiu programisty... Ale chyba długa droga przed kolegą.

    @autor, przepiszcz kolego nóżki czy coś się nie urwało, oprócz tego upewnij się, że nie próbujesz za szybko z nim gadać. (Zwolnij procek / użyj wait'a po cls'nie).
  • #11 5273449
    Balu
    Poziom 38  
    Nie są to frustracje, tylko lenistwo "programistów" nie znające granic, potem coś Wam nie działa, pytacie co, i wychodzi rozmowa jak ta od początku...
    "Program"



    Sorry! To ma być program? Nawet w bascomie KONIECZNE jest minimum wkładu. Nie, kompilator NIE może za nas wszystkiego robić.

    Czy naprawdę dopisanie tej linijki od konfiguracji LCD i jego pinów to jest tyle wysiłku?

    Potem jak kiedyś spędzisz dzień lub dwa szukając błedu w programie i znajdziesz go w opcjach, bo Ci się nie chciało czegoś tam napisać bo przecież kompilator to sam robi, wspomnisz moje słowa.

    I żeby nie byłonie mam nic przeciwko wspomagaczom konfiguracji, jeśli chcesz ok, CodeVision ma generator konfiguracji (i to o wiele bardziej rozbudowany niż bascup), Microchip ma generator konfiguracji....
    Ale i jeden i drugi GENERUJE KOD który My programiści możemy przejrzeć. A nie dołącza go gdzieś sam niejwanie.

    Sorry.
  • #13 5273510
    Chyllus
    Poziom 17  
    Hehehe. Freddie łapiesz mnie za słówka ;)
    Sam osobiście zajrzałem do Bascoma tylko kilka razy bo nie uważam go za coś wartego głębszego poznania. Ale od razu sprawdziłem jak są zdefiniowane w programie piny od LCD i już później mnie to nie interesowało. Myślałem że autor też tak zrobił więc nie pisałem linii z konfiguracją pinów.
    A to nie jest lenistwem z mojej strony tylko skonfigurowaniem programu.
    Po co się kłócić? Linia została dopisana. Niech teraz autor tematu sprawdzi czy działa i zakończmy proszę dalszą dyskusję nie związaną z tematem.
    Pozdrawiam elektronicznych frustratów!
  • #14 5273701
    Freddy
    Poziom 43  
    Osobiście używałem Bascoma kilka razy (używam FastAVR) i nie wierzę żadnemu kompilatorowi w tzw. defaulty. Już się raz naciąłem. Wolę sobie sam ustawić tak jak ja chcę.
    Jednym z błędów kompilatora jest jego "teoretyczne" traktowanie kilku instrukcji w jednej linii. Przykład:

    
     T = T + T1 :  T = T / 10
    

    to nie jest to samo co
     T = T + T1
     T = T / 10
    

    Przekonałem się na własnej skórze.
  • #15 5274365
    siwekyhy
    Poziom 14  
    Napisałem taki programik:
    $regfile "m8def.dat"
    $crystal = 4000000


    Config Portd = Output ' do zapalenia diody żebym wiedział kiedy lcd ma coś wyświetlać
    Portd = 0


    Config Lcd = 16 * 2

    Config Lcdbus = 4

    Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.0 , Rs = Portc.1

    Do

    Wait 1

    Cls

    Wait 1
    Portd = 255 'zapal diode


    Lcd "siema"

    Wait 1

    Portd = 0 'zgaś diode

    Loop

    End

    a tak po kompilacji :
    [/code]
    Report : NONAME23
    Date : 06-22-2008
    Time : 15:15:13

    Compiler : BASCOM-AVR LIBRARY V 1.11.8.3, DEMO Edition
    Processor : M8
    SRAM : 400 hex
    EEPROM : 200 hex
    ROMSIZE : 2000 hex

    ROMIMAGE : 1BA hex -> Will fit into ROM
    ROMIMAGE : 442 dec
    FLASH USED : 5 %
    BAUD : 9600 Baud
    XTAL : 4000000 Hz
    BAUD error : 0.16%

    Stack start : 45F hex
    Stack size : 20 hex
    S-Stacksize : 8 hex
    S-Stackstart : 440 hex
    Framesize : 18 hex
    Framestart : 427 hex
    Space left : 1056 dec

    LCD DB7 : PORTC.2
    LCD DB6 : PORTC.3
    LCD DB5 : PORTC.4
    LCD DB4 : PORTC.5
    LCD E : PORTC.0
    LCD RS : PORTC.1
    LCD mode : 4 bit

    Chylus Twój program też nie zadziałał :( sprawdzałem styki, podłączenia wszystko w porządku. Zmieniłem także procek na Attiny13 i też nie ruszył. brrrrrr :| Próbowałem jeszcze z komendami Lcd ON lcd off i nic :/ Hm Mógłby ktoś z was napisać program w C żeby Lcd byle co wyświetlał i był podpięty pod te piny co są wyżej napisane. Ps. tak trochę poza tematem pytanko czemu jak zmieniłem kwarc z wewnętrznego 1Mhz na zewnętrzny 4Mhz to teraz podczas wykonywania programu "dłużej trwa
    sekunda" ?
  • #16 5274441
    Freddy
    Poziom 43  
    A zmieniłes przy okazji ustawienia fuse ?
  • #17 5274483
    Tomasz.W
    Poziom 35  
    1) narysuj schemacik jak masz to wszystko podłączone
    2) napisz czy kompilator zgłasza jakieś błędy (w to szczerze wątpię)
    3) jakiego programatora używasz
    4) czy programator poprawnie identyfikuje procesor
    5) przepisz wszystko z zakładki programatora "Lock and Fuse Bits"
    Tyle na razie.
  • #18 5274872
    siwekyhy
    Poziom 14  
    1 Link obrazka
    [mega8][Bascom] Wyświetlacz LCD nie inicjalizuje się...
    2 Nie zgłaszają się żadne błędy
    3 STK 200/300 na LPT
    4 Tak
    5 Nie wiem o co wam chodzi z fusami bo jest ustawiony procek na 4 Mhz czy coś więcej trzeba ustawić ? ps obrazek z fusami dorzucę później [/img]
  • #19 5275097
    Tomasz.W
    Poziom 35  
    1) brak kondensatorów przy kwarcu
    2) pin 5 wyświetlacza (R/W) musi być połączony z masą.
    3) 20 pin procesora (Avcc) musi być podłączony do plusa zasilania
  • #20 5275155
    Chyllus
    Poziom 17  
    Oczywiście pin R/W należy podłączyć do masy tak samo jak DB0-DB3
  • #21 5275167
    Tomasz.W
    Poziom 35  
    Chyllus napisał:
    ....podłączyć do masy tak samo jak DB0-DB3...
    Nie ma takiej konieczności. Linie Db0÷Db3 nie muszą być podpięte do masy, mogą "wisieć" nie dopięte do niczego.
  • #22 5275542
    siwekyhy
    Poziom 14  
    No zadziałał :) Nie działało dlatego że nie było podpięte R/W do masy... Ad. 1 Kondensatorów zapomniałem na schemacie dołączyć ale są podpięte do kwarcu :)
    Co do 3 punktu to gdy nie jest połączone Avcc do Vcc do też działa ( po co się to łączy razem? ) Chciałem jeszcze raz zapytać dlaczego czas np wait 1 działa dłużej niż jedna sekunda na zewnętrznym kwarcu 4Mhz niż na kwarcu wewnętrznym na którym działa wszystko normalnie :)

    Db0 - Db3 nie podpinałem do masy

    Co do Bascoma to po skonfigurowaniu Bascoma bez pisania w programie config lcd itd itd Lcd też zadział :)

    Dzięki wszystkim za pomoc :) pozdrawiam :)
  • #24 5275574
    Chyllus
    Poziom 17  
    Gratuluje :) AVCC jest to zasilanie części analogowej uK (przetwornika analogowo cyfrowego). AVCC łączy się z VCC zazwyczaj poprzez filtr LC w celu minimalizacji zakłóceń.
    Nie ma to jednak najmniejszego znaczenia w przypadku ATMEGA8 gdyż omyłkowo piny te są wewnętrznie połączone z sobą (błąd producenta).
    Co do drugiego pytania to czy definiujesz wartość częstotliwości kwarcu na początku programu?
  • #26 5276371
    siwekyhy
    Poziom 14  
    tak definiuję $crystal = 4000000
    a fusy zmieniłem w pony prog na CKSEL3 - bez ptaszka CKSEL2 - bez ptaszka CKSEL1 - ptaszek CKSEL0 - bez ptaszka :) a to obrazek z moimi fusami :
    [mega8][Bascom] Wyświetlacz LCD nie inicjalizuje się...
REKLAMA