LCD (Funduino) ansteuern mit Bascom

Gast #4876167
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
Angehängte Dateien:
Gast #4876186
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.
Gast #4876198
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?
Gast #4876604
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
Gast #4876670
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.
Gast #4876892
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.
Gast #6145191
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren