LCD ANAG VISION 1624YRB

Gast #2219404
Lesenswert?

Hallo zusammen

Ich bin mittlerweile echt am verzweifeln. Mein LCD will einfach nicht 
laufen an einem Atmega 32. Sieht hier evtl. jemand einen Fehler?

Die oberste Zeile des 16x2 Displays zeigt nach Anlegen der 
Versorgungsspannung nur schwarze Balken an :-/

Das Display sollte ienen HD44780 kompatiblen controller besitzen.

Als Steuerbits habe ich Port A (0-2) spendiert und als Datenport PortD 
(8Bit modus)
1
//LCD.c
2
//F_CPU = 1MHz
3
//CTRL = Port A
4
//DATA = Port D
5

6

7
#include "LCD.h"
8

9
unsigned char lcd_init(){
10
  
11
  //Benötigte Ports als ausgänge definieren
12
  DDRA = 0xFF;
13
  DDRD = 0xFF;
14

15
  CTRL &= 0x00;
16
  
17
  //Strom anschalten
18
  CTRL |= 0b00000100;
19

20

21
  //Sämtlihe Ports mit Null belegen
22

23
  //30 Millisekunden warten
24
  _delay_ms(30);
25
  DATA = 0;
26

27
  //Initislisierungssequen
28
  pulse_LCD(0b00110000);
29
  _delay_ms(5);
30

31
  pulse_LCD(0b00110000);
32
  _delay_ms(5);
33

34
  pulse_LCD(0b00110000);
35
  _delay_ms(1);
36

37
  //5x8 Dot, 2-Line, 5x8 
38
  pulse_LCD(0b00111000);
39
  _delay_ms(30);
40

41
  //Display Off, Cursor On, Blinking
42
  pulse_LCD(0b00111100);
43
  _delay_ms(30);
44

45
  //Clear Display
46
  pulse_LCD(0b00000001);
47
  _delay_ms(30);
48

49
  //Set Entry Mode
50
  pulse_LCD(0b00000110);
51
  _delay_ms(30);
52

53
  Display On
54
  pulse_LCD(0b00001111);
55

56
  return 0x00;
57
}
58

59
//Funktion zur Übernahme der Daten an das Display
60
void pulse_LCD(uint8_t data){
61

62
  _delay_ms(30); //30 Millisekunden warten
63

64
  //Enable setzen
65
  CTRL |= 0b00000010;
66
  _delay_us(2);  //2 Millisekunden warten
67

68
  DATA = 0;
69
  _delay_us(2);
70
  DATA |= data;
71
  _delay_us(2);
72

73
  //Enable löschen
74
  CTRL &= 0b11111101;
75
  _delay_us(2);
76
  
77

78
  //Ausgangswerte wieder lsöchen
79
  DATA &= 0b00000000;
80
}
81

82
void lcd_write(uint8_t data){
83

84
  DATA = 0;
85
  _delay_us(2);
86

87
  //30 Millisekunden warten
88
  _delay_ms(30);
89

90
  //RS setzen
91
  CTRL |= 0b00000001;
92
  _delay_us(2);
93

94
  //Enable-Impuls setzen
95
  CTRL |= 0b00000010;
96
  _delay_us(2);
97

98
  //Übernahme der Daten
99
  DATA = data;
100
  _delay_us(2);
101

102
  //Löschen der Flags (Enable)
103
  CTRL &= 0b11111101;
104
  _delay_us(2);
105

106
  //Löschen der restlichen Flags
107
  DATA &= 0x00;
108
  CTRL &= 0b11111110; //RS löschen
109
}

Vielen Dank im Voraus!!

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