LCD und i2C Problem

Gast #2996170
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
Angehängte Dateien:
Gast #2996290
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
Angehängte Dateien:
Gast #2996786
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
Gast #2996820
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.
Gast #2997095
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

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