mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LC Display will einfach nicht


Autor: Paule (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, ich bin total am verzweifeln...

Seit gestern mmorgen versuche ich intensivst mein Display zum
Laufen zu kriegen (Display: 
http://www.pollin.de/shop/downloads/D120420D.PDF)

Die Beschaltung ist folgender Maßen:

DB4 - DB7: PC0 - PC3
RS: PC4
E: PC5
RW: GND


Ich habe mir nun folgenden Code zusammenkopiert und abgeändert ( Ja ich 
bin ein Anfänger) und komm nicht drauf, warum es nicht funktioniert.
Nach der Initialisierung und lcd_clear sollte das Display ja nichts 
anzeigen.
(Blincken und Cursor aus siehe Code).
Jedoch zeigt das Display (2x16) in der ersten Zeile nur schwarze Balken 
an...

Ist in dem Code was falsch oder meint ihr das Display ist hinüber ( was 
garnicht schlecht wäre, dann könnte ich meine seit gestern angestaute 
Wut an ihm auslassen)


Code:
#include <util/delay.h>
#include <lcd.h>

void long_delay(int ms) {
    for(; ms>0; ms--) _delay_ms(1);
}



void lcd_init (void)

{  

  DDRC = 0xff;

  
   long_delay(100);  
   PORTC =3;
   unsigned int a = 0;
     
   while(a < 3){
    long_delay(10);
    PORTC |= (1<<PC5);
    long_delay(10);
    PORTC &= ~(1<<PC5);
    a++;
   }

   long_delay(10);
  
  PORTC = 2;
  long_delay(10);
  PORTC |= (1<<PC5);
  long_delay(10);
  PORTC &= ~(1<<PC5);
  long_delay(10);
  
  lcd_write(40,0);

  lcd_write(12,0);
  
  lcd_write(4,0); 


}


void lcd_write (char Data,char CD)

{

  //Soll ins Seuer oder Datenregister geschrieben werden?
  if (CD == 0)
    {
    LCD_Port_Write &=~ (1<<PC4); //RS = 0 Steuerregister
    }
    else
    {
    LCD_Port_Write |= (1<<PC4); //RS = 1 Dataregister
    }



  //Schreiben der 1. 4Bit an das LCD Display
  LCD_Port_Write = (LCD_Port_Write&0xF0) + ((Data&0xF0)>>4); 
  LCD_Port_Write |= (1<<PC5);
  long_delay(10);
  LCD_Port_Write &=~ (1<<PC5);  

  //Schreiben der 2. 4Bit an das LCD Display  
  LCD_Port_Write = (LCD_Port_Write&0xF0) + (Data&0x0F);
  LCD_Port_Write |= (1<<PC5);
  long_delay(10);
  LCD_Port_Write &=~ (1<<PC5);
}





void lcd_clear (void)
{
  lcd_write (1,0); //Clear Display
  lcd_write (0x80,0);  //Set DD-Ram Adresse = 0
}


int main(void){
  
  long_delay(100);
  lcd_init();
  long_delay(100);
  lcd_clear();

  while(1){
  }

}

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die schwarzen balken sind meist wenn noch nichts an das display gesendet 
wurde, das ist also sicher noch nicht kaputt.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paule schrieb:

> Die Beschaltung ist folgender Maßen:
>
> DB4 - DB7: PC0 - PC3
> RS: PC4
> E: PC5
> RW: GND

Bei welchem µC?

Bei PORTC habe ich immer mögliche Doppelfunktionen des Ports im 
Hinterkopf. Bei manchen AVRs muss man z.B. JTAG abschalten damit das 
geht.

Autor: I2C (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
//Schreiben der 2. 4Bit an das LCD Display  
  LCD_Port_Write = (LCD_Port_Write&0xF0) + (Data&0x0F);
  LCD_Port_Write |= (1<<PC5);
  long_delay(10);
  LCD_Port_Write &=~ (1<<PC5);

Kann hier vill. der Fehler versteckt sein?
(LCD_Port_Write&0xF0) + (Data&0x0F);
???(einmal 0xF0 und einmal 0x0F)???
Nicht böse sein wenn ich unsinniges frag kenne mich mit der Sprache 
nicht aus!!

MfG

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yep da hat er recht... beim atmega16/32 z.b. liegt dieses "doofe" JTAG 
auf portc und ist ab werk eingeschaltet. in die grube bin ich selber 
schon mal reingeflogen.

Autor: Paule (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hatte ich vergessen, es handelt sich um einen ATMEGA 8.
Also JTAG kommt für das Problem nicht in Frage.

@I2C, kann nicht sagen, ob das einen Fehler enthält, dafür kenn ich mich 
zu wenig mit der Syntax aus.

Sonst jemand ne Idee?

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.