Forum: Mikrocontroller und Digitale Elektronik LCD Display I2C


von Ralf E. (Firma: Privat) (spike8000)


Lesenswert?

Wir (Kollege und Ich) haben ein Messgerät erstellt. Zuvor haben wir die 
Anzeige herkömmlich angesteuert. Um Ports einzusparen sind/wollen wir 
die
Ansteuerung des Displays über den I2C Bus ausführen. Im Netz haben wir 
einige Beispiele hierzu gefunden.

Leider bekommen wir unser Programm bzw. das Display nicht zum laufen.
Sobald wir einer der folgenden Libraries im Programm Ablauf einfügen 
(haben wir natürlich in den LIB-Ordner kopiert) hängt das Programm

$lib "Lcd_i2c.lib"
$lib "YLcd_i2c.lib"
$lib "YwRobot_Lcd_i2c.lib"

Egal bei welcher. Sobald wir den Aufruf in Hochkomma setzten oder 
entfernen läuft das Programm wieder.
LEDs leuchten und Relais ziehen an.
Egal in welcher Zeile wir eines der o.g. "Lib-Aufrufe" einfügen startet 
das Programm nicht (ohne Fehlermeldung).

Wenn wir z.B. eine andere Librarie (keine LCD) einfügen läuft das 
Programm ohne Probleme.

Anbei ein einfaches Programm wobei die Platine bzw. das Programm schon 
hängt sobalt die Libray aus dem Hochkomma genommen wird.
Für die Display Adressen haben wir ebenfalls schon andere Werte 
eingesetzt ohne Erfolg

Wir hoffen Jemand kann uns helfen bzw. hat eine Idee woran es hier ggfs. 
hängt. Vielen Dank im voraus.

$regfile = "m324pdef.dat"
$crystal = 16000000

'$lib "Lcd_i2c.lib"
'$lib "YLcd_i2c.lib"
'$lib "YwRobot_Lcd_i2c.lib"

$hwstack = 150
$swstack = 150
$framesize = 150

'******************* Deklarationen ************************

Const Pcf8574_lcd = 78                                      'Adresse des 
I2C-LCDs
Dim Lcd_backlight As Byte                                   '1 = an; 0 = 
aus. Wird erst durch einen LCD-Befehl umgesetzt!

'****************** Initialisierung ***********************

Ddrb = &B11111111 
'Standardbelegung der DDRs
Ddra = &B11111111                                           'NEU 
HINZUGEFÜGT Standardbelegung der DDRs
Ddrc = &B11111111                                           'NEU 
HINZUGEFÜGT Standardbelegung der DDRs
Ddrd = &B11110000 
'PortA-Deffinition 1 = Ausgang / 0 = Eingang
Portd = &B10001111

Porta.7 = 1                                                 'NEU 
HINZUGEFÜGT, Schaltet die Betriebsspg. 5V auf das LCD und das I2C Modul
Wait 1

Config Scl = Portc.0 
'Konfigurieren von I2C
Config Sda = Portc.1

Config Lcd = 16 * 2
Config I2cdelay = 1
Dim _lcd_e As Byte
_lcd_e = 128                                               'LCD im 4-Bit 
Mode betreiben
'warte bis Kondensator bei Ta0 geladen, auch für LCD-Init:
Waitms 300
Waitms 300                                                  'warte bis 
Kondensator bei Ta0 geladen, auch für LCD-Init:

'**********************************************************
'******************** Hauptprogramm ***********************

Cls
Locate 1 , 1
Lcd "Hello world!"

Wait 10

Do

  Portd.7 = 1                                              'Led1_higher' 
(Pin 21 / d7) Led 1 Relais 1
  Waitms 1000

'   Portc.2 = 1                                              'Led2_high' 
(Pin 24 / c2) Led 2 Relais 2
'   Waitms 1000
'   Portb.0 = 1                                              'Led3_low' 
(Pin 01 / b0) Led 3 Relais 3
'   Waitms 1000
'   Portb.1 = 1 
'Led4_lower' (Pin 02 / b1) Led 4 Relais 4
'   Waitms 1000
'   Portc.4 = 1 
'Led5_betrieb' (Pin 26 / c4) Led 5 Betrieb
'   Waitms 1000
'   Portc.3 = 1                                              'Led_ssm' 
(Pin 25 / c3) Led 6 SSM
'   Waitms 1000

  Wait 2
Loop

End

von tommy (Gast)


Lesenswert?

Ich kenne mich zwar nicht mit Bascom aus, aber muss man
nicht irgendwo ein LCD-Init machen?
Sind an den I2C Leitungen Pull-Ups?

von Ralf (Gast)


Lesenswert?

Vielen vielen Dank für die Kommentierung,

hat funktioniert !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.