HD44780 mit Mega32 per 8bit - de nada!

Gast #2809611
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
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**** ?
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.