Forum: Mikrocontroller und Digitale Elektronik LCD hat schwarze Balken in Zeile 1 und 3


von Dirk A. (Firma: student) (spike_ipp)


Angehängte Dateien:

Lesenswert?

tja, ein häufiges problem, und ich hab es auch, hab hier schon viel 
gelesen, und einieges probiert, aber nix klappt!
also ich hab ein 4x20 LCD, die 1. und 3. Zeile hat schwarze balken. das 
kann an der lib liegen.
das merkwürdige ist, das wenn ich den controller unter spannung 
reinstecke, und bissl wackel gehts hin und wieder... kann das ein 
zeitproblem in der initialisierung sein?
auch wenn ich hin und her wackeln schreibe, von nem üblichen 
wackelkontackt seh ich mal ab, man weiß nie, aber schaut nicht danach 
aus!

im Anhang das Datenblatt des LCD

hier der code

#define F_CPU 4000000
#include <avr\io.h>
#include <util\delay.h>
#include <lcd_neu.h>

volatile unsigned int i;
unsigned int x;

main()
{
// Ausgänge und Eingänge
  DDRB  =  0x60;    // Taster-Pin's als Eingänge, Freigabe Pin's als 
Ausgänge
  DDRD  =  0x02;    // LED-Pin als Ausgang
  i=0;          // LED erstmal aus

  PORTB  =  0x1f;    // PORTB Taster-Anschlüsse intern mit PULL-UP's 
beschalten
  for(x=0;x<100;x++)
  {
  _delay_ms(16);
  }
  lcd_init();
  _delay_ms(16);

  while(1)
  {
    if  (!(PINB&0x01))  // abfrage ob Bit1 nicht High ist,
              //also gedrückt ist(Taster schaltet LOW durch)
    {          // mit einem Taster einschalten
      i=1;
    }

    if  (!(PINB&0x02))  // abfrage ob Bit2 nicht High ist,
              //also gedrückt ist(Taster schaltet LOW durch)
    {          // mit anderem Taster ausschalten
      i=0;
    }

    if(i)
    {
      PORTD=0x00;    // LED an
      lcd_home();    //set_cursor(3,3);
      lcd_string("Hallo");
    }
    else
    {
      PORTD=0xff;    // LED aus
      lcd_home();
      lcd_string("o");
    }

  //lcd_string("h");

  }
}

die LED verändert ihren zustand...

von Mh. M. (mhm)


Lesenswert?

4-zeilige LCDs, wie du es auch eines verwendest, verhalten sich IMHO von 
der Ansteuerung her wie zweizeilige. D.h. du hast von der Ansteuerung 
her kein 4*20 LCD, sondern ein 2*40. Änder mal set_cursor(3,3); in: 
set_cursor(23,1);
Nun müsste es eigentlich funktionieren...

von Dirk A. (Firma: student) (spike_ipp)


Lesenswert?

das set_cursor(3,3); ist auskommentiert, nur das lcd_home(); ist 
wirksam, wenn dann mal eine reaktion kommt startet er auch in der 1. 
Zeile links.

von Dirk A. (Firma: student) (spike_ipp)


Angehängte Dateien:

Lesenswert?

im betrieb den controller entfernen und wieder reinstecken, mal kommt 
eine reaktion und mal nicht, schwarze balken sind jetzt weg, aber die 
ausgabe kommt mal und mal nicht, das riecht doch danach das die 
initialisierung mal funktioniert und mal nicht... oder??

hab die lib mal angehängt, bin über jede hilfe dankbar!

von Dirk A. (Firma: student) (spike_ipp)


Lesenswert?

keiner hat ne idee???

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Das ist ein gängiges Problem. Nimm einfach funktionierenden Code, der 
sich hier oder anderswo leicht findet. Suche benutzen.

von holger (Gast)


Lesenswert?

Dass hier:

>   LCD_RS_DDR  |= (1<<LCD_RS);
>   // muss 3mal hintereinander gesendet werden zur Initialisierung
>
>   _delay_ms(15);
>
>   LCD_PORT_4 &= ~(1<<LCD_D4);
>   LCD_PORT_5 |=  (1<<LCD_D5);

Mal so ändern:

   LCD_RS_DDR  |= (1<<LCD_RS);
   // muss 3mal hintereinander gesendet werden zur Initialisierung

   _delay_ms(15);

   LCD_PORT_4 |=  (1<<LCD_D4);
   LCD_PORT_5 |=  (1<<LCD_D5);

von Dirk A. (Gast)


Lesenswert?

das scheints jetzt gewesen zu sein, danke Holger!!!

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.