Forum: Mikrocontroller und Digitale Elektronik Atmega8 - HD44780 nur ein schwarzer Balken


von lcd display (Gast)


Lesenswert?

Hallo
Ich versuch mich gerade daran ein LCD(HD44780) mit dem ATMega8 
anzusprechen! Ich hab folgenden Code
1
.include "m8def.inc"
2
.include "lcd_functions.asm"
3
4
main:
5
  ldi r16, LOW(RAMEND)
6
  out SPL, r16
7
  ldi r16, HIGH(RAMEND)
8
  out SPH, r16
9
10
  
11
  
12
  ldi r16, 0xFF
13
  out DDRB, r16
14
15
  rcall lcd_init
16
  rcall lcd_clear
17
18
  loop: 
19
    rjmp loop
led_functions.asm:
1
.equ LCD_PORT = PORTB
2
.equ PIN_E = 5
3
.equ PIN_RS = 4
4
// PD4-7 an PORTB 0-3
5
6
delay5ms:   /// Für 16 mhz ca. 5,02 ms
7
  ldi r16, 80      
8
9
  delay5ms_loop1: 
10
    ldi r17, 250
11
    delay5ms_loop2: 
12
      dec r17
13
      nop
14
      brne delay5ms_loop2
15
    dec r16        // 1 Cycle = 0,25us
16
    brne delay5ms_loop1      // 2 Cycle = 0,5 us
17
  ret
18
19
delay100us:
20
  ldi r16, 200
21
  delay100us_loop:
22
    nop
23
    nop
24
    nop
25
    nop
26
    nop
27
    dec r16
28
    brne delay100us_loop
29
  ret
30
31
enable:
32
  sbi LCD_PORT, PIN_E
33
  ldi r16, 0x04
34
  enable_loop: 
35
    dec r16
36
    brne enable_loop
37
  cbi LCD_PORT, PIN_E
38
  ret
39
40
lcd_init:
41
  rcall delay5ms
42
  rcall delay5ms
43
  rcall delay5ms
44
  ldi r16, 0b00000011    // $3
45
  out LCD_PORT, r16      // in PORTD ausgeben
46
  rcall enable      // Enable Bit setzen 1. mal
47
  rcall delay5ms      // min. 4,1 ms warten
48
  rcall enable      // Enable Bit setzen 2. mal
49
  rcall delay5ms      // min. 4,1 ms warten
50
  rcall enable      // Enable Bit setzen 3. mal
51
  rcall delay5ms      // min. 4,1 ms warten
52
  ldi r16, 0b00000010    // auf 4-Bit Modus umstellen
53
  out LCD_PORT, r16      
54
  rcall enable
55
  rcall delay5ms
56
57
  ldi r20, 0b00101000    // 4-Bit Modus, 2-Zeilig, 5*7 Pixel
58
  rcall lcd_command
59
  ldi r20, 0b00001111    // Display/Curser(-blinken) ein
60
  rcall lcd_command
61
  ldi r20, 0b00010100
62
63
  ret
64
65
lcd_command:         // Befehl in r20
66
  mov r21, r20
67
  swap r20
68
  andi r20, 0b00001111
69
70
  out LCD_PORT, r20
71
  rcall enable
72
73
  andi r21, 0b00001111
74
  out LCD_PORT, r21
75
  rcall enable
76
  
77
  rcall delay100us
78
  ret
79
80
lcd_data:
81
  mov r21, r20    
82
  swap r20
83
  andi r20, 0b00001111
84
  sbr r20, (1<<PIN_RS)    // RS auf Daten umstellen (1)
85
86
  out LCD_PORT, r20
87
  rcall enable
88
89
  andi r21, 0b00001111
90
  sbr r21, (1<<PIN_RS)    // RS auf Daten umstellen (1)
91
  out LCD_PORT, r21
92
  rcall enable
93
94
  rcall delay100us
95
  rcall delay100us
96
  ret
97
98
lcd_clear:
99
  ldi r20, 0b00000001
100
  rcall lcd_command
101
  rcall delay5ms
102
  ret
Ist im grunde der aus dem Tutorial nur etwas verändert...
Gibt es hier drin i-einen Fehler? Habs eig gestern schon mal geschaft 
etwas anzuzeigen aber jetzt gehts nichtmehr!? Hab nur am Code bischenwas 
verändert aber eig nur Makros eingefügt und so... Die Schaltung hab ich 
auch nochmal neu aufgebaut! Hab hier im Forum was gelesen, dass diese 
Controller sehr anfällig gegen elektrostatische Aufladung sind oder so.. 
Kann das sein das ich den zerstört hab?
PS. verwende wie man sieht 4-Bit Modus und 16 MHz Quarz

