Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATMEGA8 + LCD + BASCOM

kulawikm 22 Kwi 2008 15:31 7040 17
  • #1 22 Kwi 2008 15:31
    kulawikm
    Poziom 9  

    Witam,
    jako początkujący programista atmegi8 chciałem uruchomić sobie wyświetlacz LCD 20x2, wypisać na nim jakiś stały napis (obojętnie co) i napotkałem na problem. Oto schemat i króciutki programik:

    Code:


       $regfile = "m8def.dat"                                   'Procek ATMEGA8
       $crystal = 1000000                                       '1MHz - Kwarc 1MHz

       Config Portd.7 = Output                                  'PORTD.7 jako wyjście

       Config Lcd = 20 * 2                                      'LCD 20 znaków x 2 linie


       Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portd.0 , Rs = Portd.1
       Config Lcd = 20 * 2                                      'LCD 20 znaków x 2 linie


       Dim I As Integer
       I = 0

       Cls                                                      'Cls dla LCD
       Lcd "Staly napis"
       Lowerline

       Do
          Locate 2 , 1
          Incr I
          Lcd I
          If Portd.7 = 1 Then
             Portd.7 = 0
          Else
             Portd.7 = 1
          End If
          Wait 1
       Loop


    ATmega chodzi na fabrycznych ustawieniach (1Mhz wewnętrzne taktowanie), w symulatorze wszystko jest OK działa jak należy.
    Natomiast na rzeczywistym układzie program rusza bo dioda na PD7 mruga ale na LCD nie ma nic (a właściwie to górna linia jest cała zapalona a dolna wygaszona - i tak bez żadnych zmian). Testowane na 2 LCDkach, na obydwu to samo.
    Proszę o jakieś rady co może być nie tak.

    Poprawiłem tytuł - Regulamin. [c_p]

    1 17
  • #2 22 Kwi 2008 15:43
    seba_x
    Poziom 31  

    czy aby napewno dobrze podpiełeś lcd ?

    0
  • #3 22 Kwi 2008 15:47
    kulawikm
    Poziom 9  

    Piny według dołączonego schematu, wszystko przedzwonione chyba z 5 razy.

    0
  • #4 22 Kwi 2008 15:48
    don diego
    Poziom 32  

    Zwarcie pinu kontrastu do masy nie zawsze jest dobrym rozwiązaniem. Zastosuj tam trymerek.

    0
  • #5 22 Kwi 2008 15:54
    kulawikm
    Poziom 9  

    don diego napisał:
    Zwarcie pinu kontrastu do masy nie zawsze jest dobrym rozwiązaniem. Zastosuj tam trymerek.


    Nie pomogło, też już próbowałem. Potencjometrem 5k (taki akurat miałem) można było tylko 'ściemnić' (wygasić) górną linię.

    Dodano po 2 [minuty]:

    A czy kolejność tych dwóch linii jest ważna:
    Code:
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portd.0 , Rs = Portd.1
    
       Config Lcd = 20 * 2                                      'LCD 20 znaków x 2 linie


    Która linia ma być pierwsza? W helpie jest tak jak powyżej.

    0
  • #6 22 Kwi 2008 15:55
    seba_x
    Poziom 31  

    spróbuj z innym lcd , i jeszcze wywal jedną (ostatnią) linię z config lcd (masz dwa razy to samo) , Lowerline też nie potrzebne

    wywal Config Lcdpin i ustaw to w opcjach (zakładka lcd)

    i jeszcze przydał by się END na końcu

    0
  • #7 22 Kwi 2008 15:58
    kulawikm
    Poziom 9  

    seba_x napisał:
    spróbuj z innym lcd , i jeszcze wywal jedną (ostatnią) linię z config lcd (masz dwa razy to samo)


    Zauważyłem - ale to się wkleiło przez przypadek tylko tu, w programie tego nie mam.
    Probowałem na 2 nowych LCDkach. Na obydwu to samo.

    0
  • Pomocny post
    #8 22 Kwi 2008 16:42
    Marczeli_P
    Poziom 20  

    A "RW" (pin 5) dałeś do masy?

    Dodano po 48 [sekundy]:

    a i radziłbym potencjometr zastosować około 20k

    0
  • #9 22 Kwi 2008 16:44
    mirekk36
    Poziom 42  

    jak piszesz, że górna linia jest zapalona a dolna zgaszona, to znaczy tylko jedno - wyświetlacz nie został zaincjalizowany programowo. Poprostu się to nie udało. Skoro tak? to musisz sprawdzić po raz kolejny połączenia, bo prawdopodobnie pomyliłeś którąś albo któreś linie danych.

    oczywiście kod napisany jak najbardziej prawidłowo w celu przetestowania. Absolutnie lepiej jest zdefiniować piny za pomocą Config LCDPIN niż polegać na ustawieniach w zakładkach kompilatora. Zresztą o prawidłowości kodu sam się przekonujesz po wynikach w symulatorze.

    Sprawdź czy w tym wyświetlaczu twoim nie ma inaczej ponumerowanych linii Danych może???

    bo skoro podłączałeś potencjometr do kontrastu i udawało się w pełni go regulować bo albo znikało wszystko albo było widać tę jedną linię (same prostokąty ciemne) to numeracja dla sygnałów E, RS, kontrastu i zasilania się zgadza. Ale jak mówię może coś jest odwrotnie z D0-D7

    oczywiście sygnał RW też trzeba do GND a chyba nie widać tego na schemacie ale może podpiąłeś??? bo bez tego też ani rusz, gdyż nic nie można zapisać do wyświetlacza

    0
  • #10 22 Kwi 2008 16:50
    kamyczek
    Poziom 34  

    Może to co piszecie ma sens ale pewnie kolega pracuje na wewnętrznym oscylatorze proszę dla testu zmienić $crystal=8000000 i zobaczyć co się będzie działo często problem leży w tym że jest za szybko dla lcd ...

    0
  • #11 22 Kwi 2008 16:51
    don diego
    Poziom 32  

    Jesteś pewny, że Twoje wyświetlacze mają sterownik zgodny z HD44780?

    0
  • #12 22 Kwi 2008 16:59
    kulawikm
    Poziom 9  

    Pin "RW" wisi u mnie w powietrzu. Może właśnie tu leży problem. Jutro podłączę do masy i będę testował.
    LCD zgodne z HD44780, piny sprawdzane nawet z dokumentacją.
    Co do $crystal=8000000 to raczej nie, bo:
    - atmega8 nowa, a w nocie katalogowej pisze że fusebity standardowo ustawione na (rezonator wewn. 1MHz) a ja nic tam nie zmieniałem.
    - po mrugającej diodzie widzę (mniej więcej) czas zapalenia/zgaszenia około 1s/1s. Więc raczej dobrze ustawione.

    Jutro będą testy więc wszystko dokładnie tu opiszę.

    0
  • #13 22 Kwi 2008 17:13
    M. S.
    Poziom 34  

    Kolego! Jeszcze raz - 5 pin do masy!

    0
  • #14 22 Kwi 2008 17:30
    mirekk36
    Poziom 42  

    kulawikm napisał:
    Pin "RW" wisi u mnie w powietrzu....


    nieee no to o czym my tu mówimy??? ... jak wisi w powietrzu to w zasadzie jest na nim jak dla wyświetlacza stan wysoki - czyli wyświetlacz pracuje w trybie tylko odczytu z niego danych a nie zapisu! więc twój procek może sobie w nieskończoność wysyłac dowolne dane do niego.

    0
  • #15 22 Kwi 2008 22:40
    Balu
    Poziom 38  

    Ciekawe czy wyświetlacz i lub procek (piny) przeżyły taką zabawę we wspólne gadanie na jeden drut...

    0
  • #16 23 Kwi 2008 14:55
    kulawikm
    Poziom 9  

    PODZIĘKOWANIA dla Marczeli_P, jako pierwszy zwrócił uwagę na niepodłączony pin 'R/W'.
    Dziś po testach z podpiętym 'R/W' do masy mogę powiedzieć że wyświetlacze działają (obydwa) jak należy. Wszystko OK.

    Do Balu: wyświetlacze i procek przetrwały i mają się dobrze ;)

    0
  • #17 04 Mar 2012 10:11
    yasec
    Poziom 9  

    Witam, pozwólcie że odświeżę...
    Borykam się z LCD 2x16 a dokładnie taki:
    http://www.magserv24.pl/product.php?id_product=12118
    myślę że dokumentacja do tego jest taka:
    http://www.adafruit.com/datasheets/TC1602A-01T.pdf

    Podobno jest zgodny z HD44780 Podłączyłem tak jak kolega wyżej, oczywiście zmieniając na 16 * 2, ale jedyna reakcja wyświetlacza to lekkie przygaśnięcie... Zamieszczam zdjęcia podłączenia i samego wyświetlacza
    https://picasaweb.google.com/106774721662404335074/Lcd?authuser=0&feat=directlink

    0
  • #18 09 Mar 2012 12:17
    Marczeli_P
    Poziom 20  

    Ze zdjęć wynika, że wyświetlacz nie został poprawnie zainicjowany. Pokaż kod to może coś więcej będzie można powiedzieć.

    0