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

Jak podłączyć dwa wyświetlacze LCD 2x16 do ATMEGA 16 w BASCOM?

arktik1 26 Maj 2009 16:50 6189 9
REKLAMA
  • #1 6577376
    arktik1
    Poziom 27  
    Posty: 1281
    Pomógł: 61
    Ocena: 39
    Witam wszystkich.
    Pytanie moje brzmi:
    Czy do jednego kontrolera np. ATMEGA 16 można podłączyć 2 LCD 2x16?
    1 wiadomo:
    Config LCD = 16 *2
    Config LCDpin... itd.
    A drugi?
    CONFIG LCD1 na przykład BASCOM pokazuje błędy.
  • REKLAMA
  • #2 6577620
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    oczywiscie że możesz podłaczyć 2 lcd do uC ,ale w bascomie nie obsłużysz obydwu jednoczesnie ,co innego w C
  • #3 6577706
    arktik1
    Poziom 27  
    Posty: 1281
    Pomógł: 61
    Ocena: 39
    Czyli jednym słowem KICHA.
    Nie potrafię C.
    Nie ma innego programu gdzie można napisać obsługę 2 wyświetlaczy??
  • REKLAMA
  • #4 6577957
    zdebel
    Poziom 15  
    Posty: 158
    Pomógł: 9
    Ocena: 3
    Samemu napisać obsługę LCD w Bascomie?
  • #5 6578373
    janbernat
    Poziom 38  
    Posty: 3954
    Pomógł: 468
    Ocena: 51
    Jeśli dasz wyświetlacze na szynę danych jak zewnętrzny RAM to może się uda przełączając tylko RS i E.
    Takie coś się kompiluje:

    If Temp = costam Then
    $lcd = 20
    End If

    Ale to że się kompiluje znaczy bardzo mało.
    I najmniejszy procesor obsługujący zewnętrzną szynę danych to ATmega8515.
    Ale obudowy takie jak ATmega32.
    Może pojawi się Z.G i się wypowie.
  • REKLAMA
  • #6 6578434
    ZbeeGin
    Poziom 39  
    Posty: 4329
    Pomógł: 605
    Ocena: 463
    A i pewnie, że się wypowiem! :D

    Wykorzystać należy bibliotekę LCD4E2 i wszystko oprócz linii E zepnij równolegle tak jak sugeruje to opis tej biblioteki. Linię E pierwszego LCD podepnij do E a linię E drugiego LCD do E2. Teraz zajrzyj do przykładu lcdcustom4bit2e.bas z katalogu SAMPLES, gdzie znajdziesz nstępujący sposób obsługi tej hybrydy:

    '------------------------------------------------------------------
    '                          LCDCUSTOM4BITE2.BAS
    '                 demo shows 4 bit LCD mode with 2 E lines
    '------------------------------------------------------------------
    $regfile = "2313def.dat"
    
    'dołączymy własną bibliotekę dla LCD
    $lib "Lcd4e2.lib"
    
    $crystal = 4000000
    
    'by używać dwóch linii E potrzebujemy jakiś prosty sposób przełączania się 
    'pomiędzy kontrolerami - resztę załatwi biblioteka
    Dim ___lcde As Byte
    '___LCDE ustawione na 0 użyje E, a ustawione w dowolną inną wartość użyje E2
    
    Dim S As String * 10
    S = "Witaj"
    
    'zapis do pierwszego wyświetlacza
    ___lcde = 0
    
    Cls
    
    Lcd "test"
    Lcd S
    
    ___lcde = 1
    'zapis do drugiego wyświetlacza
    Lcd "test"
    Lcd S
    
    End


    Prawda, że proste?

    ---

    Są tylko dwie wady:
    - taktowanie 4MHz a nie inne (chyba, że zmienisz opóźnienia i zrekompilujesz bibliotekę, mając pełną wersję),
    - wyświetlacz podpięty pod PORTB (chyba, że zamienisz definicje i zrekompilujesz bibliotekę, mając pełną wersję).
  • #7 6578707
    janbernat
    Poziom 38  
    Posty: 3954
    Pomógł: 468
    Ocena: 51
    ZbeeGin-a czy to działa na różnych wyświetlaczach?
    Np. 16*1-pierwszy a 20*4 drugi?
    Bo nie ma configLCD w przykładzie.
    I czy configLCD można przełączać w programie?

    Dodano po 8 [minuty]:

    A jeszcze-czy pomysł sterowania przez szynę danych dwu różnych wyświetlaczy w Bascomie jest możliwy do realizacji?
  • REKLAMA
  • Pomocny post
    #8 6580219
    ZbeeGin
    Poziom 39  
    Posty: 4329
    Pomógł: 605
    Ocena: 463
    Wyświetlacze muszą być takiej samej organizacji.

    Oczywiście musisz dodać CONFIG LCD = <jaki_wyświetlacz> by procedura inicjalizyjna wiedziała jakie masz wyświetlacze. Domyślnie jest przyjęty 16*2 (z opcji konfiguracji), i w przykładzie jest to pominięte.

    Samo CONFIG LCD możnaby zmieniać w programie, ale trzeba by użyć przed wysłaniem czegoś na wyświetlacz polecenia INITLCD. Dane jakie były wyświetlane oczywiście zostaną usunięte. Zaś CONFIG LCDPIN nie jest możliwe do ponownego wywoływania.

    Dwa LCD przez szynę danych... Niestety procedurę obsługi musiałbyś napisać samodzielnie. Dyrektywy nie są traktowane jako polecenia, które program może wykonywać w każdej chwili. Jest to tylko zbiór informacji dla kompilatora, by sobie odpowiednio przetłumaczył program.
  • #9 6582443
    arktik1
    Poziom 27  
    Posty: 1281
    Pomógł: 61
    Ocena: 39
    No dobra.
    Chyba zastosuje 1 wyświetlacz 4x16:D
  • #10 6599427
    adambehnke
    Poziom 24  
    Posty: 882
    Pomógł: 23
    Ocena: 40
    $regfile = "m32def.dat"
    $crystal = 16000000
    $lib "lcd4e2.lbx"
    Dim ___lcde As Byte
    'Rs = PortB.0
    'RW = GND
    'E = PortB.2
    'E2 = PortB.3
    'Db4 = PortB.4
    'Db5 = PortB.5
    'Db6 = PortB.6
    'Db7 = PortB.7
    Config Lcd = 40 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
    
    Const En1 = 0
    Const En2 = 1
    
    En Alias ___lcde
    
    'start
    
    En = En1
    Cls
    En = En2
    Cls
    
    
    En = En1
    Locate 1 , 1 : Lcd "Pierwsza linia"
    Locate 2 , 1 : Lcd "Druga linia"
    En = En2
    Locate 1 , 1 : Lcd "Trzecia linia "
    Locate 2 , 1 : Lcd "Czwarta linia "
    
    
    Stop




    Ten kod działa w 100% u mnie i nie wywala żadnych błędów. Mam dwa identyczne wyświetlacze. Ciekaw jestem tylko czy działało by to na różnych Lcd.

