Forum: Mikrocontroller und Digitale Elektronik LCD Display unerklärlicher fehler!


von hans (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Was funktioniert nicht mehr?

> wenn ich das programm nochmal laufen lasse
Was machst du beim 1. mal und beim 3. mal anders?

von hans (Gast)


Lesenswert?

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.

von Erich (Gast)


Lesenswert?

Hast wohl einen neuen Blinkgeber erfunden

Geht - geht nicht - geht - geht nicht -

von Düsendieb (Gast)


Lesenswert?

eine andere Taktfrequenz als Du dem Programm zur Berechnung der delay 
Zeiten mitgeteilt hast

von hans (Gast)


Lesenswert?

aber warum geht es dann jedes 2. mal wenn die timer falsch sind ?

von Ulli (Gast)


Lesenswert?

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

von hans (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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
von hans (Gast)


Lesenswert?

also wenn ich das eien lcd_clk(); rausnehem geht es beim 1. programm 
satrt nicht aber dafür dananch immer

von mexman (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

von hans (Gast)


Lesenswert?

@ karl heinz das verändert nichts

@ mexam warum geht es dann beim 2.++ mal wird da der chip nicht wieder 
von vorne initialisiert?

von Karl H. (kbuchegg)


Lesenswert?

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();

von hans (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.