Hallo Leute =)
Ich erhoffe mir mal wieder eine gute Hilfe von euch und zwar
geht es um folgendes:
Auf mikrocontroller.net findet man ja im Toutorial eine
sehr gute beschreibung für eine LCD Ansterungsroutine
für eine 4 Bit Ansteuerung.
Da ich aber an meinen ATMega8 viele Pins habe und ich
nur ein paar Pins gebrauche (Display + 2 AD Wandler )
habe ich die Routine ( versucht)
auf 8 Bit umgeschrieben... und nun erhoffe ich mir
ob ihr diese mal auf Fehler kontrollieren könntet oder weitere
Tipps dazu geben könntet =)
Das Toturial auf µC.net
http://www.mikrocontroller.net/artic...-Tutorial:_LCD
Liebe Grüße
Namenlos
Code:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 8bit-Interface ;; ;; ;; ;; D0 = PortD0 ;; ;; D1 = PortD1 ;; ;; D2 = PortD2 ;; ;; D3 = PortD3 ;; ;; D4 = PortD4 ;; ;; D5 = PortD5 ;; ;; D6 = PortD6 ;; ;; D7 = PortD7 ;; ;; ;; ;; R/W = PortB0 ;; ;; RS = PortB1 ;; ;; E = PortB2 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .def init = r21 .def temp2 = r22 .def temp3 = r23 .ifndef XTAL .equ XTAL = 4000000 .endif lcd_data: ;RS = 1,;sendet ein Datenbyte an das LCD push init sbi PortB, 1 rcall lcd_enable rcall delay50us pop init ret lcd_command:;sendet einen Befehl an das LCD push init cbi PortB, 1 ;RS=0, Daten werden geschrieben rcall lcd_enable rcall delay50us pop init ret ;zurück zum Hauptprogramm lcd_enable: ;erzeugt den Enable-Puls ;Bei höherem Takt (>= 8 MHz) kann es notwendig sein, ;vor dem Enable High 1-2 Wartetakte (nop) einzufügen. ;Siehe dazu http://www.mikrocontroller.net/topic/81974#685882 sbi PORTB, 2 ; Enable high nop ; 3 Taktzyklen warten nop nop cbi PORTB, 2 ; Enable wieder low ret ; Und wieder zurück delay50us: ;Pause nach jeder Übertragung,50us ldi init, ( XTAL * 50 / 3 ) / 1000000 delay50us_: dec init brne delay50us_ ret ; wieder zurück delay5ms: ; 5ms Pause ldi init, ( XTAL * 5 / 607 ) / 1000 WGLOOP0: ldi temp2, $C9 WGLOOP1: dec temp2 brne WGLOOP1 dec init brne WGLOOP0 ret ; wieder zurück lcd_init: ;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden ldi temp3,50 powerupwait: rcall delay5ms dec temp3 brne powerupwait ldi init, 0b00000011 ; muss 3mal hintereinander gesendet out PortD, init ; werden zur Initialisierung rcall lcd_enable ; 1 rcall delay5ms rcall lcd_enable ; 2 rcall delay5ms rcall lcd_enable ; und 3! rcall delay5ms ldi init, 0b00110000 ; 8Bit / 2 Zeilen / 5x7 rcall lcd_command ldi init, 0b00001100 ; Display ein / kein Cursor / kein Blinken rcall lcd_command ldi init, 0b00000100 ; inkrement / kein Scrollen rcall lcd_command ret lcd_clear: ;Sendet den Befehl zur Löschung des Displays ldi init, 0b00000001 ; Display löschen rcall lcd_command rcall delay5ms ret lcd_home: ;Sendet den Befehl: Cursor Home ldi init, 0b00000010 ; Cursor Home rcall lcd_command rcall delay5ms ret







)
Zitieren

Lesezeichen