Ich habe ein ML507 evaluation board mit einem PowerPC440 und möchte ein LCD ansteuern. dazu benutze ich folgende anleitung inclusive c programm. es funktioniert auch einwandfrei nur wenn ich das programm nochmal laufen lasse funktioniert es nicht mehr beim 3. ausführen des programms geht es wieder. jemand eine idee woran das liegen kann? http://www.fpgadeveloper.com/2008/10/microblaze-16x2-lcd-driver.html
Was funktioniert nicht mehr?
> wenn ich das programm nochmal laufen lasse
Was machst du beim 1. mal und beim 3. mal anders?
es werden entweder komsiche zeichen draufgeschrieben oder man sieht gar nichts udn beim 1. bzw3. mal mach ich nichts anders fühtre das selbe programm aus.
Hast wohl einen neuen Blinkgeber erfunden Geht - geht nicht - geht - geht nicht -
eine andere Taktfrequenz als Du dem Programm zur Berechnung der delay Zeiten mitgeteilt hast
aber warum geht es dann jedes 2. mal wenn die timer falsch sind ?
Hallo hans, schaltest Du das LCD auf 4-Bit - Modus um ? Wenn dies nicht ordentlich gemacht wird, dann kann es zu solchen Efekten kommen. Gruss Ulli
ja es ist ein 4 bit modus da 8 bit auf dem board nicht geht . die frage wo soll ich jetzt nach dem fehler suchen?
1 | // Initialize
|
2 | temp = gpio_read(); |
3 | temp = temp | LCD_DB5; |
4 | gpio_write(temp); |
5 | lcd_clk(); |
6 | lcd_clk(); |
7 | lcd_clk(); |
Nimm hier mal ein lcd_clk() raus
:
Wiederhergestellt durch User
also wenn ich das eien lcd_clk(); rausnehem geht es beim 1. programm satrt nicht aber dafür dananch immer
hans schrieb: > es werden entweder komsiche zeichen draufgeschrieben oder man sieht gar > > nichts udn beim 1. bzw3. mal mach ich nichts anders fühtre das selbe > > programm aus. Dann ist das Initialisierungstiming der LCD falsch. Bei jedem Starten kommt der LCD Chip ein wenig weiter in der INi-Routine weil die Zeit fuers gesamte Durchlaufen zu klein ist. Hast Du einen Emulator: Dann lass das mal im Singlestep oder Animiermodus laufen....da sind die Zeiten laenger und dann klappts auch. Sofern die SW in Ordnung ist natuerlich! Gruss Michael
hans schrieb: > also wenn ich das eien lcd_clk(); rausnehem geht es beim 1. programm > satrt nicht aber dafür dananch immer Dann erhöh hier
1 | void lcd_init(void) |
2 | {
|
3 | Xuint32 temp; |
4 | |
5 | // Write mode (always)
|
6 | lcd_reset_rw(); |
7 | // Write control bytes
|
8 | lcd_reset_rs(); |
9 | |
10 | // Delay 15ms
|
11 | delay_ms(15); |
die 15 Millisekunden auf 30
@ karl heinz das verändert nichts @ mexam warum geht es dann beim 2.++ mal wird da der chip nicht wieder von vorne initialisiert?
hans schrieb: > @ karl heinz das verändert nichts OK Was ist damit?
1 | // Delay 15ms
|
2 | delay_ms(30); |
3 | |
4 | // Initialize
|
5 | temp = gpio_read(); |
6 | temp = temp | LCD_DB5 | LCD_DB4; |
7 | gpio_write(temp); |
8 | lcd_clk(); |
9 | delay_ms(5); |
10 | lcd_clk(); |
11 | delay_ms(1); |
12 | lcd_clk(); |
13 | temp = temp & ~(LCD_DB4); |
14 | lcd_clk(); |
es geht danke karl heinz :D wenn du mal zeit ahst könntest du ja vll erklären warum es jetzt aber vorher nicht ging danke nochmal
hans schrieb: > es geht danke karl heinz :D > > wenn du mal zeit ahst könntest du ja vll erklären warum es jetzt aber > vorher nicht ging weil dir Originalversion davon ausgeht, dass das LCD definiert in einem bestimmten Zustand ist. (nämlich 8-Bit) Und wenn man das dann für alle Möglichkeiten durchspielt, kommt man drauf, dass die Initsequenz nicht in allen Fällen gezielt den 4-Bit Modus einstellen kann, so wie die Autoren das vor hatten. Zunächst muss man das LCD auf jeden Fall wieder zurück in den 8-Bit Modus bringen um es erst dann wieder gezielt auf 4 Bit umschalten zu können.
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.