Hallo zusammen, mein Problem dürfte sicherlich nicht wenigen bekannt sein. Leider blicke ich aber als "frischer" Mikrocontroller-Programmierer noch nicht ganz dahinter. Zum Hintergrund: Ich bin in einer Technikerschule und brauche für mein Abschlussprojekt unbedingt eure Hilfe in einem Thema, dass viele sicher in- und auswendig kennen. Die Zeit drückt und bekanntlich klappt nichts auf Anhieb. Hardware: -ATmega644 (soll nach erfolgreichem Ansteuern des LCDs über TWI durch ATmega8 ersetzt werden) -folgender Umsetzer fürs LCD: http://www.ebay.de/itm/221717504003?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT (PCF8574) -folgendes LCD-Modul: http://www.ebay.de/itm/111536130896?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT Situation: Derzeit realisiere ich ein L-Meter (Induktionsmessung über Schwingkreisverstimmung) mittels einem ATmega644 und gebe diverse Texte und natürlich den Messwert über ein LCD aus (direkt angeschlossen an den µC). Problem: Da ich auf einen ATmega8 umsteigen muss und mir somit natürlich Pins verloren gehen benötige ich eine Möglichkeit die Pins die ich für das LCD benötige zu verschlanken. Hier kam mir eben genau die Idee des TWI/I2C (besteht da überhaupt ein Unterschied?). Wie ihr seht habe ich noch keine Erfahrung mit diesem Bus und brauche deswegen Hilfe. Wie realisiere ich nun die Ansteuerung des LCD über TWI? Ich weiß das ich für den Master als auch den Slave Adressen vergeben muss und habe bereits einige Threads hier im Forum gelesen. Leider muss ich sagen das vieles nicht gerade Anfängergerecht ist sondern schon Kenntnisse in dieser Materie voraussetzen (zumindest erscheint es mir so). Könnte jemand mir anhand meines Codes den ich beigefügt habe behilflich sein diese Ansteuerung zu realisieren? Sollte ich weitere Informationen liefern müssen bitte nicht zögern mich das wissen zu lassen - ich bin dankbar für jede Hilfe. Vielen Dank! Gruß atmega644
@ Stefan S. (atmega644) >kennen. Die Zeit drückt und bekanntlich klappt nichts auf Anhieb. ;-) >-folgender Umsetzer fürs LCD: >Ebay-Artikel Nr. 221717504003 >(PCF8574) Bekannt. >-folgendes LCD-Modul: >>Ebay-Artikel Nr. 111536130896 Dito. >Wie realisiere ich nun die Ansteuerung des LCD über TWI? Man muss den parallelen Datentransfer über die IOs dann über I2C machen. Der Rest bleibt gleich. >dieser Materie voraussetzen (zumindest erscheint es mir so). Könnte >jemand mir anhand meines Codes den ich beigefügt habe behilflich sein >diese Ansteuerung zu realisieren? Das ist ein Aufgabe för den Schööööler! Beitrag "Re: I2CLCD Library für HD44780 LCDs" Lesen, Nachdenken, Verstehen.
Für die Nutzung des eBay-Artikels musst Du Deine Funktion lcdcall nicht nur auf i2c, sondern wichtig!! auch auf den 4-bit Modus (siehe Doku) umschreiben. Infos zu dem Modul, Adressen usw gibt es u. a. hier: http://arduino-info.wikispaces.com/LCD-Blue-I2C (für Arduino, aber das ist auch irgendwie C ;-)
Stefan S. schrieb: > Die Zeit drückt und bekanntlich klappt nichts auf Anhieb. So ist es im bösen RL praktisch immer. Gewöhn' dich schonmal d'ran. Wirklich geeignet für's Berufsleben ist nur jemand, der trotz praktisch unlösbarer Situation und unter massivem Stress doch noch rechtzeitig eine "Lösung" findet, so dirty sie auch sein mag. Der Rest ist unbrauchbarer Menschenmüll. So jedenfalls die einhellige Ansicht aller Damager. > Da ich auf einen ATmega8 umsteigen muss und mir somit natürlich Pins > verloren gehen benötige ich eine Möglichkeit die Pins die ich für das > LCD benötige zu verschlanken. Das geht nur sehr beschränkt. Du kannst hier genau nur maximal vier Pins einsparen. Die lassen sich an anderer Stelle oft sehr viel einfacher einsparen. > Sollte ich weitere Informationen liefern Für was um aller Welt hast du all die anderen 26 Portpins des Mega644 verquast? Bzw. die 20 Portpins des Mega8? Denn tatsächlich hat der Mega8 wirklich nur 6 Portpins weniger als der Mega644.
Jetzt habe ich schon einige Informationen bekommen. Vielen Dank dafür. Leider aber sehe ich den Wald vor lauter Bäumen nicht. Mir ist nicht bewusst wie ich diese Änderungen bewerkstelligen kann, da mich die die Quellcodes und die Infos etwas überfordern. Könnte mir da jemand praktischer zur Seite stehen wie ich das genau umsetze? Danke. PS: Die Pins sind belegt für diverse Ausgänge (Relais) und auch eine eventuelle spätere CANopen-Einbindung die ich aber schon skeptisch sehe. Nichts desto trotz: Ein Problem nach dem anderen. PPS: Wieso kann ich nur 4 Pins einsparen wenn ich statt den üblichen 11 Pins nur noch 2 benötige?
:
Bearbeitet durch User
Das Programm im Anhang hast Du geschrieben, da brauchst Du doch keine weitere Hilfe?
Stefan S. schrieb: > Da ich auf einen ATmega8 umsteigen muss und mir somit natürlich Pins > verloren gehen benötige ich eine Möglichkeit die Pins die ich für das > LCD benötige zu verschlanken. Hier kam mir eben genau die Idee des > TWI/I2C (besteht da überhaupt ein Unterschied?). Wie ihr seht habe ich > noch keine Erfahrung mit diesem Bus und brauche deswegen Hilfe. Wenn Du schon umsteigen musst, dann wenigstens auf einen Mega88. Gleiches Pinout, aber mehr Features und weniger Stromverbrauch. Zu Deinem Display: Hast Du noch andere I2C-Dewices? Wenn nicht, mach Dir die Sache einfacher. Nimm einen 74HC595. 8 Bit Schieberegister. Du hast: - Die Ausgänge Qa...Qh (Pin 15,1..7). Kommen an die Datenleitungen des Displays. - seriellen Dateneingang. Pin 14. Zum AVR - Output Enable. Pin 13. Auf GND setzen - Clear. Pin 10. Auf VCC setzen - Schiebetakt. Pin 11. Zum AVR - Ausgabetakt. Pin 12. Zum AVR RW von Display auf 0 setzen (nur schreiben) Funktion: Schiebetakt und Ausgabetakt auf 0. E vom Display auf 0. für jedes Datenbit: { | Datenbit auf Pin vom AVR ausgeben -> Serieller Dateneingang | Schiebetakt auf 1 | Schiebetakt auf 0 } Ausgabetakt auf 1 Ausgabetakt auf 0 RS vom Display setzen E vom Display auf 1 E vom Display auf 0 Das wars. Wenn Du einen Pin sparen willst, kannst Du den Schiebetakt auch für RS vom Display nutzen. Das funktioniert deswegen, weil der Ausgabetakt das Datenwort vom Schieberegister in das Ausgaberegister übernommen hat. Was also mit dem Schieberegister passiert, ist egal. Du kannst also anschließend den Pin benutzen, um RS zu setzen. Hier machen sie es etwas anders, indem sie den 4-Bit Modus verwenden und RS mit aufs Schieberegister tun. Kann man auch machen, spart einen Pin, ist aber in der Programmierung etwas komplizierter. http://embedded-lab.com/blog/why-pay-for-serial-lcds-when-you-can-make-your-own/ fchk PS: und wenn Du alles mit nur einem Pin machen willst: http://romanblack.com/shift1.htm
:
Bearbeitet durch User
Um die Frage zu beantworten... ja ich habe das selber mir mühselig zusammen programmiert (natürlich auch unter Zuhilfenahme anderer Projekte und Beispiele sowie Artikel von hier) und nein wie man sieht bekomme ich diese Sache nicht alleine hin und sehe den Wald wirklich vor lauter Bäumen nicht. Zum Beispiel habe ich meine LCD Funktionen ja nicht ausgegliedert als .h bzw. .c. Es ist Teil meiner L-Meter.c und das verwirrt mich jetzt zum Beispiel schon wenn es nun eine extra Datei (.c und .h) für das LCD gibt. Solche wahrscheinlich eher grundlegenden Sachen beherrsche ich noch nicht so wie ihr. Ich bin wie gesagt erst seit kurzem beim Microcontroller-programmieren angelangt. Auch habe ich jetzt viele sicher gute Ideen und Ansätze bekommen, aber weiß gar nicht welchen ich am besten verfolgen sollte. Ihr seid fähig sowas "mal eben" umzusetzen da gebe ich die Hoffnung nicht auf das irgendjemand sich die Zeit - und vor allem wohl die Nerven - mir zu einer Lösung zu verhelfen. Prinzipiell habe ich nur dieses eine LCD, aber ich würde gerne dennoch beim TWI bleiben (auch um für späteres ein funktionierendes Beispiel zu haben). Zudem habe ich ja bereits die Komponenten. Im Prototyp den meine Gruppe dann vorstellen wird, wird der PCF8574 zwar auf einer eigenen Lochrasterplatine zusammen mit den anderen Komponenten verbaut sein, aber die Ansteuerung sollte ja die selbe bleiben.
@Stefan S. (atmega644) >Zum Beispiel habe ich meine LCD Funktionen ja nicht ausgegliedert als .h >bzw. .c. Es ist Teil meiner L-Meter.c und das verwirrt mich jetzt zum >Beispiel schon wenn es nun eine extra Datei (.c und .h) für das LCD >gibt. Solche wahrscheinlich eher grundlegenden Sachen beherrsche ich >noch nicht so wie ihr. Ist nicht so schlimm. Das kriegt man auch in einer Datei hin. Wenn gleich es eine gute Übung ist, den Kram lehrbuchgerecht auf mehrere Dateien aufzuteilen. >Auch habe ich jetzt viele sicher gute Ideen und Ansätze bekommen, aber >weiß gar nicht welchen ich am besten verfolgen sollte. Du mußt in Software-Schichten denken und arbeiten. https://de.wikipedia.org/wiki/OSI-Modell Der Artikel klingt erstmal sehr kompliziert und wissenschaftlich, in deinem Beispiel ist das alles deutlich einfacher. Es gibt bei deiner LCD-Ansteuerung im wesentlich 3 Schichten. Oberste Schicht. Dein Anwenderprogramm (Osi Layer 7), das will irgendwelche Anzeigen auf das LCD bringen. Dazu greift es NUR auf Funktionen auf den nächsten Layer zu. An deinem Programm und seinen Ausgaben musst du NICHTS ändern! Die oberen Funktionen für die LCD Steuerung (Osi Layer 3). Dazu gehören lcdgotoxy, lcdwrites, lcdinit und die meisten anderen LCD-Funktionen. Diese stellen der höheren Schicht komfortable Funktionen zur Verfügung. Hier musst du NICHTS ändern! Eins weiter unten ist OSI Layer 2. Die greift direkt auf die Hardware zu und steuert auf unterster Ebene die Datenübertragung. Dazu gehört bei dir nur lcdcall. DAS musst du auf I2C ändern! Sonst nichts! Denn dort wird ein Kommando- oder Datenbyte an das LCD geschickt. Jetzt noch über viele Drähte parallel, später über I2C seriell. Das ist einfacher als es im Moment klingt. Das Zauberwort heißt 4 Bit Modus ;-) Ganz unten kommt OSI Layer 1, die Bitübertragungsschicht. Im Moment sind das deine IO-Ports, welche direkt mit dem Mikrocontroller verbunden sind. Nach der Änderung ist das dann I2C. Bei der Umsetzung hilft die eine fertige I2C-Bibliothek, Peter Fleury ist hier das Zauberwort. So, jetzt habe ich eigentlich schon viel zuviel verraten ;-) P S Zeichne dir die Schichten mal wirklich auf ein Blatt Papier und zeichne die Verbindungen der Funktionen auf, welche Funktion ruft welche anderen Funktionen auf.
Hallo nochmal, vielen Dank für die vielen Antworten und das Ihr euch auch die Mühe macht mehr als bloß 3 Zeilen zu schreiben. Ich habe vor dieses Problem in mehreren Schritten zu lösen. Das erste wäre es den 4-Bit Modus des LCD zu verwenden. Dazu habe ich von Peter Fleury das aktuelle LCD Programmbeschafft und damit experimentiert. Vorteil: Er hat bereits den 4-Bit Modus dort aktiviert und so muss ich mich nicht darum kümmern. Folgendes ist mir aufgefallen: Wenn ich das LCD mit PORTA als Datenleitung (Pins 4-7) und PORTB 0,1,2 als E,RS,R/W dann funktioniert es (nachdem ich die Warzezeiten etwas erhöht hatte, musste experimentieren, da ich kein Datenblatt vom LCD habe). Mein neues Problem für diesen Teilabschnitt: Ich würde aber viel lieber PORTD 2,3,4 verwenden für die 3 Steuerleitungen weil ich z.B. den T1 Eingang für meinen Counter brauche. Jedoch funktioniert dies nicht wenn ich die Pins und Ports entsprechend in der lcd.h Datei anpasse. Könnte mir jemand vielleicht helfen wieso das mit diesen Pins nicht funktioniert? Oder geht das mit dieser Library nicht? Im Anhang findet ihr mein Test-Programm (Atmel Studio 7). Vielen Dank euch nochmal. Stefan
Nachtrag: Innerhalb des PORTS der die Datenleitungen beinhaltet (PORTA) ist eine Verwendung der freien Bits als Steuerleitungen ebenfalls möglich. Das hilft mir zwar weiter, aber die Frage warum es mit PORTC oder PORTD nicht funktioniert bleibt bestehen. Danke.
Und der dritte Post von mir. Mir ist es nun gelungen das LCD mit Peter Fleurys Library komplett mit PORTA anzusteuern - das reicht mir vorerst. Selbstverständlich logischerweise im 4-Bit Modus (sonst würde ja der PORTA nicht reichen). Nun will ich das ganze endlich auf I2C/TWI hiefen. Ich habe mir die beiden Libraries LCD und I2C von Peter Fleury zusammengeschmissen, jedoch scheitere ich daran dies jetzt sinnvoll zu vereinen. Könnte mir vielleicht jemand kurz zur Hand gehen wenn er ein wenig Zeit und Erbarmen hat und mir die main nur so umschreiben das ich über TWI (ATmega 644A , PORTC Pin 0 und 1) eine einzige Meldung aufs LCD schreibe und es mir dann nochmal hochladen? Ich lerne scheinbar an fertigen (funktionierenden) Beispielen am besten. Die Adresse des PCF8574 habe ich wenn ich es richtig verstanden habe auf 0x40 gelassen (keine Brücke gesetzt von A0, A1 und A2). Ich tue mich etwas schwer... wie wäre die Adresse wenn alle geschlossen wären? Die LCD-Dateien funktionieren wie gesagt so wenn ich direkt anschließe! Es hatte hier auch schon einige Helfer auf fertige I2C/LCD Lösungen verwiesen. Auch die habe ich nicht ans Laufen bekommen obwohl ich die Pin-Belegung vom PCF8574 durchgemessen habe (diese habe ich in der lcd.h angepasst (RS und E vertauscht im Vergleich zu meiner urspünglichen Beschaltung, aber das spielt ja keine Rolle). Dennoch hatte ich keinen Erfolg. Daher mein Wunsch und die Hoffnung das jemand mir helfen könnte die TWI mit der LCD zusammenzubringen wo ich weiß das diese im 4-Bit Modus funktioniert. Bin für jede Hilfe dankbar. Gruß
:
Bearbeitet durch User
@ Stefan S. (atmega644) >zusammengeschmissen, jedoch scheitere ich daran dies jetzt sinnvoll zu >vereinen. Könnte mir vielleicht jemand kurz zur Hand gehen wenn er ein >wenig Zeit und Erbarmen hat und mir die main nur so umschreiben das ich >über TWI (ATmega 644A , PORTC Pin 0 und 1) eine einzige Meldung aufs LCD >schreibe und es mir dann nochmal hochladen? Nö. Das ist ja deine Aufgabe. > Ich lerne scheinbar an >fertigen (funktionierenden) Beispielen am besten. Dan schua dir das an, dort ist alles schon mal gemacht worden und es funktioniert. Beitrag "Re: LCD an ATmega644 (später ATmega8) mittels TWI/I2C (Anfängergerecht)" >Die Adresse des PCF8574 habe ich wenn ich es richtig verstanden habe auf >0x40 gelassen (keine Brücke gesetzt von A0, A1 und A2). >Ich tue mich etwas schwer... wie wäre die Adresse wenn alle geschlossen >wären? Ja was wohl? welche Bit kann man durch A0-A2 verändern? >Beschaltung, aber das spielt ja keine Rolle). Dennoch hatte ich keinen >Erfolg. Dan probier es noch einmal. >Daher mein Wunsch und die Hoffnung das jemand mir helfen könnte die TWI >mit der LCD zusammenzubringen wo ich weiß das diese im 4-Bit Modus >funktioniert. Nö, dann redest du dir nur ein es verstanden zu haben. IN Wahrheit hast du weder was verstanden noch echt hart eine systematische Fehlersuche betrieben. Das gehört zum Lernprozess dazu, auch wenn es ein wenig schwerer als Surfen auf dem Handy ist.
Vielen Dank für die schnelle Antwort auf mein Anliegen. Richtig das ist meine Aufgabe. Nach meinem Dafürhalten ist die Hilfe von jemandem anzunehmen der das mit geschlossenen Augen macht definitiv nicht falsch. Du scheinst genau so einer zu sein denn du bist der jenige aus dem von dir genannten Thread. Ich danke dir für deine Sorge ich würde nicht genug lernen beim Studieren funktionierender Codeschnipsel - jedoch ist meine Programm wie du es oben sehen kannst einzig und allein nur auf diese Art und Weise entstanden. Ich behaupte nicht das alles zu können, dafür müsste ich länger und intensiver damit beschäftigen, aber es funktioniert und ich kann auch später noch genau damit wieder arbeiten und es anhand meiner Kommentare verstehen. Das würde mir schon wesentlich dienlicher sein als - mit Verlaub - die "zarten" Hinweise darauf nochmal genau das zu tun was ich bereits die ganze Zeit erfolglos getan habe. Irgendwann nämlich fällt mir einfach nichts mehr ein was ich noch tun könnte - da sind wir wieder bei dem Punkt das ich das eben nicht schon gemacht habe und nicht von meinen Kommentaren, Erinnerungen oder funktionierenden Codeschnipseln profitieren kann. Zum Thema wieder zurück: Wenn ich dich als Wissensträger fragen dürfte: 1. Stimmt meine Annahme der Adresse 0x40 denn? Ich habe nämlich sowohl 0x40 als auch 0x20 in den Quellen gelesen und bin verwirrt. 2. Könntest du mich zumindest Schritt für Schritt zum Erfolg leiten? Wie würdest du bei eingehender Betrachtung meines Beispielprogramms nun vorgehen? Ich weiß ich muss das LCD irgendwie mit dem TWI initialisieren und dann irgendwie über TWI eine Zeichenausgabe am LCD erwirken. Aber meine Erfahrung bzw. mein Wissen über TWI ist absolut gleich 0 und der eingefleischte µC C Programmierer bin ich auch nicht. Ohne "Händchenhalten" werde ich (so fürchte ich) nicht weiter kommen. Daher nochmal meine Bitte an dich. Bzw.: Da du das Beispiel von dir präferierst und ich auch dort meine Probleme habe würde ich gerne von dir Wissen wo du noch einen Fehler vermuten würdest... was macht gerne mal Ärger was ich nicht bedacht haben könnte? Danke vorweg. Gruß NACHTRAG: Ich habe nun bei dem i2clcd-Beispiel mit der Adresse 0x4E wohl eine Verbindung zum LCD. Allerdings bekomme ich immernoch keine Anzeige. Nur Schwarze Balken. Das einzige was sich bemerkbar macht ist folgendes: Lade ich das Programm in den µC dann geht kurz die HG-Beleuchtung an und wieder aus. Das Display bleibt also jetzt dunkel, und die schwarzen Balken bleiben ebenfalls. Durch die Tatsache das dieses kurze "Aufblinken" beim überspielen des Programms geschieht gehe ich davon aus das ich die richtige Adresse und eine Verbindung habe. Aber leider nicht mehr.
:
Bearbeitet durch User
@ Stefan S. (atmega644) >Richtig das ist meine Aufgabe. Nach meinem Dafürhalten ist die Hilfe von >jemandem anzunehmen der das mit geschlossenen Augen macht definitiv >nicht falsch. Stimmt, aber es sollte Hilfe zu Selbsthilfe sein, kein Vorkauen. >Das würde mir schon wesentlich dienlicher sein als - mit Verlaub - die >"zarten" Hinweise darauf nochmal genau das zu tun was ich bereits die >ganze Zeit erfolglos getan habe. Irgendwann nämlich fällt mir einfach >nichts mehr ein was ich noch tun könnte Was hast du denn bisher EXAKT gemacht? Hast du die Verbindung zwischen AVR und PCF8574 geprüft? Wackelt immer das richtige Bit? >Wenn ich dich als Wissensträger fragen dürfte: >1. Stimmt meine Annahme der Adresse 0x40 denn? Ich habe nämlich sowohl >0x40 als auch 0x20 in den Quellen gelesen und bin verwirrt. Deine Verwirrung ist berechtigt, sie ist bei I2C vorprogrammiert ;-) Beitrag "Re: Kann mir bitte wer beim USI-TWI helfen?" Peter Fleurys Lib nutzt die 8 Bit Adressierung. D.g. Beim Aufruf von i2c_start() muss man selber das RW/Bit mit reinfummeln.
1 | #define FCF8574ADR 0x40 // Adresse im 8 Bit Mode mit RW-Bit =0
|
2 | |
3 | ...
|
4 | |
5 | i2c_start(FCF8574ADR+I2C_WRITE); // Starte Schreibzugriff |
6 | i2c_start(FCF8574ADR+I2C_READ); // Starte Lesezugriff |
>2. Könntest du mich zumindest Schritt für Schritt zum Erfolg leiten? Vielleicht. >Wie >würdest du bei eingehender Betrachtung meines Beispielprogramms nun >vorgehen? Dein Beispielprogramm ist für einen EEPROM. > Ich weiß ich muss das LCD irgendwie mit dem TWI initialisieren >und dann irgendwie über TWI eine Zeichenausgabe am LCD erwirken. Ja. > Aber >meine Erfahrung bzw. mein Wissen über TWI ist absolut gleich 0 und der >eingefleischte µC C Programmierer bin ich auch nicht. Ohne >"Händchenhalten" werde ich (so fürchte ich) nicht weiter kommen. Sieht so aus. >Da du das Beispiel von dir präferierst und ich auch dort meine Probleme >habe würde ich gerne von dir Wissen wo du noch einen Fehler vermuten >würdest... was macht gerne mal Ärger was ich nicht bedacht haben könnte? Wo ist dein Beispiel mit PCF8574? In dem Projekt hier ist nur was mit 24LC02, ein EEPROM. Falsches Projekt erwischt?
Danke nochmal für deine Geduld. Ich war mittlerweile so strubbelig im Kopf das mir nicht mal aufgefallen ist das du noch eine Version 0.12 von dieser i2clcd gemacht hast. Ich hatte ursprünglich die 0.1 von den ursprünglichen Authoren verwendet und irgendwie miteinander vermischt. Diese 0.12 hat mit ein wenig Wartezeiten feilen (China-LCD) etc ganz gut hingehauen. Kompliment übrigens das du die Bugs behoben hast (z.B. P3 für Backlight etc.). Danke für deine Hilfe und diese hervorragende Version. Mein TWI Display funktioniert nun im Testprogramm. Jetzt will ich das ganze in mein eigentliches Programm integrieren und danach auf den ATmega8 (oder 88 ;-)) portieren. Vielleicht werde ich da nochmal eure Hilfe brauchen. Danke nochmal und einen schönen Abend! Gruß Stefan
Na das ging aber schnell mit dem "Lernen" . . . ;-)
Ja das stimmt :). Vielen Dank. Aber eine Sache habe ich noch in dem Zusammenhang: Dort ist die Funktion lcd_gotolc() zu finden. Wenn ich diese verwende kommt nur unsinn bei raus. z.B.: int main(void) { //char string1[] = "Hello World!"; i2c_init(); lcd_init(); lcd_command(LCD_CLEAR); // always set all three parameters (ON/OFF) when using this command lcd_command(LCD_DISPLAYON | LCD_CURSORON | LCD_BLINKINGON); lcd_light(true); //lcd_gotolc(0,0); //lcd_print(string1); lcd_gotolc(0,0); lcd_print_P(PSTR("I2CLCD V0.12")); _delay_ms(3000); lcd_command(LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKINGOFF); } Leider funktioniert die nicht so wie gehofft. Ich bekomme kryptische Zeichen auf dem LCD angezeigt. Auch mit den Parametern 1,1 wird es nicht besser. Kannst du mir sagen was ich da wieder falsch mache? Danke
lcd_gotolc(); geht bei 1,1 los, nicht 0,0. Wenn sonst die Textausgabe funktioniert, sollte diese Funktion auch laufen.
Stimmt wohl...habe wieder das komplette Beispielprogramm genommen und auch das macht kryptische Zeichen. Na super... eben noch funktioniert macht es nun wieder ärger?! Ich werde mal die Hardware weiter prüfen und mich ggf. nochmal melden. Danke. Gruß
Hallo nochmal, mit Blick auf die Uhr stell ich fest das ich irgendwo die Zeit vergessen habe. Aber es lohnte sich. Ich habe bei der Integration von i2clcd in mein Programm nun Fortschritte gemacht. Es funktioniert. ABER nur wenn ich die Portdefinitionen weglasse in der main: DDRD = 0b00011111; DDRA = 0xff; DDRB = 0xf0; DDRC = 0xff; PORTA = 0; PORTD = 0; PORTB = 0; PORTC = 0; Wenn ich diese Zeilen auskommentiere DANN funktioniert es. Wenn ich sie aber aktiv schalte dann nicht. Vielleicht ist es ein übler und lächerlicher Anfängerfehler aber kann mir jemand sagen woran das liegt? Das TWI liegt auf PINC0 und PINC1... auch wenn ich nur die Definitionen für PORTC und DDRC auskommentiere klappt es nicht. Es muss alles auskommentiert werden. Wieso das? Und woher weiß jetzt mein µC was Eingang und was Ausgang ist? Ich meine...das Programm läuft...aber ich würde gerne wissen warum. Gruß Stefan
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.