Forum: Mikrocontroller und Digitale Elektronik HD44780 mit Mega32 per 8bit - de nada!


von sol_a_sol (Gast)


Lesenswert?

Moin moin!

Ich bin am tagelang am Verwzweifeln, hin und her probiert aber ich 
bekomme einen 2x16 HD44780 LCD schlichtweg nicht initialisiert...

Vielleicht kann sich mal jemand von euch erbarmen, sich den Code mal 
genauenr annzuschauen

Grundgestell ist der gut erklärte Code welchen ich aus einem Tutorial 
dieser Seite entnommen hab...

.include "m32def.inc"

.equ XTAL      = 3686400
.equ LCD_PORT  = PORTD
.equ LCD_Com  = PortB
.equ PIN_RS    = PB0
.equ PIN_RW      = PB1
.equ PIN_E     = PB2
.def temp1    = r16
.def temp2    = r17
.def temp3    = r18


  ldi r16, LOW(RAMEND)
  out SPL, r16
  ldi r16, HIGH(RAMEND)
  out SPH, r16

  ldi r16, 255
  out DDRB, r16
  out DDRD, r16

main:
  clr temp1
  out PortB, temp1
  rcall lcd_init
  rcall lcd_clear
  sbi PortB, 0
  ldi r19, 'T'
  rcall lcd_data
  rcall lcd_enable

loop:
  rjmp loop


lcd_data:


           out LCD_PORT, r19
           rcall lcd_enable
           rcall delay50us
           ret

 ; erzeugt den Enable-Puls
lcd_enable:
           sbi PortB, 2       ; Enable high
           nop                          ; 3 Taktzyklen warten
           nop
           nop
           cbi PortB, 2          ; Enable wieder low
           ret                          ; Und wieder zurück

 ; Pause nach jeder Übertragung
delay50us:                              ; 50µs Pause
           ldi  temp1, ( XTAL * 50 / 3 ) / 1000000
delay50us_:dec  temp1
           brne delay50us_
           ret                          ; wieder zurück

 ; Längere Pause für manche Befehle
delay5ms:                               ; 5ms Pause
           ldi  temp1, ( XTAL * 5 / 607 ) / 1000
WGLOOP0:   ldi  temp2, $C9
WGLOOP1:   dec  temp2
           brne WGLOOP1
           dec  temp1
           brne WGLOOP0
           ret                          ; wieder zurück

 ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
lcd_init:

           ldi   temp3,6
powerupwait:
           rcall delay5ms
           dec   temp3
           brne  powerupwait
           ldi   temp1,    0b00110000  ; muss 3mal hintereinander 
gesendet
           out   PortD, temp1        ; werden zur Initialisierung
           rcall lcd_enable             ; 1
           rcall delay5ms
           rcall lcd_enable             ; 2
           rcall delay5ms
           rcall lcd_enable             ; und 3!
           rcall delay5ms
           ldi   temp1, 0b00111000
           out   PortD, temp1
       rcall delay50us
           ldi   temp1, 0b00001110    ; Display on, Cursor off
           out   PortD, temp1
       rcall delay50us
           ldi   temp1, 0b00000001     ; endlich fertig
           out   PortD, temp1
       rcall delay50us
           ret

 ; Sendet den Befehl zur Löschung des Displays
lcd_clear:
           ldi   temp1, 0b00000001      ; Display löschen
           out PortD, temp1
           rcall delay5ms
           ret

 ; Sendet den Befehl: Cursor Home
lcd_home:
           ldi   temp1, 0b00000010      ; Cursor Home
           out PortD, temp1
           rcall delay5ms
           ret

von troll (Gast)


Lesenswert?

Funktioniert es mit dem Code aus dem Tutorial? (oder anders gefragt: 
Hardware- oder Softwarefehler?)

von Spess53 (Gast)


Lesenswert?

Hi

>    ldi   temp1, 0b00111000
>    out   PortD, temp1
>    rcall delay50us

Wo ist der Impuls auf E?

MfG spess

von sol_a_sol (Gast)


Lesenswert?

...hatte es tatsächlich mit dem Code aus dem Tuturial probiert (4bit und 
entsprechend verkabelt) Hatte aber auch nicht gefunzt... allerding hatte 
da noch keinen Quarz angehängt...mmhhh... meinst das LCD ist im A**** ?

von sol_a_sol (Gast)


Lesenswert?

si claro! Sehr ordentlich Spess :) das war schon`ma der erste Fehler... 
hab`s korrigiert, nun sind alle Pixel an?! NAja, hatt sich zumindest 
schon einmal was verändert... werd`s weiter probieren - vielen Dank bis 
dahin!

von Spess53 (Gast)


Lesenswert?

Hi

>nun sind alle Pixel an?!

Dann solltest du mal am Kontrast drehen.

MfG Spess

von sol_a_sol (Gast)


Lesenswert?

QUE IDIOTA! Genauso sah es auch bei meinem ersten Versuch aus. Und wenn 
ich mal genau hinschaue, seh auch die Buchstaben...boahh... schande über 
mein Haupt...!

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.