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

ATMEGA 16 i 2 LCD. BASCOM

26 Maj 2009 16:50 5814 9
  • Poziom 27  
    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.
  • Poziom 33  
    oczywiscie że możesz podłaczyć 2 lcd do uC ,ale w bascomie nie obsłużysz obydwu jednoczesnie ,co innego w C
  • Poziom 27  
    Czyli jednym słowem KICHA.
    Nie potrafię C.
    Nie ma innego programu gdzie można napisać obsługę 2 wyświetlaczy??
  • Poziom 14  
    Samemu napisać obsługę LCD w Bascomie?
  • Poziom 38  
    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.
  • Poziom 38  
    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:

    Code:
    '------------------------------------------------------------------
    
    '                          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ę).
  • Poziom 38  
    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?
  • Pomocny post
    Poziom 38  
    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.
  • Poziom 27  
    No dobra.
    Chyba zastosuje 1 wyświetlacz 4x16:D
  • Poziom 24  
    Code:
    $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.