Forum: Mikrocontroller und Digitale Elektronik LCD (Funduino) ansteuern mit Bascom


von Karl (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Mikrocontroller Gemeinde,
ich habe ein Problem mit dem LCD Display (Foto im Anhang). Es ist von 
Funduino und die Hintergrundbeleuchtung geht. Ich sehe auch einen 
schwarzen Balken in der ersten Zeile doch mehr gibt das Display nicht 
von sich. Ich versuche auch das erste mal ein Display mit einem 
Mikrocontroller anzusprechen doch komme nichtmehr weiter...

Die Pins vom Display und der I2C Platine waren schon verlötet und wurden 
alle auf Durchgang kontrolliert.
Am Arduino habe ich die Pins C.4 und C.5 für SDA und SCL verwendet. 
Beide haben auch zur Sicherheit 10kOhm Pullup Widerstände.

Habe jetzt schon mehrere Lib`s probiert doch keine hat mir richtig 
helfen können. Bis jetzt habe ich es mit der Bascom Hardware 
i2c_twi.lib, YLcd_i2c.lib und YwRobot_Lcd_i2c.lib probiert mit 
Beispielcode und allem.

Der Hersteller schreibt auf der Seite das die Adresse des Display`s 0x27 
ist aber sie funktioniert meines erachtens nicht.
Durch weitere Rescherchen habe ich auch rausgefunden das es diese 
Displays auch mit der adresse 0x3F gibt, doch diese Adresse funktioniert 
auch nicht.

Hatte jemand schonmal so ein Problem oder hat schonmal mit den Displays 
gearbeitet?
Hoffe ihr könnt mir auf die Sprünge helfen. Hier noch mein Code

Grüße Karl
1
$regfile = "m328pdef.dat"              'Arduino Nano V3
2
$crystal = 16000000                    '16 MHz
3
$lib "YwRobot_Lcd_i2c.lib"             'YwRobot Treiber für LCD
4
5
$hwstack = 64
6
$swstack = 10
7
$framesize = 40
8
9
'**********************************************************
10
'******************* Deklarationen ************************
11
12
Const Pcf8574_lcd = 27                'Adresse des I2C-LCDs (orginal 78)
13
Dim Lcd_backlight As Byte             '1 = an; 0 = aus. Wird erst durch 
14
                                      'einen LCD-Befehl umgesetzt!
15
16
'****************** Initialisierung ***********************
17
18
Ddrb = &B11111111                     'Port B als Ausgangsport
19
Ddrd = &B01110000                     'D4, D5, D6 als Ausgang; Rest als Eingang
20
Portd = &B10001111                    'Eingänge auf high legen
21
22
'Config Portc.5 = Output              'zur Probe
23
'Config Portc.4 = Output
24
25
Config Scl = Portc.5                  'Konfigurieren von I2C
26
Config Sda = Portc.4
27
28
Config Lcd = 16 * 2                   'nicht unbedingt nötig
29
Config I2cdelay = 1
30
Initlcd
31
Waitms 500                            'warte bis Kondensator bei Ta0
32
                                      'geladen, auch für LCD-Init!
33
34
'**********************************************************
35
'******************** Hauptprogramm ***********************
36
37
Cls
38
Lcd "Hello world!"
39
Wait 1
40
Lcd_backlight = 0
41
Locate 2 , 1
42
Lcd "2. row..."
43
Wait 2
44
Lcd_backlight = 1
45
Locate 1 , 1                           'Damit Backlight-Zustand an LCD übermittelt wird
46
End

von mat-sche (Gast)


Lesenswert?

Hi,
Schau mal wie die Adresspins A0-2 vom PCF beschalten sind und um welchen 
PCF (A oder nicht) es sich handelt. Somit kannst du die Adresse vom LCD 
herausfinden....
Weiterhin gibt es auch eine weitere Lib, bei dieser kannst du auch die 
Hintergrundbeleuchtung schalten.

von Funker Fritz (Gast)


Lesenswert?

Welche Schnittstelle wird denn zur Ansteuerung benutzt?
I2C oder der übliche LCD parallel Bus?
Beide Ansteuerungen lassen sich nicht mixen.
LCD und config LCD nutzen jedenfalls nicht I2C.

von Manfred (Gast)


Lesenswert?

Karl schrieb:
> Der Hersteller schreibt auf der Seite das die Adresse des Display`s 0x27
> ist aber sie funktioniert meines erachtens nicht.
Was Du erachtest, ist wenig Wert:
Es gibt im Netz I2C-Scanner fertig für Arduino zu finden, die die 
gefundenen Adressen seriell ausgeben, musste ich schon mehrfach 
benutzen.

Ein Blick in das Datenblatt des PCF8574 oder -A erklärt die Adressen, 
bei NXP auf Seite 5 recht übersichtlich.

Schreibt man in Bascom 27 oder besser 39 bzw. 0x27, weil es hex ist?

von Manfred (Gast)


Lesenswert?

Karl schrieb:
> 'Adresse des I2C-LCDs (orginal 78)
Na Klasse, im Datenblatt von Texas Instruments S.13 gibt es den PCF8574 
tatsächlich mit der Adresse 78 / 0x4E :-(

Wie gehabt: Scanner!

von Karl (Gast)


Lesenswert?

H27 1Bit nach links geschoben ergibt?

I2C Adressen in Bascom sind 8Bit Adressen

von Karl (Gast)


Lesenswert?

mat-sche schrieb:
> Schau mal wie die Adresspins A0-2 vom PCF beschalten sind und um welchen
> PCF (A oder nicht) es sich handelt.

Es ist ein PCF 8574T und die Kontakte bei A0-2 sind offen


Funker Fritz schrieb:
> Beide Ansteuerungen lassen sich nicht mixen.
> LCD und config LCD nutzen jedenfalls nicht I2C.

Die Libs von YwRobot unterstützen die LCD Befehle


Manfred schrieb:
> Es gibt im Netz I2C-Scanner fertig für Arduino zu finden, die die
> gefundenen Adressen seriell ausgeben, musste ich schon mehrfach
> benutzen.

Manfred schrieb:
> Na Klasse, im Datenblatt von Texas Instruments S.13 gibt es den PCF8574
> tatsächlich mit der Adresse 78 / 0x4E :-(


Ja habe ich jetzt auch einen Scanner benutzt und herausgefunden das 
Tatsächlich die Adresse 78 stimmt. Musste ihn vorher noch auf Serielle 
Ausgabe umändern.
Nun Läufts auch mit der Lib und den Bascom LCD Befehlen.
Hier der Aktuelle Code:

$regfile = "m328pdef.dat"                  'Arduino Nano V3
$crystal = 16000000                        '16 MHz
$lib "YwRobot_Lcd_i2c.lib"                 'YwRobot Treiber für LCD

$hwstack = 64
$swstack = 10
$framesize = 40


'**********************************************************
'******************* 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 ***********************

Config Scl = Portc.5                       'Konfigurieren von I2C
Config Sda = Portc.4

Config Lcd = 16 * 2                        'nicht unbedingt nötig
Config I2cdelay = 1
Initlcd
Waitms 500                                 'warte bis Kondensator bei 
Ta0
                                           'geladen, auch für LCD-Init!

Lcd_backlight = 1

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

Cls
Lcd "Hallo Welt"
Wait 1
Locate 2 , 1
Lcd ":)"
Wait 2
Locate 1 , 1
End

von Manfred (Gast)


Lesenswert?

Karl schrieb:
> Ja habe ich jetzt auch einen Scanner benutzt und herausgefunden das
> Tatsächlich die Adresse 78 stimmt.
Sehr schön - und wäre selbsttätig schneller zu lösen gewesen als hier zu 
schreiben :-)

> Nun Läufts auch mit der Lib und den Bascom LCD Befehlen.
> Hier der Aktuelle Code:

> Const Pcf8574_lcd = 78       'Adresse des I2C-LCDs
Womit wir nun wissen, dass der Eintrag auch bei Bascom Dezimal 
erfolgt. Wäre es ein Philips mit $27 gewesen, hätte also 39 in der 
Deklaration stehen müssen. Nur mal so ... in diese Falle bin ich selbst 
schon reingelatscht.

von Karl (Gast)


Lesenswert?

Ok, dafür benutze ich immer den Windows "Rechner" und stelle ihn auf 
"Programmierer" und übersetze die Zahlen in das Format das ich brauche 
aber danke für den Tipp :)

Generell noch ein Danke an alle.

von noname (Gast)


Lesenswert?

Halli hallo, auch ich habe mehrere Stunden gebraucht den Fehler zu 
finden.
Eigentlich den ganzen lieben Tag, (Vormittags und Nachmittags) bis in 
die Abendstunden hinein.
Gibt es denn eine Fehlermeldung bein Compilieren ? oder nicht.
Ich dachte die Funduino Boards wären defekt was sie aber nicht sind.
Ich hatte mehere Fehlerquellen. Ich erinner mich vage:
1. Code compilierte mit arduino-cli, aber nicht mit der Arduino - IDE

Lösung zu eins war den Code um zu schreiben. Insbesondere gab es 
Fehlermeldungen beim for-loop für ein Array, um "pinMode" auf OUTPUT zu 
setzen.
überprüfen ob nicht pinMode ausversehen doppelt in Code vorhanden ist. 
(Außerhald des Loops vllt auch, wird zwar nicht für das LCD gebraucht, 
aber Fehler ist Fehler.
Versuche die Zeilen pinMode(9,1), etc.., anstelle vom LOOP.
der Fehler liegt vllt bein abrufen der Array-Elemente , im FOR-LOOP.

Hatte seltsame Meldungen : wie "invalid conversion from int* to u8int_t" 
(IDE)
NEW ISO declaration im LOOP , oder so..., dann int aus dem for-loop 
nehmen, und voranstellen.

2. Ein loses SCA/SCL Kabel , das gar nicht auffällt weil des Display 
trotzdem leuchtet und einen Balken zeigt.

3. Verwechselung verschiedener Display Typen (16x2 und 20x4)

Hoffe dies hilft.

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.