Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Jak sterować 2 x LCD na atmega i Bascom

IMEX 28 Feb 2011 00:23 4903 11
  • #1
    IMEX
    Level 20  
    Jak sterować 2 x LCD na Atmega i Bascom
    Witam serdecznie - czy ktoś wie co i jak na załączonym obrazku.

    Jak sterować 2 x LCD na atmega i Bascom

    Są połączone te LCD równolegle tyle że linia E jest sterowana osobno.
    Jak to ugryźć w Bascomie.
  • #2
    tadzik85
    Level 38  
    Na szybko to przekonałbym się jak się obsługuje wyświetlacz 4*40 bo on ma 2 linie E.

    Nic więcej nie poradzę bo z Bascomem nie mam do czynienia.
  • #3
    piotrva
    VIP Meritorious for electroda.pl
    Jak kolega mówi sprawdź w helpie bibliotekę lcd4e2.lib/.lbx
    A na serio zastanów się nad przesiadką na C bo tam to się robi prościej.
  • #4
    tadzik85
    Level 38  
    Można by przełączać bramkami linie E, ale to wymaga modyfikacji schematu.
  • #5
    piotrva
    VIP Meritorious for electroda.pl
    ależ po co zwiększać hardware, skoro można to załatwić tą biblioteką, a w C to wogóle nie stwarza żadnego problemu
  • #6
    tadzik85
    Level 38  
    Trzeba nie trzeba rozwiązanie jest. Mało optymalne ale jest.
  • #7
    IMEX
    Level 20  
    Ciesze się że jest takie zainteresowanie moim problemem

    Czyli jak ma wyglądać config ? dla LCD - standardowo

    tylko przykłąd poglądowy nie ze schematu
    Code:
    Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.1 , Rs = Porta.0
    
    Config Lcd = 16 * 2
    Cls
    Cursor Off Noblink


    a może cos takiego ale wg. helpa dotyczy tylko asemblera
    Code:
    $lib "LCD4E2.LBX"
    

    '===========================

    RS   PortB.0   
    R/W   PortB.1   w tej wersji nie jest używana końcówka R/W wyświetlacza, należy ją dołączyć do masy
    E   PortB.2   linia aktywująca pierwszy kontroler
    E2   PortB.3   linia aktywująca drugi kontroler
    DB4   PortB.4   szyna danych musi pracować w trybie 4 bitowym
    DB5   PortB.5   
    DB6   PortB.6   
    DB7   PortB.7
  • #8
    piotrva
    VIP Meritorious for electroda.pl
    biblioteka lcd4e2 jest konfigurowana z poziomu biblioteki pisanej w assemblerze. Z tego co wiem nieskompilowana wersja tych bibliotek (z możliwością zmian) jest dostępna tylko w wersji płatnej basoma
    Oto przykład zastosowania, połączenia powinny być tak:
    Code:

    $lib "LCD4E2.LBX"

    '===========================

    RS   PortB.0   
    R/W   PortB.1   w tej wersji nie jest używana końcówka R/W wyświetlacza, należy ją dołączyć do masy
    E   PortB.2   linia aktywująca pierwszy kontroler
    E2   PortB.3   linia aktywująca drugi kontroler
    DB4   PortB.4   szyna danych musi pracować w trybie 4 bitowym
    DB5   PortB.5   
    DB6   PortB.6   
    DB7   PortB.7

    Code:

    '------------------------------------------------------------------
    '                          LCDCUSTOM4BITE2.BAS
    '                 demo shows 4 bit LCD mode with 2 E lines
    '------------------------------------------------------------------
    $regfile = "2313def.dat"

    ' this is the custom LCD lib
    $lib "Lcd4e2.lib"

    $crystal = 4000000

    'to use 2 E lines we need a way to make a distinct between them
    Dim ___lcde As Byte
    '___LCDE set to 0 will use E1, set to any other value will use E2

    Dim S As String * 10
    S = "Hello"

    ' write to the 2 first lines
    ___lcde = 0

    Cls

    Lcd "test"
    Lcd S

    ___lcde = 1
    'write to the 2 last lines
    Lcd "test"
    Lcd S

    End
  • #9
    rzuczek
    Level 17  
    A ja proponuje wziąć drugi AVR do drugiego wyświetlacza. Wiem jest to toporne rozwiązanie, ale najszybsze do realizacji i będzie działać!
  • #10
    piotrva
    VIP Meritorious for electroda.pl
    rzuczek wrote:
    A ja proponuje wziąć drugi AVR do drugiego wyświetlacza. Wiem jest to toporne rozwiązanie, ale najszybsze do realizacji i będzie działać!

    nie tędy droga, po co brać kolejny procesor, skoro można to rozwiązać programowo?
    to tak jakbym do każdego termometru 1wire dawał osobny avr, bo nie umiem korzystać z funkcji rom match...
    a poza tym chyba nie najszybsze, bo trzeba dać cały drugi procesor i go odpowiednio oprogramować, ustalić język porozumiewania się (i2c, uart), komendy sterujące... to gorsza dłubanina niż napisanie w bascomie od zera bibliotek niskopoziomowych dla tych wyświetlaczy
    a poza tym autor tematu nie wypowiada się bo albo nie przetestował wszystkiego, albo już rozwiązał problem
  • #11
    adambehnke
    Level 24  
    No proszę.Widzę że autor wykopał skądś mój stary projekcik :D.

    Oczywiście że w prosty sposób można sterować dwoma LCD, używając do tego Linii E i E2.
    Potrzebna jest do tego oczywiście biblioteka (mogę udostępnić) .Sterowanie jest proste i nie nastręcza żadnych programowych niedogodności.
    Po prostu przed wpisaniem danych do LCD trzeba wskazać na odpowiedni lcd i po sprawie.
    Można nawet definiować własne osiem znaków dla każdego lcd.


    Fragment kodu:

    Code:
    $regfile = "m32def.dat"
    
    $crystal = 8000000
    $baud = 19200                                                                                                                                           ' use baud rate
    $hwstack = 32                                                                                                                                           ' default use 32 for the hardware stack
    $swstack = 32                                                                                                                                           ' default use 10 for the SW stack
    $framesize = 32                                                                                                                                         ' default use 40 for the frame space

    $lib "lcd4e2.lbx"
    Dim ___lcde As Byte
    Const En1 = 0
    Const En2 = 1
    En Alias ___lcde

    Config Lcdpin = Pin , Db4 = Pa.4 , Db5 = Pa.5 , Db6 = Pa.6 , Db7 = Pa.7 , E = Pa.3 , Rs = Pa.2 , E2 = Pa.1






    Enable Interrupts

    'czyszczenie LCD1
    En = En1
    Cls

    'czyszczenie LCD1
    En = En2
    Cls

    'Powitenie

    'lcd1
    En = En1
    Cursor Off
    Locate 1 , 1 : Lcd "Sterownik"
    Locate 2 , 1 : Lcd "Kominka"

    'lcd2
    En = En2
    Cursor Off
    Locate 1 , 1 : Lcd "Uaktualnianie"
    Locate 2 , 1 : Lcd "Oprogramowania...."




    Oczywiście użyta przeze mnie biblioteka została odpowiednio przerobiona do współpracy z pinami pod jakie podpięte są LCD. Ale w samplach bascoma jest odpowiedni przykład wraz z działającą biblioteką ,tyle że trzeba używać zadeklarowanych tam pinów.
  • #12
    FastProject
    Level 28  
    Zmodyfikowałem ją pod PORTC ale niestety nie działa mi. Największe wątpliwości mam z tym fragmentem:
    Code: basic4gl
    Log in, to see the code


    Gdy pozmieniałem dane (40, 14, 6 na 136, 11, 3) zapisywane w rejestrach to wyświetlają się krzaczki na lcd w losowych miejscach.

    Moja zmodyfikowana biblioteka:
    Code: basic4gl
    Log in, to see the code

    Już opisane są tam piny portu C. Jak widać nie ma kolejności pinów PORTC4-7 z pinami LCD DB4-7..może to jest powodem? Używam kwarcu 11.0592MHz.