www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C0802-Display ansteuern - auch nach Init nur schwarzer Balkan.


Autor: Manf. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche, das C0802-Display von Pollin anzusteuern. Gibt leider kein 
vernünftiges Datenblatt, deshalb habe ich mich nach 
http://wiki.atrox.at/images/3/3e/Text-LCDs.pdf gerichtet. Der Controller 
ist ja HD47780-kompatibel.

Mein Problem ist, dass auch nach der Initialisierung ein schwarzer 
Balken auf dem Display bleibt. Die Zeiten sind recht großzügig und 
sollten deshalb recht großzügig sein.

Der Code lautet:
#define F_CPU   1000000

#include <avr/io.h>
#include <util/delay.h>

#define LCD_PORT  PORTB
#define LCD_DDR    DDRB
#define LCD_RS    PB0
#define LCD_E    PB1
#define LCD_D4    PB2
#define LCD_D5    PB3
#define LCD_D6    PB4
#define LCD_D7    PB5


void lcd_enable(void) {
  _delay_ms(40);
  LCD_PORT |= (1 << LCD_E);
  _delay_ms(40);
  LCD_PORT &= ~(1 << LCD_E);
  _delay_ms(40);
}

void set_d7(int i) {
  if(i) {
    LCD_PORT |= (1 << LCD_D7);
  } else {
    LCD_PORT &= ~(1 << LCD_D7);
  }
}
 
/* ... äquivalente Funktionen für d6 - d4. ... */

void main(void) {
  LCD_DDR |= (1 << LCD_E) | (1 << LCD_RS);
  LCD_DDR |= (1 << LCD_D4) | (1 << LCD_D5) | (1 << LCD_D6) | (1 << LCD_D7);

  _delay_ms(1000);

  // Initialisierung.
  // Drei mal das ganze ...
  set_d7(0);
  set_d6(0);
  set_d5(1);
  set_d4(1);
  lcd_enable();
  lcd_enable();
  lcd_enable();

  // 4-bit-Modus.
  set_d7(0);
  set_d6(0);
  set_d5(1);
  set_d4(0);
  lcd_enable();

  // System-set.    
  set_d7(0);
  set_d6(0);
  set_d5(1);
  set_d4(0);
  lcd_enable();
  set_d7(1);
  set_d6(0);
  set_d5(0);
  set_d4(0);
  lcd_enable();


  // Display on.  
  set_d7(0);
  set_d6(0);
  set_d5(0);
  set_d4(0);
  lcd_enable();
  set_d7(1);
  set_d6(1);    // Display ein
  set_d5(1);    // Unterstrich-Cursor ein
  set_d4(0);    // Blinkender Cursor aus
  lcd_enable();

  // Clear display.
  set_d7(0);
  set_d6(0);
  set_d5(0);
  set_d4(0);
  lcd_enable();
  set_d7(0);
  set_d6(0);
  set_d5(0);
  set_d4(1);
  lcd_enable();

  // Cursor home
  set_d7(0);
  set_d6(0);
  set_d5(0);
  set_d4(0);
  lcd_enable();
  set_d7(0);
  set_d6(0);
  set_d5(1);
  set_d4(0);
  lcd_enable();


  // Entry mode set.
  set_d7(0);
  set_d6(0);
  set_d5(0);
  set_d4(0);
  lcd_enable();
  set_d7(0);
  set_d6(1);
  set_d5(1);    // Schreibrichtung rechts.
  set_d4(0);    // Cursor verschieben.
  lcd_enable();
}


Fällt jemandem da spontan 'n Fehler auf? :S
Vielen Dank schonmal.

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist F_CPU wirklich 1MHz?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist R/W angeschlossen?

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RS muss anfangs 0 sein.

Autor: Manf. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
R/W ist mit GND verbunden. RS ist doch 0, oder nicht?
Ob F_CPU wirklich 1000000Hz ist, muss ich nachher mal gucken.

Danke schonmal!

Autor: Manf. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
F_CPU war richtig. Interner Takt von 8MHz, aber Teilung durch 8. Die 
Teilung durch 8 hab' ich mal probehalber ausprobiert - hat nichts 
gebracht. Das Display - bzw. die obere Hälfe - bleibt schwarz.

Autor: Alexander v. Grafenstein (avogra)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem hab ich mich auch mehrere Tage rumgeschlagen. Am Ende lags dann 
natürlich doch an schlechten Lötkontakten, wie schon bei vielen anderen 
vor mir. ich hatte den folienleiter vorsichtig abgemacht und dann ein 
flachbandkabel mit 1mm pitch drangelötet (pollin hatte mir das falsche 
geliefert, mein glück :)). verwendest du den folienleiter mit der 
buchse, die man dazu kaufen kann? wenn du auch ein kabel angelötet hast, 
miss nochmal durch, und zwar von kabelende bis direkt auf die platine. 
ich hatte von lötstelle zu platine gemessen, und durch den druck die 
kalten lötstellen während der messung leitend gemacht.
Irgendwo nach der Initialisierung musste ich noch ne relativ lange 
zusätzliche pause einbauen, damit es funktioniert. kann dir im moment 
leider nicht mehr sagen, wo.

viel glück!

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.