von Falk B. (falk)


Lesenswert?

@lcd display (Gast)

>Ich versuch mich gerade daran ein LCD(HD44780) mit dem ATMega8
>anzusprechen! Ich hab folgenden Code

>Ist im grunde der aus dem Tutorial nur etwas verändert...

Warum? Wenn du Anfänger bist solltest du dich erstmal zu 100% ans 
Tutorial halten. Nimm also den Code UNVERÄNDERT aus dem Tutorial und 
dann sehen wir weiter.

MfG
Falk

von lcd display (Gast)


Lesenswert?

Es hat ja schon funktioniert mit dem obigen Code aber jetzt gehts 
nichtmehr! Habs jetzt auch nochmal mit dem Code ausm Tutorial versucht 
und da zeigts gar nichts an...

von Michael L. (hasimaus)


Lesenswert?

Hallo lcd display,

bin jetzt gerade kein Atmega Experte, aber wenn ich mir Deine "main" 
anschaue, dann machst Du ein Init und dann ein Clear und danach eine 
Endless Loop. An welcher Stelle werden den Daten ausgegeben ?

Gruß

von lcd display (Gast)


Lesenswert?

niergens aber durch das clear sollte ja kein Balken zu sehn sein oder 
nicht?

von Michael L. (hasimaus)


Lesenswert?

Naja gut, ist schon korrekt.

Vielleicht eine ganz blöde Sache wie falsch eingestellter Kontrast.
Zudem kann es sein, dass die Delays etwas zu knapp sind. Je nach HD44780 
oder Kompatiblen kann das CLEAR bis 40ms brauchen.

Gruß

von max power (Gast)


Lesenswert?

solange die lcd_funtions.asm vor main eingebunden wird, durchläuft das 
programm erst dise einbindung.
entweder einen sprung nach reset zu main oder:
1
.include "m8def.inc"
2
3
4
main:
5
  ldi r16, LOW(RAMEND)
6
  out SPL, r16
7
  ldi r16, HIGH(RAMEND)
8
  out SPH, r16
9
10
  
11
  
12
  ldi r16, 0xFF
13
  out DDRB, r16
14
15
  rcall lcd_init
16
  rcall lcd_clear
17
18
  loop: 
19
    rjmp loop
20
21
.include "lcd_functions.asm"

von lcd display (Gast)


Lesenswert?

@Michael Leusink
lcd_clear ist doch sowieso der letzte befehl und danach kommt gar nichts 
mehr... der hat ja sowieso solang zeit wie er gerade braucht!
@max power
Hab ich geändert funktioniert aber immer noch nicht

Ist es theoretisch möglich das der Controller defekt ist? Kann man das 
testen? Es wird einfach nur noch eine Zeile mit schwarzen Kästchen 
angezeigt!

von Karl H. (kbuchegg)


Lesenswert?

lcd display schrieb:

> Ist es theoretisch möglich das der Controller defekt ist? Kann man das
> testen?

Sicher.
Ein bischen Phantasie!

LEd anhängen und nachsehen ob man die zum Leuchten bringt.
Dann Gegentest: per Programm nicht leuchten lassen
Wer will kann dann, zur Übung, noch einen drauf setzen: LED blinken 
lassen.

Spätestens wenns blinkt steht zweifelsfrei fest: Der µC arbeitet.

Aber wenn man ehrlich ist:
In den seltensten Fällen ist es ein Hardware-Defekt. In den meisten 
Fällen ist es ein Programmfehler :-)
Was allerdings vorkommt: Kabl ist aus seiner Halterung gerutscht oder 
überhaupt abgerissen (vor allen an den Enden, an denen das Lot die 
Kabelenden sperrig macht)

von holger (Gast)


Angehängte Dateien:

Lesenswert?

>Ist es theoretisch möglich das der Controller defekt ist? Kann man das
>testen? Es wird einfach nur noch eine Zeile mit schwarzen Kästchen
>angezeigt!

Brenn mal die HEX-Datei aus dem Anhang. Wenns damit nicht geht
stimmt was mit der Hardware nicht. Ist für ein 2x16 LCD compiliert.

von lcd display (Gast)


Lesenswert?

so ich habs g ist eig echt lächerlich...
ein das Kabel an einer Datenleitung ist abgebrochen! hat man ganz 
schlecht geseh... Trotzdem Danke für eure Hilfe

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.