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
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
Hallo John Danke für deinen tipp. Aber wie kann ich das nun umgehen ? LG eddi
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
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.
Hallo John ja beim ardurino leonardo gibt es sogar zwei eigene pins für i2c -sda und scl. lg eddi
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.