Forum: Mikrocontroller und Digitale Elektronik LC Display will einfach nicht


von Paule (Gast)


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:
1
#include <util/delay.h>
2
#include <lcd.h>
3
4
void long_delay(int ms) {
5
    for(; ms>0; ms--) _delay_ms(1);
6
}
7
8
9
10
void lcd_init (void)
11
12
{  
13
14
  DDRC = 0xff;
15
16
  
17
   long_delay(100);  
18
   PORTC =3;
19
   unsigned int a = 0;
20
     
21
   while(a < 3){
22
    long_delay(10);
23
    PORTC |= (1<<PC5);
24
    long_delay(10);
25
    PORTC &= ~(1<<PC5);
26
    a++;
27
   }
28
29
   long_delay(10);
30
  
31
  PORTC = 2;
32
  long_delay(10);
33
  PORTC |= (1<<PC5);
34
  long_delay(10);
35
  PORTC &= ~(1<<PC5);
36
  long_delay(10);
37
  
38
  lcd_write(40,0);
39
40
  lcd_write(12,0);
41
  
42
  lcd_write(4,0); 
43
44
45
}
46
47
48
void lcd_write (char Data,char CD)
49
50
{
51
52
  //Soll ins Seuer oder Datenregister geschrieben werden?
53
  if (CD == 0)
54
    {
55
    LCD_Port_Write &=~ (1<<PC4); //RS = 0 Steuerregister
56
    }
57
    else
58
    {
59
    LCD_Port_Write |= (1<<PC4); //RS = 1 Dataregister
60
    }
61
62
63
64
  //Schreiben der 1. 4Bit an das LCD Display
65
  LCD_Port_Write = (LCD_Port_Write&0xF0) + ((Data&0xF0)>>4); 
66
  LCD_Port_Write |= (1<<PC5);
67
  long_delay(10);
68
  LCD_Port_Write &=~ (1<<PC5);  
69
70
  //Schreiben der 2. 4Bit an das LCD Display  
71
  LCD_Port_Write = (LCD_Port_Write&0xF0) + (Data&0x0F);
72
  LCD_Port_Write |= (1<<PC5);
73
  long_delay(10);
74
  LCD_Port_Write &=~ (1<<PC5);
75
}
76
77
78
79
80
81
void lcd_clear (void)
82
{
83
  lcd_write (1,0); //Clear Display
84
  lcd_write (0x80,0);  //Set DD-Ram Adresse = 0
85
}
86
87
88
int main(void){
89
  
90
  long_delay(100);
91
  lcd_init();
92
  long_delay(100);
93
  lcd_clear();
94
95
  while(1){
96
  }
97
98
}

von Ben (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


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.

von I2C (Gast)


Lesenswert?

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

Kann hier vill. der Fehler versteckt sein?
1
(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

von Ben (Gast)


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.

von Paule (Gast)


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?

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.