mikrocontroller.net

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


Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-16...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was funktioniert nicht mehr?

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

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Erich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast wohl einen neuen Blinkgeber erfunden

Geht - geht nicht - geht - geht nicht -

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine andere Taktfrequenz als Du dem Programm zur Berechnung der delay 
Zeiten mitgeteilt hast

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber warum geht es dann jedes 2. mal wenn die timer falsch sind ?

Autor: Ulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 // Initialize
  temp = gpio_read();
  temp = temp | LCD_DB5;
  gpio_write(temp);
  lcd_clk();
  lcd_clk();
  lcd_clk();


Nimm hier mal ein lcd_clk() raus

: Wiederhergestellt durch Moderator
Autor: hans (Gast)
Datum:

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

Autor: mexman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
void lcd_init(void)
{
  Xuint32 temp;

  // Write mode (always)
  lcd_reset_rw();
  // Write control bytes
  lcd_reset_rs();

  // Delay 15ms
  delay_ms(15);

die 15 Millisekunden auf 30

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ karl heinz das verändert nichts

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hans schrieb:
> @ karl heinz das verändert nichts

OK
Was ist damit?
 // Delay 15ms
  delay_ms(30);

  // Initialize
  temp = gpio_read();
  temp = temp | LCD_DB5 | LCD_DB4;
  gpio_write(temp);
  lcd_clk();
  delay_ms(5);
  lcd_clk();
  delay_ms(1);
  lcd_clk();
  temp = temp & ~(LCD_DB4);
  lcd_clk();

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.