mikrocontroller.net

Forum: Compiler & IDEs 2te Zeile des Displays nach Reset weg


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hej,

Ich habe folgendes Problem, dass ich nachdem ich meinen Code via 
AVRStudio und AVRISP MKII in einem ATmega32 übertrage, alles 
funktioniert wie es soll.
Also erste sowie zweite Zeile des Displays wird korrekt angezeigt.

Nachdem ich aber das Programmierkabel ziehe und den Strom einmal aus- 
und anschalte ist die zweite Zeile verschwunden! Hat jemand schonmal so 
ein Problem gehabt und weiss wie man das lösen kann?

Zur Ansteuerung des Displays benutze ich Peter Fleurys lib. Danke 
hierfür an ihn!

Ausgabe erfolgt in Code folgendermaßen:
lcd_init(LCD_DISP_ON);  // display initialisiert, cursor off
lcd_clrscr();  //display löschen
lcd_puts("Hallo\n");
nms_pause(1000);  // Sekunde Wartezeit
...
lcd_clrscr();
lcd_puts("Codetyp waehlen:\n");
lcd_puts("Code0");

wobei hier z.B. Code0 nicht sichtbar ist nach Reset. Davor schon :(

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem könnte ein Timingproblem sein.

Der LCD-Controller hat ein eigenes (Hardware-)Reset bei Power-On. Das 
Zeitverhalten beim Power-On kann mit/ohne Programmierkabel 
unterschiedlich sein, wenn die Versorgungsspannung unterschiedlich 
schnell hochfährt. Daten dazu stehen im LCD-Datenblatt.

Dein Software-Reset (lcd_init) sollte nach der (Hardware-)Reset-Sequenz 
einsetzen. Es kann sein, dass du ohne Programmierkabel zu früh lcd_init 
aufrufst und Teile des Software-Resets nicht beachtet werden, weil der 
LCD-Controller noch in der (Hardware-)Reset-Sequenz steckt.

Ich würde mal vor lcd_init eine Wartezeit einbauen.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mal nach deinem Tipp 10Sekunden vor lcd_init(LCD_DISP_ON); 
gewartet, hat allerdings leider nichts geholfen :/

Beim Display handelt es sich um das LCD 162C BL von Reichelt.

ABER, durch Dich angespo*rnt hab ich noch ein bischen rumprobiert und 
meinen Fehler gefunden und zwar mag das Display es scheinbar ungern wenn 
man den Displayport initialisiert. Und zwar hatte ich das folgendermaßen 
gemacht:
void init()
{
  //Datenrichtung festlegen
  DDRA = 0xfe;   // PortA 4-7 Ausgang ( debugLEDs), PA3 & PA1 Ausgang ( unbenutzt ), PA2 Ausgang ( Sender ), PA0 Eingang (Receiver)  
  DDRB = 0xff;   // PortB Ausgang, Standard auf HIGH, da unbenutzt bis auf ICSP
  //DDRC = 0xff;   // PortC Ausgang -> LCD Ansteuerung( PD7 unbeschaltet )
  DDRD = 0xC0;  // PortD Eingang bis auf unbeschaltete PD6 & PD7
  
  //Ausgangswerte festlegen
  PORTA = 0xff;  // alles HIGH bis auf PA0, da Eingang -> intern PullupAktiv  
  PORTB = 0xff;  // alles HIGH, ausser ICSP unbenutzt
  //PORTC = 0xff;  // alles HIGH, PD7 unbeschaltet
  PORTD = 0;     // PD6 & PD7 auf LOW für Rest interner PullupDeaktiv da schon Pullup extern realisiert 

  //LCD-Initialisieren
  PORTA &= ~(1<<LED_RT1);  // init beginn
  //nms_pause(1000);
  lcd_init(LCD_DISP_ON);  // display initialisiert, cursor off
  lcd_clrscr();  //display löschen
  lcd_puts("Hallo\n");
  nms_pause(1000);  // Sekunde Wartezeit
  PORTA |= (1<<LED_RT1);  //init komplett
}

Das Display hängt an PORTC und zeigte die 2te Zeile nicht an wenn die 
Deklarationen DDRC = 0xff; und PORTC = 0xff; nichtauskommentiert waren. 
Jetzt ohne diese 2 Zeilen funktionierts. Das Delay vor lcd_init war auch 
nicht nötiig.
Warum jetzt allerdings bei gleichem Code der ISPStecker einen 
Unterschied macht, weiss ich immernoch nicht :D

Danke Dir!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Wort anges....t mag das Forum nicht, es enthält Spam, erkennbar an 
dem Teilwort zwischendrin :D deswegen das *

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.