Autor |
LCD initialisieren Suche nach: lcd (4684) |
|
|
|
|
BID = 454168
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
|
Hi @ all
Ich habe ein Problem ( wer nicht? ).
Ich versuche ein LCD Modul zu initialisieren und komme schon am Anfang damit nicht klar.
Ich möcht das unbedingt lernen.
Ich habe ein myAVR-Board mit dem Zusatz myAVRLCD V2.3
Datenblatt des LCD:
http://www.myavr.de/download/techb_lcd_22.pdf
Was muss ich am Anfang machen?
Ich denke am Anfang werde ich die Struktur auf Seite 7 abklappern.
Stimmt das?
Wenn ja wie kann ich das Register sichern?
Danke für eure Antworten.
Mfg
Rambodischien |
|
BID = 454187
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
|
Hallo,
Das ist ja ein Wald- und Wiesen-Display.
Da hättest du per Suchfunktion komplette Kodes finden können, habe hier mal ein Archiv mit Kode in C hochgeladen.
Ich hänge dennoch, weil heute ein schöner Tag ist, ein Dokument an, wo exakt beschrieben ist, wie initialisiert werden muss.
Da ich nicht weiß, in welcher Sprache du schreibst, kann ich dir nicht groß weiterhelfen.
Es lässt sich aber sehr gut in allen Sprachen machen, ich habe es bisher in Basic (gaaa...nz am Anfang), in AVR-Assembler und C geschrieben.
P.S.: Quelle des Dokuments ist pollin.de.
_________________
|
|
BID = 454223
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Hi
Danke für die Antwort.
Ich schreibe mit AVR-Studio also C
Die Daten was du mir zugeschickt hast sind super aber geht das auch für mein LCD?
Nach dem Datenblatt das ich habe müsste ich es anderst machen oder?
Was meint man mit 3?hins Steuerregister schreiben?
Mfg
Rambodischien
[ Diese Nachricht wurde geändert von: Rambodischien am 30 Aug 2007 14:49 ]
|
BID = 454227
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Hi
Ich bin ein _ das ich nicht die Suche verwendet habe
Ich habe gerade ein Tutorial gefunden:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD
Ich lasse das Thema trotzdem noch offen falls ich wieder einmal mist baue
Danke an alle die sich den Kopf zerbrochen haben.
Mfg
Rambodischien
|
BID = 454231
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
3?h soll bedeuten, dass es egal ist, welchen Wert die Bits 0 bis 3 haben (von 0x0 bis 0xF).
Du kannst also alles von 30h bis 3Fh reinschreiben, das spielt keine Rolle. Es kommt auf die oberen Bits an, ist ja der Vierbitmodus
_________________
|
BID = 454235
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
|
BID = 454471
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Hi @ all
Habe von meinem Lehrer eine Datei gekriegt das auch für ein LCD im 4-Bit Modus ausgelegt ist. Nu funktiuoniert das Programm nicht bei meinem Display. Ich habe auch den PortD zum konfigurieren.
Ich glaube ich habe einen Fehler gefunden bin mir aber dabei nicht sicher:
Anstatt bei lcd_zToLCD sollte doch anstatt PORTD=0b01000000; PORTD=0b00000010; stehen oder?
Und noch eine Frage habe ich unter lcd_init: Was bedeutet diese Kommandos (könnte auch ein Fehler sein)
lcd_zToLCD(0b00000010); // Funktion Set High Byte
_delay_us(200); //Wartezeit 200us
lcd_zToLCD(0b00001000); // Funktion Set Low Byte
_delay_us(200); //Wartezeit 200us
Mfg
Rambodischien
|
BID = 454485
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Ich mag solche Sachen ala 0b10010 nicht.
Das ist zu kompliziert, keiner weiß, was damit gemeint ist.
Aber gut, jeder kann programmieren, wie er will.
Der Kode schränkt nur soweit ein, dass man schlecht die Hardware ändern kann. Zudem wird, soweit ich das beim Überfliegen richtig gesehen habe, das Busyflag nicht benutzt sondern eine fixe Zeit gewartet.
Ich verzichte mal, meinen Kode neu hochzuladen, er liegt ja bereits auf dem Server. Der funktioniert definitiv, und ich habe die Auswertung des Busyflags drin. Man kann die Hardware auch ziemlich schnell ändern, einzige Einschränkung: die Datenbits müssen am gleichen Port und in der richtigen Reihenfolge sein. Der Rest ist egal.
Definiert wird über den Präprozessor.
Link:
https://forum.electronicwerkstatt.d.....47695
_________________
|
BID = 454565
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
WOW
Was ist denn das? Das ist mir viel zu kompliziert da kenn ich mich überhaupt nicht aus.
Kann mir keiner den von mir angeführten Code erklären?
Mfg
Rambodischien
|
BID = 454566
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Doch, könnte ich, aber warum machst du das nicht selbst?
Du hast den Kode, Kenntnisse von C und du hast das Dokument, was ich oben hochlud.
Kommentiert wurde im Kode ja.
P.S.:
Mein Treiber sieht zwar kompliziert aus, aber der Header besteht nur aus Präprozessor...
Da kannst du einmal die Hardwareseitige Beschaltung einstellen (da helfe ich dir gerne, wenn du möchtest) und dort stehen alle Befehle und Befehlseinstellungen (Bitmasken).
Mit lcd_open(); wird alles initialisiert, mit lcd_char kannst du ein Zeichen, mit lcd_data eine Zeichenkette und mit lcd_command ein Kommando senden.
Edit:
bist du dri denn überhaupt sicher, dass du alles Pins korrekt verbunden hast?
Sind sie richtig initialisiert (DDRx-Register richtig beschrieben?)
_________________
[ Diese Nachricht wurde geändert von: DonComi am 31 Aug 2007 22:32 ]
|
BID = 454620
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
Zitat :
DonComi hat am 31 Aug 2007 22:27 geschrieben :
|
Doch, könnte ich, aber warum machst du das nicht selbst?
Du hast den Kode, Kenntnisse von C und du hast das Dokument, was ich oben hochlud.
[ Diese Nachricht wurde geändert von: DonComi am 31 Aug 2007 22:32 ]
|
Leider ist das Problem das ich meine Kentnisse auf C-Basis nicht aussreichen das einzige was ich bisher gamacht habe ist LED´s ein ausschalten mit Tastern und in der Schule Text auf einem LCD ausgegeben habe. Und wir konnten immer diese LCD-Initialisierung des Lehrers benutzen und das möchte ich beibehalten.
Aber leider habe ich überhaupt keinen Plan von der intialisierung.
Mfg
Rambodischien
|
BID = 454664
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
* Kannst du mir bitte dann sagen, an welchen Anschlüssen du E, RS, D4-7 hast?
Dann kann ich mal den Kode genauer anschauen.
Weiterhin:
* DDRx richtig initialisiert? Im Programm deines Lehrers wird dies nach einmaligem Überfliegen nicht erledigt.
* Bist du dir sicher, dass alle Anschlüsse des LCD mit den richtigen des µCs verbunden sind?
(es ist keine blöde Frage, sowas passiert nunmal. Ich hatte schon stundenlange Fehlersuchen etc. und habe gemerkt, dass ich zwei Pins vertauscht hatte... )
_________________
|
BID = 454709
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
|
BID = 454760
Rambodischien Schreibmaschine
Beiträge: 1341 Wohnort: Österreich
|
LCD intialisieren ist gar nicht so einfach
Ich habe den Code, den ich von dem Lehrer gekriegt habe, so gut es geht kontrolliert.
Den Port initialisiere ich im Programm mit DDRD=0x00;
Ich glaube das der Fehler hier liegt:
void lcd_zToLCD(char dataD)
/*************************************************************
Mit Void lcd_home(char dataD) wird EN auf 1 gesetzt, dann erfolt
die Datenausgabe. Mit 0 werden die Daten in das DD-Ram uebernommen.
Zuerst wird das High Byte, dann das Low Byte übertragen.
/-------------------\
/ Daten D7 D6 D5 D4 \
EN---------/ \--------
*************************************************************/
{
PORTD=0b01000000; //EN = 0
_delay_us(200);
PORTD|=dataD; //EN = 1
_delay_us(200); //Wartezeit 100us
PORTD&=0b10111111; //EN = 0
}
Bei mir ist E = PortD 3
Aber ich weiß nicht wie ich das ändern muss.
RS ist immer auf LOW (laut Datenblatt)
Port D4-D7 sind Datenbit 4-7.
Mfg
Rambodischien
|
BID = 454793
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
DDRD=0x00; schaltet alle 8 Pins auf Eingang!
Ich habe doch gesagt, eine 1 schaltet auf Ausgang.
Da bei dir das Busyflag nicht getestet wird musst du nicht einmal die Datenrichtung auf Eingang stellen.
Im Datenblatt stehen solche "unwichtigen" Details auch.
_________________
|