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

ATMEGA 16 i 2 LCD. BASCOM

arktik1 26 Maj 2009 16:50 6105 9
  • #1 6577376
    arktik1
    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.
  • #2 6577620
    gothye
    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
  • #3 6577706
    arktik1
    Poziom 27  
    Czyli jednym słowem KICHA.
    Nie potrafię C.
    Nie ma innego programu gdzie można napisać obsługę 2 wyświetlaczy??
  • #4 6577957
    zdebel
    Poziom 15  
    Samemu napisać obsługę LCD w Bascomie?
  • #5 6578373
    janbernat
    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.
  • #6 6578434
    ZbeeGin
    Poziom 39  
    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  
    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
    #8 6580219
    ZbeeGin
    Poziom 39  
    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  
    No dobra.
    Chyba zastosuje 1 wyświetlacz 4x16:D
  • #10 6599427
    adambehnke
    Poziom 24  
    $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.
REKLAMA