Forum: Mikrocontroller und Digitale Elektronik LCD und i2C Problem


von eddi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

Ich habe glaube ich ein Verständnisproblem zu folgendem Thema.

Es ist an einem Arduino Leonardo ein HD44780 kompatibles LCD Display 
dran und ein RTC Modul das über I2C (pins SDA und SCL) angeschlossen 
ist.

Das RTC Modul kann ich einwandfrei über die serielle Ausgabe auslesen.
Nun wollte ich das Ganze auch über das LCD Display ausgeben.

Anfangs probierte ich es mit diesem Code:
http://napalmpiri.info/2012/11/16/codingcolor-arduino-rtc-lcd-clock-with-chronodot/

Der hat aber nur Sonderzeichen ausgegeben.
Das LCD Display funktioniert auch einwandfrei an dem kann es nicht 
liegen.

Ich konnte nun das Problem auf folgende zeilen eingrenzen:

 #include <Wire.h>
 #include <LiquidCrystal.h>
 #include <SoftwareSerial.h>


 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup() {
  lcd.begin(16, 2);
   lcd.print("Vor wire");  // >> lcd gibt Text normal aus
   delay(2000);
   lcd.clear();
   Wire.begin();
   //Serial.begin(57600);
   lcd.print("Nach wire");   // >> LCD gibt nur Sonderzeichen aus
   delay(2000);
   lcd.clear();

 }

Liegt es an der wire lib?
Vielleicht weiss jemand woran das liegen kann?

lg eddi

von SNT (Gast)


Lesenswert?

LCD = liquid crystal display

von John (Gast)


Angehängte Dateien:

Lesenswert?

Es sieht so aus, als ob nach
1
   Wire.begin();
2
   //Serial.begin(57600);
die zwei oberen Bits, deiner 4-Bit-Ansteuerung, immer auf "1" stehen.

  ASCII       Ausgabe
N 0100 1110   1100 1110
a 0110 0001   1110 1101
c 0110 0011   1110 1111
h 0110 1000   1110 1100
  0010 0000   1110 1100

Gruß
John

von eddi (Gast)


Lesenswert?

Hallo John

Danke für deinen tipp. Aber wie kann ich das nun umgehen ?

LG eddi

von John (Gast)


Lesenswert?

An welchen Pins ist das LCD angeschlossen?

Im von dir verlinkten Code teilen sich LCD und TWI Pin4 und Pin5.
1
/*
2
 Code under (cc) by Manuel Gonzalez, www.codingcolor.com
3
4
http://creativecommons.org/license/cc-gpl
5
6
 Pins 12, 11, 5, 4, 3, 2 to LCD
7
 Analog pins 4 (SDA),5(SCL) to Chronodot
8
 Pins 6 (hour), 7(min) buttons
9
Arduino 1.0 conversion from d. www.napalmpiri.info
10
*/
11
12
#include <Wire.h>
13
#include <LiquidCrystal.h>
14
15
const int hourButtonPin = 6;
16
const int minButtonPin = 7;
17
18
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Ich kenne mich mit Arduino nicht aus. Es wird aber wohl so sein, dass 
Wire.begin() die entsprechende Pins als Eingang definiert und durch die 
Pull-Ups im LCD sind diese Pins dann immer auf high.

Es könnte funktionieren, wenn du vor jedem LCD-Befehl die zwei Pins als 
Ausgang definierst, und vor jedem TWI-Befehl wieder als Eingang. Das ist 
aber keine schöne Lösung.
Meine Empfehlung wäre für das LCD andere, noch freie, Pins zu verwenden.

Gruß
John

von John (Gast)


Lesenswert?

Ich sehe gerade, dass das falsch ist.
Das von Dir verlinkte Beispiel ist ein Adruino UNO. Analog 4 und 5 sind 
andere Pins als Digital 4 und 5.

Beim Adruino Leonardo scheinen aber SDA und SCL gleich mit Pin 2 und Pin 
3 zu sien.

von eddi (Gast)


Lesenswert?

Hallo John

ja beim ardurino leonardo gibt es sogar zwei eigene pins für i2c -sda 
und scl.


lg eddi

von eddi (Gast)


Lesenswert?

Hallo John,

Ich habe den "Fehler" gefunden.

Offenbar benutzt die Methode Wire.begin() nicht nur die analogen Pin's 4 
und 5 sonder auch die digitalen Pins 4 und 5.
Nach dem ich nun das LCD auf 9,8,7,6 gesetzt habe funktioniert es.

danke john - du hast mich auf die idee gebracht es so umzustellen.

lg eddi

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.