Habe folgende Frage: Ich habe mir ein kleines LCD-Display zugelegt (Powertip PC1604A-P3), Habe mir mit einem PIC18F46K22 eine Echtzeituhr mit einem Uhrenquarz an Timer0 in C gebastelt. Jetzt möchte ich die Uhrzeit auf dem LCD-Display ausgeben. Gibt es Bibliotheken in C die die Ausgabe erleichtern oder muss ich sie mir selbst programmieren und wie funktioniert das in C? Wie funktioniert auch die Ausgabe? Dank im Vorraus
Patrick Schwarz schrieb: > Jetzt möchte ich die Uhrzeit auf dem LCD-Display ausgeben. > Gibt es Bibliotheken in C die die Ausgabe erleichtern oder muss ich sie > mir selbst programmieren und wie funktioniert das in C? Du kannst einen String ausgeben?
1 | char OutString[20] = "Hallo World"; |
2 | lcd_string( OutString ); |
Dann kannst du im einfachsten 'Faulsein-Fall' zb das hier machen
1 | char OutString[20]; |
2 | |
3 | sprintf( OutString, "%02d:%02d - %02d", (int)Hour, (int)Minute, (int)Second ); |
4 | lcd_string( OutString ); |
sprintf ist ein Universal-Arbeitspferd und demenstprechend langsam und umfangreich. Wenn Programmgröße kein Problem darstellt und auch die Laufzeit kein Thema ist, kann man es benutzen. Wenn nicht, dann macht man sich eben selbst eine Funktion dafür.
Hi, du könntest den Quellcode von http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung nehmen. Musst allerdings die verwendetet Datentypen anpassen (also z.B. "unsigned char" anstatt "uint8_t") und du musst dir die beidne delay Funktionen (_delay_ms(), delay_us() ) noch schreiben. Hab ich bei meinem aktuellen pic Projekt mit nem PIC18F26K20 auch so gemacht und es funktioniert einwandfrei. MfG Elko
>Du kannst einen String ausgeben? > char OutString[20] = "Hallo World"; > lcd_string( OutString ); >Dann kannst du im einfachsten 'Faulsein-Fall' zb das hier machen > char OutString[20]; > sprintf( OutString, "%02d:%02d - %02d", (int)Hour, (int)Minute, >>>>>>>>(int)Second ); > lcd_string( OutString ); Wie zentriere ich dann die Schrift d.h. wie füge ich zusätzlich Leerzeichen ein? (Tut mir leid ich habe von der Ausgabe auf ein LCD Bildschirm wirklich keine Ahnung)
Mit time.h, conio.h und stdio.h kannst Du Dir was basteln ... dann fehlt aber noch der Treiber und der dürfte knifflig werden. Hier findest Du die Standard-Headerdateien: http://www2.informatik.uni-halle.de/lehre/c/c_header.html Für den 18F46K22 wirst Du selbst eine Headerdatei schreiben müssen, siehe auch: http://www.ccsinfo.com/forum/viewtopic.php?t=30964 Der hat einen 18F452 verwendet.
Header Dateien sind nicht das Problem ich besitze in C die Header Datei von PIC18F452, PIC18F4550, PIC18F46K20 und PIC18F46K22 Die Modifizieung fällt mir daher nicht schwer! Viel mehr ist das Problem, dass ich die Logik hinter der LCD-Ansteuerung verstehe!
> Hab ich bei meinem aktuellen pic Projekt mit nem PIC18F26K20 auch so > gemacht und es funktioniert einwandfrei. das ist dann aber eher Zufall bzw. ungewollte Kompatibilität des obigen Pics mit der avr.h Headerdatei.
> Viel mehr ist das Problem, dass ich die Logik hinter der LCD-Ansteuerung > verstehe! Die sind ja in lcd-routines.h aus http://www.mikrocontroller.net/articles/AVR-GCC-Tu... relativ verständlich dokumentiert. Allerdings mußt Du sie auf Dein Display anpassen, wenn Du ein Datenblatt zum Powertip PC1604A-P3 hast ?
Es ist nicht ein gewöhnliches Display, denn es ist 16x4, die meisten sind 20x4 oder 16x2 http://www.farnell.com/datasheets/50577.pdf aber ich habe bei einem Beispiel gesehen, dass dies nicht viel ändert nur 3-4 Änderungen im gesamten Code
> aber ich habe bei einem Beispiel gesehen, dass dies nicht viel ändert > nur 3-4 Änderungen im gesamten Code Im Prinzip kannst Du die Headerdateien aus dem obigen Projekt für den HD44780 ansatzweise (wobei die Betonung auf Ansatz liegt) übernehmen, da dieses Display ja nur eine 5x8 Punktmatrix bringt und dann heißt es tüfteln und Anpassungen schreiben ... oder es hat schon mal jemand anderes mit Deinem Display was versucht.
ich weiß nicht ob es hilft, aber es scheint mit Deinem Display schon Ansteuerungsversuche gegeben zu haben: http://esd.et.ntust.edu.tw/downloads/2012_Embedded_system/doc3adc0c9faa1f4.pdf
Patrick Schwarz schrieb: > Wie zentriere ich dann die Schrift d.h. wie füge ich zusätzlich > Leerzeichen ein? Das ist jetzt aber weniger eine Frage der LCD Ausgabe, sondern eine Frage dessen wie "gut" deine C-Kentnisse bzw. deine Fähigkeiten in grundlegender Mathematik sind, die jeder Grundschüler in der 3. Klasse beherrscht. > (Tut mir leid ich habe von der Ausgabe auf ein LCD > Bildschirm wirklich keine Ahnung) Es ist ganz einfach: Da sind 16 Ausgabepositionen pro Zeile. An jede Ausgabeposition kannst du ein Zeichen malen lassen. Wenn du also einen Text, der zum Beispiel 12 Zeichen lang ist, auf 16 Ausgabepositionen so ausgeben willst, dass er zentriert in der Mitte steht, in welcher Spalte musst du dann mit der Ausgabe anfangen, damit sich das genau so ausgeht, wie du das haben willst und der 12-Zeichen lange Text in der Mitte auftaucht? > Viel mehr ist das Problem, dass ich die Logik hinter > der LCD-Ansteuerung verstehe! Es ist genau dieselbe Logik, mit der man auf karriertem Papier "Muster" macht, indem man in einige Kästchen ein 'x' malt und den Inhalt von anderen Kästchen dadurch 'löscht', in dem man mit TippEx ein 'Leerzeichen' drübermalt. Alles darüber hinausgehende, das du gerne hättest, ist dein Bier und wird von dir programmiert. Und im Regelfall reicht das auch. Denn auf so einem Text-LCD kann man sowieso keine wahnsinnig aufregende Grafiken machen. Das geht schon rein aus technischen Gründen nicht.
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.