Podsumowanie tematu

✨ Podłączenie dwóch wyświetlaczy LCD 2x16 do jednego mikrokontrolera ATMEGA16 w BASCOM jest możliwe fizycznie, jednak standardowa biblioteka BASCOM nie obsługuje jednoczesnej pracy z dwoma wyświetlaczami poprzez typowe dyrektywy CONFIG LCD. Rozwiązaniem jest użycie biblioteki LCD4E2, która pozwala na sterowanie dwoma wyświetlaczami 4-bitowymi z dwoma liniami Enable (E i E2), gdzie pozostałe linie są połączone równolegle. Przykład obsługi znajduje się w pliku lcdcustom4bit2e.bas w katalogu SAMPLES BASCOM. Wyświetlacze muszą mieć taką samą organizację (np. oba 16x2), a konfigurację LCD (CONFIG LCD) można zmieniać w programie tylko poprzez ponowną inicjalizację (INITLCD), co powoduje wyczyszczenie ekranu. Sterowanie dwoma różnymi wyświetlaczami (np. 16x1 i 20x4) jest problematyczne i wymaga własnej implementacji. Przykładowy kod pokazuje przypisanie linii Enable do zmiennej i przełączanie jej w celu wyświetlania na odpowiednim LCD. W BASCOM nie ma natywnego wsparcia dla dwóch LCD na jednej magistrali danych bez dodatkowego programowania. Alternatywą jest użycie jednego większego wyświetlacza, np. 4x16.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA