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

MEGA8 + LCD 16x1 BASCOM - problem z wyświetlaniem tekstu dłuższego niż 8 znaków

macios 18 Kwi 2006 09:04 2899 9
REKLAMA
  • #1 2539183
    macios
    Poziom 11  
    Posty: 6
    Uprzedzając komentarze - uzyłem "szukaj" i nie znalazlem odpowiedzi...

    Sytuacja jest następująca:
    MEGA8 steruje wyświetlaczem LCD (w założeniu ma być 16*1).
    Próbowałem na dwu różnych - ale efekt jest taki sam.
    Użyte modele: WC1601A i HY1601E

    Program wygląda tak:
    Cytat:

    $regfile = "m8def.dat"
    $crystal = 4000000

    Config Lcdmode = Port
    Config Lcdbus = 4
    Config Lcd = 16 * 2

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

    Initlcd
    Waitms 500
    Cls
    Waitms 200
    Lcd "12345678"
    Do
    Cls
    Waitms 500
    Display Off
    Waitms 500
    Display On
    Waitms 500
    Shiftlcd Left
    Waitms 500
    Shiftlcd Right
    Waitms 500
    Shiftlcd Right
    Waitms 500
    Shiftlcd Left
    Waitms 500
    Loop


    Sprawa prosta jak drut i działa...ale jednak nie do końca...
    Nie to ma być robione...
    W założeniu ma być zegar i termometr na DS1820 oraz sterowanie
    jasnością podświetlenia za pomocą PWM w zależności od napięcia na ADC0.

    Pełny program wydaje się działac - tj. komunikacja do DS'a jest,
    PWM działa... Tylko nic się nie wyświetla...

    Gdy próbuję wyświetlić tekst dłuższy niż 8 znaków - zamiast znaków na pierwszych 8 pozycjach LCD są czarne prostokąty, na drugich pusto.
    Gdy próbuję wyświetlić jakikowiek inny tekst (np. w pętli do..loop inkrementowaną wartośc0 - efekt j.w.

    Próbowałem definiować LCD jako 16*1a, 16*1, 16*2, 16*4 - efekt zawsze ten sam.

    Siedzę nad tym już 2 tygodnie (wieczorami, po pracy...) i nic....

    Może ktoś ma jakiś pomysł....
  • REKLAMA
  • REKLAMA
  • #3 2542738
    macios
    Poziom 11  
    Posty: 6
    Próbowałem na różnych częstotliwościach: 1MHz, 2MHz, 4MHz i 8MHz z wewnętrznego oscylatora - kwarc ma być zegarkowy 32kHz.
    Ustawiałem i w programie ($crystal) i fusebity.
    Zawsze efekt taki sam....to znaczy żaden...
  • #4 2542896
    hunterhouse
    Poziom 26  
    Posty: 893
    Pomógł: 84
    Ocena: 3
    ustaw wieksze stosy. Options > Compiler > Chip
    i tam masz HW Stack, Soft stack i frame.
    jak masz atmega8 to możesz spokjnie dać 128 na każde.
    pewnie bedzie za duzo ale atmega ma 1024 ramu to i tak będziesz miał za duzo.
  • #5 2544372
    macios
    Poziom 11  
    Posty: 6
    no niestety, nie pomogło...

    zrobiłem testy:

    polecenie "cls" czyści ekran z tego co na nim jest, czyli kwaratów...
    polecenie "cursor on blink" powoduje wyswietlenie migającego kursora wraz z kwadratem
    polecenie "locate x , y" przesuwa kursor

    tylko czemu zamiast znaków są kwadraty....
  • REKLAMA
  • #6 2552659
    macios
    Poziom 11  
    Posty: 6
    ale pomogło coś innego....

    podłączyłem wyświetlacz 16*2...

    i poszlo od 1go strzału....
  • #7 2554422
    Dawidos20
    Poziom 16  
    Posty: 251
    Pomógł: 3
    Ocena: 35
    bo masz kofiuracje w programie na 16*2 a nie na 16*1 zmienyć i powino być ok
  • REKLAMA
  • #9 2557497
    macios
    Poziom 11  
    Posty: 6
    jak pisałem wcześniej - próbowałem WSZYSTKICH dostępnych ustawień....
  • #10 2558022
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    No to można sobie go pozostawić w szufladzie do momentu osiągnięcia wprawy w asm, gdzie nie ma takich ograniczeń, ale tylko dla wnikliwych i cierpliwych... :>

Podsumowanie tematu

LABEL_AI_GENERATED
Problem dotyczy wyświetlania tekstu dłuższego niż 8 znaków na wyświetlaczu LCD 16x1 sterowanym przez mikrokontroler ATmega8 programowany w BASCOM. Użyto dwóch modeli LCD: WC1601A i HY1601E. Pomimo poprawnej komunikacji z czujnikiem DS1820, działania PWM i ustawień częstotliwości taktowania (1MHz, 2MHz, 4MHz, 8MHz) oraz konfiguracji fusebitów i dyrektywy $crystal, na ekranie pojawiają się jedynie czarne prostokąty zamiast tekstu przy próbie wyświetlenia więcej niż 8 znaków. Próby definiowania wyświetlacza jako 16x1, 16x1a, 16x2 i 16x4 nie przyniosły efektu. Zwiększenie stosów w kompilatorze również nie rozwiązało problemu. Testy poleceń LCD (cls, cursor on blink, locate) potwierdziły działanie sterowania kursorem, lecz problem z wyświetlaniem znaków pozostał. Podłączenie wyświetlacza 16x2 rozwiązało problem natychmiast, co sugeruje niezgodność konfiguracji lub ograniczenia wyświetlaczy 16x1 w BASCOM. Wskazano, że konfiguracja w programie powinna odpowiadać faktycznemu typowi wyświetlacza, a niektóre modele 16x1a mogą wymagać specyficznych ustawień.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA