Hallo zusammen!
Ich hatte hier ja immer noch meine fertige Platine vom Test mit dem 27x4 LCD am I2C-BUS liegen ( Hier der alte Thread ) !
Weil ich die fertige Platine nicht einfach in die Ecke legen wollte, habe ich mir ein 16x4 LCD besorgt und versucht, dies auch über den I2C-BUS anzusteuern.
Probleme hatte ich eigentlich nur in dem Punkt erwartet, dass mein Vier-Zeilen-LCD nur einen E-Pin besitzt.
Aus dem Grunde habe ich den alten Testaufbau wieder hergestellt und es einfach mal ausprobiert.
Hier mal der Testaufbau insgesamt:
Oben links ist wieder meine "alte" Platine zu sehen.
Unten ist das neue 16x4 LCD.
Auf dem Steckboard werkelt ein Mega8
Nach ein paar kurzen Vesuchen, was die Zeilen und Zeichen betrifft,
kam dann dieses Ergebnis heraus:
Wie man erkennen kann, werden alle 64 Zeichen richtig angezeigt.
Nun war mir das Prinzip auch klar und es folgte ein zweiter Anzeigentest:
Wie gleich im Programmcode zu sehen ist, werden immer nur ZWEI Zeilen angesprochen....
Locate 1 , 1
Loctae 2 , 1
Die Zeichen für Zeile 1 gehen dann einmal von 1 bis 16
und für Zeile 3 von 17 bis 32 !
Das selbe Prinzip gilt dann auch für die beiden anderen Zeilen:
Zeile 2 = Zeichen 1 bis 16
Zeile 4 = Zeichen 17 bis 32
Fertig!
Hier mal der Programmcode dazu:
CodeBox bascom
Wie ihr hier sehen könnt:
CodeBox bascom
habe ich einfach mal den Text in der Zeile "durchgeschrieben".
Das Ergebnis sieht dann auch wie erwartet aus:
Theoretisch wäre es also möglich, an einem dieser Adapter zwei 16x4 Displays zu betreiben und diese nur mit den unterschiedlichen E-Leitungen zu beschalten.
Mir schwebt da aber für den nicht benötigten E2-Pin ein anderer Verwendungszweck vor.
Das war es schon zu dem Kurztest.......
Endlich mal wieder eine Erfolgsmeldung.
Grüße,
Cassio
Noch kurz zur Erklärung:
Vielleicht ist es ja jemanden aufgefallen.....
Ich habe im Test-Code immer beide E-Leitungen aktiviert (_lcd_e = 192)!
Dies kommt daher, das ich einen Defekt am E-Pin meines PCF8574A festgestellt habe.
Dieser ist leider hinüber und gibt keine Signale mehr raus.
Vielleicht ist dies auch der Grund, warum zum Ende der Tests mit dem 27x4 LCD gar nichts mehr funktionierte.
Es waren dann zum Schluss also nicht nur die LCD`s defekt sondern auch der E-Pin.
Ich hatte hier ja immer noch meine fertige Platine vom Test mit dem 27x4 LCD am I2C-BUS liegen ( Hier der alte Thread ) !
Weil ich die fertige Platine nicht einfach in die Ecke legen wollte, habe ich mir ein 16x4 LCD besorgt und versucht, dies auch über den I2C-BUS anzusteuern.
Probleme hatte ich eigentlich nur in dem Punkt erwartet, dass mein Vier-Zeilen-LCD nur einen E-Pin besitzt.
Aus dem Grunde habe ich den alten Testaufbau wieder hergestellt und es einfach mal ausprobiert.
Hier mal der Testaufbau insgesamt:
Oben links ist wieder meine "alte" Platine zu sehen.
Unten ist das neue 16x4 LCD.
Auf dem Steckboard werkelt ein Mega8
Nach ein paar kurzen Vesuchen, was die Zeilen und Zeichen betrifft,
kam dann dieses Ergebnis heraus:
Wie man erkennen kann, werden alle 64 Zeichen richtig angezeigt.
Nun war mir das Prinzip auch klar und es folgte ein zweiter Anzeigentest:
Wie gleich im Programmcode zu sehen ist, werden immer nur ZWEI Zeilen angesprochen....
Locate 1 , 1
Loctae 2 , 1
Die Zeichen für Zeile 1 gehen dann einmal von 1 bis 16
und für Zeile 3 von 17 bis 32 !
Das selbe Prinzip gilt dann auch für die beiden anderen Zeilen:
Zeile 2 = Zeichen 1 bis 16
Zeile 4 = Zeichen 17 bis 32
Fertig!
Hier mal der Programmcode dazu:
CodeBox bascom
'
$regfile = "m8def.dat"
$crystal = 8000000 'intern !
$hwstack = 128
$swstack = 128
$framesize = 128
$baud = 38400 'TxD zum PC (0,16% Fehler)
' ================================================
' Bestimme die Ein- und Ausgänge
Ddrd = &B0001_0010 '1 ist Ausgang 0 ist Eingang
Portd = &B1110_1101 'auf Hi oder Low setzen
'PC.4 = SDA
'PC.5 = SCL
Ddrc = &B11_0100 '1 ist Ausgang 0 ist Eingang
Portc = &B00_1011 'auf Hi oder Low setzen
'PB.0 = LED
Ddrb = &B011 '1 ist Ausgang 0 ist Eingang
Portb = &B100 'auf Hi oder Low setzen0
Led Alias Portb.0
' ================================================
' Globale Interrupts einschalten
Enable Interrupts
' ================================================
' Config für INT0 (I2C-Matrix)
'Enable Int0 ' Überwache INT0
'On Int0 Matrix_scan
'Enable Int0
' ==============================================================================
' I2C-Config
Config Scl = Portc.5 'I2C SCL
Config Sda = Portc.4 'I2C SDA
Config I2cdelay = 1
I2cinit
' I2C Matrixtastatur (Kent Andersson)------------------------
'$lib "key_i2c.lib" 'LIB für I2C-Matrixtastatur
'$external _key_code 'Externe Routine
'*****WICHTIG !*************************************************
'* Die Funktion "_key_scan", in der LIB "key_i2c.lib", MUSS ab BASCOM Ver. 2.0.3.0 auf _key_code geändert werden!
'* Ab BASCOM 2.0.3.0 dürfen Funktionen und Variablen NICHT mehr den selben Namen besitzen!
'* Bitte folgendes in der LIB ändern=
'* [_Key_code]
'* _Key_code:
'* Das war es dann auch schon !
'*****WICHTIG !*************************************************
'Const Pcf8574_kbd = &H72 'I2C-Adresse des PCF8574A
'!rcall _Key_Init 'Initialisierung aufrufen
'Dim _key_scan As Byte 'Variable für Tastenausgabe
'Dim Kb As Byte
'**************************************************************
' I2C LCD (Kent Andersson)-----------------------------------
$lib "Lcd_i2c.lib" 'LIB für I2C-LCD
'$lib "Lcd_i2c_mg.lib" 'mit @genu(250)
'$lib "Lcd_i2c_og.lib" 'ohne @genus(250)
'$lib "Lcd_i2c_ks077.lib" 'LIB für KS077
Const Pcf8574_lcd = &H74 'I2C-Adresse des PCF8574A
' _lcd_e Variable für E + E2
Dim _lcd_e As Byte
_lcd_e = 192 ' E-Pin aktiv
' 128 für E-Pin
' 64 für E2-Pin
' 192 für E + E2 aktiv
' ==============================================================================
Dim I As Byte
' #############################################################################
' Anfangswerte:
Initlcd
Cls
' ################################################
' # #
' #---------------Arbeitsschleife----------------#
' # #
' ################################################
Do 'Hauptschleife-Beginn
Led = 0 'EIN
Locate 1 , 1 'erste Zeile
Lcd "1234567890123456"
Wait 1
Led = 1 'AUS
Locate 2 , 1 'zweite Zeile
Lcd "2345678901234567"
Wait 1
Led = 0 'EIN
Locate 1 , 17 'dritte Zeile
Lcd "3456789012345678"
Wait 1
Led = 1 'AUS
Locate 2 , 17 'vierte Zeile
Lcd "4567890123456789"
Wait 3
Cls
Led = 0
Locate 1 , 1
Lcd "AVR-Praxis Forum"
Locate 2 , 1
Lcd "-----Cassio-----"
Locate 1 , 17
Lcd "++++01:11:49++++"
Locate 2 , 17
Lcd "****20:02:11****"
Wait 3
Cls
Led = 1
Wait 1
Led = 0
Locate 1 , 1
Lcd "Dies ist Zeile 1Dies ist Zeile 3"
Locate 2 , 1
Lcd "Dies ist Zeile 2Dies ist Zeile 4"
Wait 3
Cls
Led = 1
Wait 1
Cls
Loop 'Hauptschleife-Ende
' ################################################
' # #
' #----------------Subroutinen-------------------#
' # #
' ################################################
'--------------------------------------------------------------------Matrix_Scan
'Matrix_scan:
'!rcall _key_code 'externe Routine aufrufen
'If _key_scan > 0 Then
'Kb = Lookupstr(_key_scan , Matrix_wert) 'Wert vom Key_scan der Tastatur anpassen
'Else
'End If
'Return
End
' ------------------------------------------------------------------Data-Tabelle
'Matrix_wert:
'Data "Z" , "7" , "8" , "9" , "A" , "4" , "5" , "6" , "B" , "1" , "2" , "3" , "C" , "F" , "0" , "E" , "D"
'Return
Wie ihr hier sehen könnt:
CodeBox bascom
Led = 0
Locate 1 , 1
Lcd "Dies ist Zeile 1Dies ist Zeile 3"
Locate 2 , 1
Lcd "Dies ist Zeile 2Dies ist Zeile 4"
Wait 3
Cls
habe ich einfach mal den Text in der Zeile "durchgeschrieben".
Das Ergebnis sieht dann auch wie erwartet aus:
Theoretisch wäre es also möglich, an einem dieser Adapter zwei 16x4 Displays zu betreiben und diese nur mit den unterschiedlichen E-Leitungen zu beschalten.
Mir schwebt da aber für den nicht benötigten E2-Pin ein anderer Verwendungszweck vor.
Das war es schon zu dem Kurztest.......
Endlich mal wieder eine Erfolgsmeldung.
Grüße,
Cassio
Noch kurz zur Erklärung:
Vielleicht ist es ja jemanden aufgefallen.....
Ich habe im Test-Code immer beide E-Leitungen aktiviert (_lcd_e = 192)!
Dies kommt daher, das ich einen Defekt am E-Pin meines PCF8574A festgestellt habe.
Dieser ist leider hinüber und gibt keine Signale mehr raus.
Vielleicht ist dies auch der Grund, warum zum Ende der Tests mit dem 27x4 LCD gar nichts mehr funktionierte.
Es waren dann zum Schluss also nicht nur die LCD`s defekt sondern auch der E-Pin.