mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Displaycontroler M50530 und der Initialisierung


Autor: Neb N. (bluemorph)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe mal wieder ein Problem ;-)

Ich habe mir vor kurzem ein Display von Pollin gekauft. Das war sehr 
billig und hat 4 Zeilen mit jeweils 16 Zeichen. Der Controller ist ein 
M50530. Soweit habe ich mich mit dem Controller angefreundet und 
eigentlich funktionieren meine Routinen, um das Display zu beschreiben 
auch soweit.

ABER, folgendes Problem tritt auf:
Wenn ich mein STK500 ausschalte, dann funktioniert nach einem 
Einschalten anscheinend die Initialisierung nicht. Das Display zeigt nur 
eine Reihe striche an.

Ist der ISP Stecker für meinen 8515 eingeseteckt, so muss ich etwa 20 - 
30 mal auf Reset drücken (und auch noch ganz schnell nacheinander) bis 
endlich eine Initialisierung stattgefunden hat. Drück ich dann noch ein 
paar mal mehr Reset, ist die Displayanzeige wieder weg und die 
Initialisierung schlägt wieder fehl.

Ist der ISP Stekcer nicht aufgesteckt, so muss ich genau einmal auf 
reset drücken, dann klappt die Initialisierung- Drücke ich 
anschschließend nochmal auf Reset, funktioniert die Initialisierung 
wieder nicht und ich sehe nur einen Strich in einer Zeile (also in jedem 
5x8 block sieht man dann einen Strich). Drücke ich anschließend nochmal 
auf Reset, erscheint die Displayanzeige wieder ganz normal. Es ist also 
ein ständiger Wechsel von "Display ist initialisiert" und "Display ist 
nicht initialisiert".

Ich weiß nicht so recht woran das liegt oder was ich falsch mache! Ich 
gebe euch nochmal die Daten, die ihr ja wahrscheinlich wissen müsst, um 
mir hoffentlich zu helfen.
Also ich benutze das STK500 mit dem 8515. Das Display ist von Pollin 
(LCD-Modul HLM8070 Bestnr: 120 387) mit einem M50530 Controller. Ich 
betreibe es im 4 Bit - Modus. Alle Steuerleitungen (ex, OC1, OC2, R/W) 
und die Datenleitungen (DB4 ... DB7) sind an einem Port angeschlossen.

Zur Initialisierung benutze ich diese Routine:
void lcd_init( void ){
  LCD_DDR_D4   = 1;
  LCD_DDR_D5   = 1;
  LCD_DDR_D6   = 1;
  LCD_DDR_D7   = 1;
  LCD_DDR_OC1   = 1;
  LCD_DDR_OC2   = 1;
  LCD_DDR_EX   = 1;
  LCD_DDR_RW   = 1;  

  LCD_EX = 0;
  LCD_OC1 = 0;
  LCD_OC2 = 0;
  LCD_RW = 0;          
  
  lcd_nibble( 0xD0 );      // SF 4 Bit Modus aktivieren
  lcd_command( 0xD8 ),      // SF 4 Bit Modus, Font = 8, DT = 1
  lcd_command( 0x50 );      // SE Cursor increas nach jedem write signal
  lcd_command( 0x01);      // Clear and home
  _delay_ms(2);
  lcd_command( 0x3A );      // Display on, cursor on, cursor blink
}

Ich habe über alle Portausgänge eine Bitstruktur gelegt, sodass ich 
jedes Bit einzeln ansprechen kann.

Die Routinen lcd_nibble und lcd_command sehen wie folgt aus:
static void lcd_nibble( u8 d ){
  LCD_D4 = 0; if( d & 1<<4 ) LCD_D4 = 1;
  LCD_D5 = 0; if( d & 1<<5 ) LCD_D5 = 1;
  LCD_D6 = 0; if( d & 1<<6 ) LCD_D6 = 1;
  LCD_D7 = 0; if( d & 1<<7 ) LCD_D7 = 1;
  
  LCD_EX = 1;        
  _delay_us( 1 );      // Für 1 us das EX Signal auf high lassen
  LCD_EX = 0;
  _delay_us( 1 );      // 1 us warten
}

static void lcd_byte( u8 d ){
  lcd_nibble( d );
  lcd_nibble( d<<4 );
  _delay_us(40);
}

void lcd_command( u8 d ){
  lcd_byte( d );
  _delay_ms(2);
}

In meiner main Funktion steht vor der Initialisierung des Displays noch 
ein Delay von 2 * 50 ms.

Ich hoffe ihr könnt mir helfen.

MfG BlueMorph

