LCD ANAG VISION 1624YRB

Gast #2219404
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!!
#2219410
Habe keine Lust, mich da durchzuforsten :-)
Es gibt Unmengen an funktionierendem Code (meist allerdings im 
4bit-mode) - warum nimmst du nicht sowas?
Ausserdem gibts ein LCD-Controller (KSirgendwas??), der ist zu 99% 
kompatibel - aber gerade in der init-Sequenz nicht. Vielleicht liegts 
nur daran?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.