www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Testroutine gesucht...


Autor: BA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für 16x2 oder 16x4 LCD mit HD44780 Kontroller...
am besten für STK200 angepasst...

Autor: Holger Barske (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon wieder ich...

http://www.avr-forum.com/programs/Bas_lcd.asm

Gutes Gelingen!

Holger

Autor: BA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das hab ich geschrieben und es lüppt einfach net...
mitlerweile glaube ich das dieses scheiss LCD im arsch ist..
schaut das mal durch was ich da für ein blödsinn verzapft habe..
thx..:-))..und danke schonmal


;*********************************************************
;    Anschlussplan Display to AVR
;---------------------------------------------------------
;     Pin Belegung Display  : Pin Belegung AT90S8515
;---------------------------------------------------------
; 1.  GND                       :  ----------
; 2.  +5V      :  ----------
; 3.  Vo Contrast    :  über 10k auf +5V
; 4.  RS Daten oder Code Input  : 21.  PC0
; 5.  R/W       : 22.  PC1
; 6.  Enable      : 23.  PC2
; 7.  DB0      : 39.   PA0
; 8.  DB1      : 38.  PA1
; 9.  DB2      : 37.  PA2
; 10. DB3      : 36.  PA3
; 11. DB4      : 35.  PA4
; 12. DB5      : 34.  PA5
; 13. DB6      : 33.  PA6
; 14. DB7      : 32.  PA7
; 15. Anode  LED    :  ----------
; 16. Katode LED    :  ----------
;*********************************************************

.nolist
.device  AT90S8515              ; Festlegung des Prozessors
.include "8515def.inc              ; Adressdefinierung einfügen für 
AT90S8515
.list

;**** Definierung der Steuerleitungen ****

.equ  E  =  PC2            ; Enable Leitung
.equ  RW  =  PC1            ; Read / Write Leitung
.equ  RS  =  PC0            ; Befehlsleitung
.equ  Busy  =  PA7            ; Busy Leitung

; **** Definierung der Befehle ****

.equ  lcdon  =  0b00001111          ; LCD einschalten
.equ  lcdmode  =  0b00111000          ; LCD Mode einstelle 8 Bit, 2 
Zeilen
.equ  lcdclear=  0b00000001          ; LCD löschen
.equ  lcdentry=  0b00000110          ; bei eingabe eines Zeichen den 
Cursor um 1 erhöhen


; **** Definierung der Arbeitsregister *****

.def  temp1  =  r16            ; Arbeitsregister 1
.def  temp2  =  r17            ; Arbeitsregister 2
.def  tim1  =  r18            ; Timeregister
.def  tim2  =  r19

; **** Hauptprogramm ****

main:

  ldi  temp1,High(RamEnd)          ; >
  out  sph,temp1            ;   > Stack Initialisieren
  ldi  temp1,Low(RamEnd)          ; >
  out  spl,temp1

  ldi  temp1,0b11111111          ; Port A als komplett als Ausgänge
  out  ddra,temp1            ; setzten
  out  ddrc,temp1            ; ebenfalls Port C



; **** Initialisierung des LCD Displays ****

initlcd:

  rcall   wait15ms            ; 15ms auf Display warten

  ldi  temp1,lcdmode
  rcall  sendebefehl
  rcall  wait5ms
  ldi  temp1,lcdon
  rcall  sendebefehl
  rcall  wait5ms
  ldi  temp1,lcdentry
  rcall  sendebefehl
  rcall  wait5ms
  ldi  temp1,0b01001000
  rcall  sendedaten


;  ldi  temp1,lcdmode
;  rcall  sendebefehl
;  rcall  wait150us
;  ldi  temp1,lcdmode
;  rcall  sendebefehl
;  rcall  wait150us
;  ldi  temp1,lcdon
;  rcall  sendebefehl
;  rcall  wait150us
;  ldi  temp1,lcdclear
;  rcall  sendebefehl

loop:
  rjmp loop


sendebefehl:

  cbi  portc,RS
  rcall  ausgabe
  ret

sendedaten:

  sbi  portc,RS
  rcall  ausgabe
  ret

ausgabe:

  out  portc,temp1
  sbi  portc,E
  nop
  nop
  nop
  cbi  portc,E
  ret


; **** Zeitschleifen ****

wait50us:

  ldi  tim1,65              ; 50us warten bei 4MHz Tacktfrequenz
  wait51:                ; 50us / 750ns = 65
  dec  tim1              ; 250ns für DEC Befehl und 500ns für BRNE
  brne   wait51              ; Befehl = 750ns
  ret                ; 750ns * 65 Durchläufe = 50us

wait150us:

  rcall wait50us
  rcall wait50us
  rcall wait50us
  ret

wait5ms:

  ldi  tim2,100
  wait5:
  rcall  wait50us
  dec  tim2
  brne  wait5
  ret

wait15ms:

  rcall  wait5ms
  rcall  wait5ms
  rcall  wait5ms
  ret

Autor: BA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich versuchs mal mit nem anhang...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.