PS: Vielleicht kann mir ja auch sagen, warum meine read_busy() Funktion 
nicht richtig funktioniert.
static void lcd_read_busy (void){
  
  LCD_DDR_BUSY = 0;        // Busy Pin als Eingang setzen
  LCD_RW = 1;            // RW auf high
  
  while(1){
    LCD_EX = 1;        
    _delay_us( 1 );        // Für 1 us das EX Signal auf high lassen
    if (LCD_BUSY != 1) break;
    LCD_EX = 0;
    _delay_us( 1 );
  }
  
  LCD_RW = 0;
  LCD_DDR_BUSY = 1;
}

Autor: Neb N. (bluemorph)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat keiner eine Idee???

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt mir irgendwie bekannt vor bei diesem Controller. Ist aber schon ne 
Weile her. Spannungsversorgung vom LCD erst nach dem µC einschalten 
vielleicht?

Autor: Sven L. (friemler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuche mal das hier:
 static void lcd_byte( u8 d ){
   lcd_nibble( d );
   _delay_us(40);
   lcd_nibble( d<<4 );
   _delay_us(40);
 }
 

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> hat keiner eine Idee???

Dieses Display habe ich nicht, ich setze aber oft das 8x24 mit M50530 
ein. Ich lasse dem LCD etwas Zeit, bevor ich es initialisiere und wieder 
etwas Zeit, bevor ich es zum ersten mal anspreche. Damit gibt es keine 
Probleme. Die Textausgabe erfolgt allerdings über einen 
Bildschirmspeicher im AVR-SRAM im Zeitraster von 1ms ohne Auswertung des 
Busy-Flags.

...

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe auch das selbe Problem. Allerdings bin ich ein totaler Newbie. 
Ich weiß nicht einmal wie man den M50530 auf 4 bit modus umschaltet. Aus 
den Source code werde ich einfach nicht schlau.

>  LCD-Routinen
>  für Samsung 2138a mit M50530-Controller
>  24 x 8 Zeichen
>
>  Copyright 2003-04 by Daniel Jelkmann
>/*
>// setzt 4-Bit-Mode und initialisiert das LCD
>// muss als erstes aufgerufen werden, bevor das LCD angesteuert werden >kann
>void LCD_init(void)
>// alle Leitungen auf Ausgang schalten
>  LCD_DDR = 0xFF;
>  SET FUNCTION MODE
>  input:
>  OC1              0
>  OC2              0
>  RW               0
>  DB7,DB6          1
>  DB5    I/O 8/4   (1 = 8 bit, 0 = 4 bit)
>  DB4    FONT 8/12 (1 = 5x8 fonts, 0 = 5x12 fonts)
>  DB3,DB2          DUTY
>  DB1,DB0          RAM
>*/
>
>LCD_sendByte(216, 0);  //LCD_sendByte(216, 0);// DB7, DB6, DB4, DB3


Kann jemand mir bitte helfen

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Zusammen,

ich habe versucht, LCD mit M5053 von Pollin zu initialisieren und sehe 
nur eine gestrichelte Linie auf dem Display !

Was muß es anzeigen wenn 's richtig initilisiert wurde.

Danke

Autor: Moritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gleiches Problem , gestrichelte Linie... Normal sollte ein blinkender 
Cursor (zumindest bei meiner einstellung) erscheinen.
Init_Lcd()

   'Initialisierung       SF
   Call Lcd_sendbyte(&B11111011)
   'Bit 8-7 Immer auf 1
   'Bit 6   1 = 8bit-mode 0 = 4bit-mode
   'Bit 5   1 = 8x5       0 = 8x12
   'Bit 4-3 Duty-Mode (1-4 Lines)
   'Bit 2-1 RAM-Teilung (DD CG)
   '----------------------------
   'Cursor einstellen     SE
   Call Lcd_sendbyte(&B01010000)
   'Bit 8-7 Immer 0 1
   'Bit 6-4 Cursor Address Changes
   'Bit 3-1 Start Address Changes
   '----------------------------
   'Display               SD
   Call Lcd_sendbyte(&B00111010)
   'Bit 8-6 Immer 0 0 1
   'Bit 5   ON/OFF Display
   'Bit 4   ON/OFF Cursor
   'Bit 3   ON/OFF Underline Bit
   'Bit 2   ON/OFF Blinking Cursor
   'Bit 1   ON/OFF Blinking Charakter
   '----------------------------
   'Underline            SU
   Call Lcd_sendbyte(&B00001100)
   'Bit 8-5 Immer 0
   'Bit 4-3 Immer 1
   'Bit 2   ON/OFF Underline Func.
   'Bit 1   ON/OFF Setting/Reseting
   '----------------------------
Das ist meine Initialisierung , zum abschluss hab ich noch ein CLS(CH) 
übertragen. Danach erscheint dann die gestrichelte Linie =/.

Das ich inititaliert habe erkenne ich doch daran , das während der 
Sekunde wartezeit vor dem Init_LCD() der Bildschirm 1 1/2 Zeilen 
komplett anzeigt .

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.