Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega8+LCD2x16][Bascom] Obsługa LCD 2x16

skater156 23 Jun 2009 11:40 14738 23
IGE-XAO
  • #1
    skater156
    Level 14  
    Witam, niedawno zakupiłem sobie wyświetlacz LCD2x16.Znalazłem na elektrodzie taki schemat:
    [Atmega8+LCD2x16][Bascom] Obsługa LCD 2x16

    Teraz mam kilka pytań:
    1.Czy program poniżej do wyświetlania jakiegoś napisu jest dobry?
    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim A As Byte
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.6 , Rs = Portb.7
    Cls
    Lcd "Hello world."
    Wait 1
    Lcd Chr(0) ; Chr(1)
    _temp1 = 1
    !rCall _write_lcd
    End


    2.Po co jest ten potencjometr przy LCD?
    3.Czy można dać 22pf zamiast 27pf?
    4.Do czego są wyjścia w LCD L- i L+?

    Za wszystkie odpowiedzi dzięki:)
  • IGE-XAO
  • #2
    kuuczoo
    Level 26  
    1. Program jest zły - nie ta konfiguracja pinów. Zajrzyj do schematu, potem do pomocy bascomu i "lcd config".
    2. Potencjometr jest do regulacji kontrastu wyświetlacza
    3 tak 22p może być (wg datasheeta powinno)
    4. L+ i L- to wejścia do podłączenia np 5V dla podświetlania wyswietlacza (jeśli posiada)
  • #3
    PIOTOM0
    Level 20  
    Teraz mam kilka pytań:
    hej
    1.Czy program poniżej do wyświetlania jakiegoś napisu jest dobry?
    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim A As Byte
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.6 , Rs = Portb.7

    Cls
    Lcd "Hello world."
    Wait 1
    End



    Teraz powinien być ok.
    Dla tego układu na schemacie musisz zmienić konfigurację pinów wejściowych do wyświetlacza.

    2. Potencjometr jest do ustalenia kontrastu wyświetlacza - ważny, bez niego nie ustalisz kontrastu. W docelowym układzie można go zastąpić dzielnikiem napięcia.

    3. można zamienić
    4. Podświetlenie wyświetlacza - folia z tyłu matrycy lcd

    Pozdrawiam
    Piotom0
  • #4
    yokoon
    Level 29  
    Witam.
    Na schemacie sterowanie LCD jest z portu C, więc nie wiem czemu podajecie port B.
  • IGE-XAO
  • #5
    skater156
    Level 14  
    Dzięki za odpowiedzi, ale sie pogubiłem:)
    Jak konkretnie mam skonfigurować te porty?
    Czy jeszcze coś trzeba zmienić w kodzie?
  • #6
    dawid512
    Level 32  
    Code:
    Config Lcd = 16 * 2
    
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
  • #7
    skater156
    Level 14  
    Czy program poniżej nie ma już żadnych błędów?
    Czy trzeba zmieniać fuse bit?
    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim A As Byte
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 
    Cls
    Lcd "Hello world."
    Wait 1
    End


    Dodano po 12 [minuty]:

    Czy ten potencjometr trzeba dawać?
  • #8
    snow
    Level 30  
    Ja zawsze zwieram VEE do masy. Poza tym wgraj program do procesora i zobaczysz czy kod jest poprawny. Jak nie zmieniałeś fusebit to $crystal=1000000
  • #9
    emarcus
    Level 38  
    skater156 wrote:
    Czy program poniżej nie ma już żadnych błędów?
    Czy trzeba zmieniać fuse bit?

    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim A As Byte
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Cls
    Lcd "Hello world."
    Wait 1
    End



    Czy ten potencjometr trzeba dawać?



    Tak, trzeba zmienic fuse bity bo dales inne taktowanie processora niz fabryczne ustawienie (1MHz), ponadto masz na schemacie taki wlasnie rezonator kwarcowy.
    Jezeli nie zmienisz fusebitow to ten program tez bedzie pracowal bo nie ma tu zadnych pomiarow czasu, lub innych operacji. Ma tylko wyswietlic napis na LCD.
    Ten na koncu "Wait 1" nie jest potrzebny do niczego.
    Rowniez bez potrzeby deklarujesz zmienna A - nigdzie w programie nie jest uzywana.

    potencjometr do regulacji kontrastu;
    Wiec prawda jest taka ze: regula jego stosowania wynika z tradycji.
    Dawniej prawie kazdy LCD wymagal stosowania niewielkiego napiecia dodatniego na Pin Vo (contrast). Nektore LCD nawet potrzebowaly niewielkiego napiecia ujemnego wzgledem masy (co troche komplikowalo uklad). Z biegiem lat, technologia produkcji LCD zostala na tyle udoskonalona ze wiekszosc LCD wymaga Vo=0V, Zatem w takiej sytuacji potencjometr ten mozesz pominac i podlaczyc ten pin bezposrednio do masy wspolnie z R/W i pozostalymi wolnymi pinami.

    e marcus
  • #10
    rpal
    Level 27  
    Jedna rada o której nie napisano. Kiedy kupisz już sobie LCD zwróć uwagę na konkretny typ aby nie popełnić tego co mi się przydarzyło. Milcząco założyłem że ma zgodne ze standardem wyprowadzenia a okazało się że jednak ktoś dla jaj (LCD było dość niestandadowe ale bardzo duże i dość tanie) pozamieniał zasilanie więc najpierw popatrz w notę katalogową czy jest on zgodny z ogólnie przyjętymi standardami.
  • #11
    *zaba*
    Level 13  
    Powiem jedno ja podłączałem z tej strony i wszystko okey
    Link
  • #12
    skater156
    Level 14  
    Czyli to podłączenie będzie dobre?
    [Atmega8+LCD2x16][Bascom] Obsługa LCD 2x16
    Czy jak nie dam potencjometru to:
    VSS do GND?
    VVC do Plusa?
    VVE do GND?

    Czyli D0;D1;D2:D3 nie musze dawać do GND?
  • #13
    dawid512
    Level 32  
    Potencjometr daj lub dobierz odpowiedni rezystor. Linii D0-D3 nie musisz spinać z masą. Połączenie jak najbardziej poprawne.
  • #14
    skater156
    Level 14  
    Dzięki za odpowiedz, ale jak nie dam tego potencjometru to co sie stanie?
    Jeżeli trzeba dać ten potencjometr lub opornik to jakiej muszą być wartości?
  • #15
    kuuczoo
    Level 26  
    Musisz je dobrać doświadczalnie do swojego wyświetlacza. Tak jak koledzy pisali wcześniej napięcie potrzebne do dobrego kontrastu z reguły jest w okolicach 0. Możesz na początek dać dzielnik z rezystorów 10k i 1k (10k do Vcc, 1k do masy), a potem ewentualnie zmniejszyć lub zwiększyć w razie potrzeby ten opornik 1k.
  • #16
    skater156
    Level 14  
    A jak nie dam tych oporników to co sie stanie?
  • #17
    dawid512
    Level 32  
    skater156 wrote:
    A jak nie dam tych oporników to co sie stanie?


    Możesz nic nie zobaczyć bo kontrast będzie nieodpowiedni ale to zależy od wyświetlacza. Dla świętego spokoju daj potencjometr 10k.
  • #18
    skater156
    Level 14  
    Czy od L- i L+ trzeba dać opornik 10k?
    Gdzie to L- i L+ podłączyć
    Na wyświetlaczu mam + i - do podłączenia, czy to wystarczy by zasilić go(jakie napięcie musze dać LCD 2x16)
  • #19
    dawid512
    Level 32  
    L+ i L- to podświetlanie w zależności od wyświetlacza możesz dać bezpośrednio do 5V ale lepiej dobrać rezystor. Wyświetlacz zasilasz takim samym napięciem co uc czyli 5V.
  • #20
    skater156
    Level 14  
    Czy uc i LCD mogę zasilić z jednego tarafa?
    Ale gdzie te L- i L+ podłączyć?

    Dodano po 2 [minuty]:

    Czy ten kod jest dobry?
    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim A As Byte
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Lcd "Hello world."
    End


    do tego schematu?
    [Atmega8+LCD2x16][Bascom] Obsługa LCD 2x16
  • #21
    dawid512
    Level 32  
    Możesz ale nie bezpośrednio z trafa tylko ze stabilizatora 7805. Jak chcesz mieć podświetlanie do lcd to L+ podlacz do 5V a L- przez rezystor(np. taki jak na schemacie) do gnd(masy). Program:
    Code:

    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    cls
    Lcd "Hello world."
    End
  • #22
    skater156
    Level 14  
    Witam :)
    Na wstępie dziękuje wszystkim za pomoc.Odpaliłem LCD, i nawet działa :D
    Teraz zamierzam zrobić sobie termometr na LCD z DS18b20.Tutaj zaczynają sie schody.Napisałem program(zlepek różnych).
    Skorzystałem z tego schematu:
    [Atmega8+LCD2x16][Bascom] Obsługa LCD 2x16
    DS18b20 dodałem do nóżki Atmegi 8 do PD5.Program ma działać tak że, po włączeniu LCD temperatura wyświetli mi sie na środku LCD pierwszej linijki.
    Program wygląda tak:
    Code:

    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Config 1wire = Portb.0
    Declare Sub Odcz_temp
    Dim Temperatura(2) As Byte
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
    Do
    Cursor Off
    Call Odcz_temp
    Cls
    If Temperatura(2) = 0 Then
    Lcd "Temp: " ; Temperatura(1) ; Chr(0) ; "C"
    Else
    Lcd "Temp: -" ; Temperatura(1) ; Chr(0) ; "C"
    End If
    Loop
    End
    Sub Odcz_temp
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 750
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Temperatura(1) = 1wread(2)
    1wreset
    If Err = 1 Then
    Cls
    Lcd "Brak ukladu"
    Do
    Loop
    End If
    If Temperatura(2) > 0 Then
    Temperatura(1) = 256 - Temperatura(1)
    End If
    Temperatura(1) = Temperatura(1) / 2
    End Sub

    Czy napisany program jest dobry?

    Dodano po 1 [godziny] 33 [minuty]:

    Przepraszam za pomyłkę, DS18b20 jest podłączony do PB0.Zaprogramowałem Atmege8 tym programem powyżej i nie działa.
    Bardzo proszę o pomoc.
  • #23
    kuuczoo
    Level 26  
    Co oznacza nie działa? Przede wszystkim w programie nie masz inicjacji LCD (polecenie CLS).
  • #24
    skater156
    Level 14  
    Dzięki za wszystkie odpowiedzi już sobie poradziłem.
    Temat zamykam.