LC Display will einfach nicht

Gast #1466976
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
}
Gast #1466996
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
Gast #1467065
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren