Gast
#858866
Hallo Ich möchte ein 2-zeiliges DOG-M Display in Assembler ansteuern. Ich lasse es im 4 Bit Modus an Port D laufen. Leider geschiet auf dem Display garnichts. Das Datenblatt zum Display ist hier: http://www.lcd-module.de/deu/pdf/doma/dog-m.pdf und hier ist mein Code: Wär nett wenn jemand wüsste was ich falsch gemacht hab!! ;+---------------------------------------------------------------------- ;| Title : Ansteuerung für einen DOGM-Textdisplay ;+---------------------------------------------------------------------- ;| Funktion : gibt ;-) auf dem Display aus ;| Schaltung : DOGM 2x16 an portb im 4 bit Modus (wie LCD-Add-On) ;+---------------------------------------------------------------------- ;| Prozessor : ATmega8 ;| Takt : 3,6864 MHz ;| Sprache : Assembler ;| Datum : heute ;| Version : 1.0 ;| Autor : Tobias Frintz ;+---------------------------------------------------------------------- .include "AVR.H" ;----------------------------------------------------------------------- - ;Reset and Interrupt vector ;VNr. Beschreibung rjmp main ;1 POWER ON RESET reti ;2 Int0-Interrupt reti ;3 Int1-Interrupt reti ;4 TC2 Compare Match reti ;5 TC2 Overflow reti ;6 TC1 Capture reti ;7 TC1 Compare Match A reti ;8 TC1 Compare Match B reti ;9 TC1 Overflow reti ;10 TC0 Overflow reti ;11 SPI, STC Serial Transfer Complete reti ;12 UART Rx Complete reti ;13 UART Data Register Empty reti ;14 UART Tx Complete reti ;15 ADC Conversion Complete reti ;16 EEPROM Ready reti ;17 Analog Comparator reti ;18 TWI (I²C) Serial Interface reti ;19 Store Program Memory Ready ;----------------------------------------------------------------------- - ;Start, Power ON, Reset main: ldi r16,lo8(RAMEND) out SPL,r16 ldi r16,hi8(RAMEND) out SPH,r16 rcall LCD_init rcall LCD_clear ;----------------------------------------------------------------------- - mainloop: wdr rcall wait5ms ldi r16,'H' rcall LCD_data ldi r16,'y' rcall LCD_data ldi r16,'!' rcall LCD_data rcall LCD_home rjmp mainloop ;----------------------------------------------------------------------- - LCD_data: ldi r18,0b00000100 rjmp LCD_out ;----------------------------------------------------------------------- - LCD_cmd: ldi r18,0b00000000 LCD_out: mov r17,r16 swap r17 andi r16,0b11110000 or r16,r18 andi r17,0b11110000 or r17,r18 out PORTD,r16 rcall LCD_enable rcall wait5ms ret ;----------------------------------------------------------------------- - LCD_enable: sbi PORTD,3 ;Enable high nop ;kurtz warten nop nop cbi PORTD,3 ;Enable low ret ;----------------------------------------------------------------------- - LCD_clear: ldi r16,0b00000001 ;Display löschen rcall LCD_cmd rcall wait5ms ret ;----------------------------------------------------------------------- - LCD_home: ldi r16,0b00000010 rcall LCD_cmd rcall wait5ms ret ;----------------------------------------------------------------------- - LCD_off: ldi r16,0b00001000 rcall LCD_cmd rcall wait5ms ret ;----------------------------------------------------------------------- - LCD_on: ldi r16,0b00001110 rcall wait5ms ret ;----------------------------------------------------------------------- - LCD_line1: ldi r16,0b10000000 ;DRAM auf 0x00 rcall LCD_cmd rcall wait5ms ret ;----------------------------------------------------------------------- - LCD_line2: ldi r16,0b11000000 ;DRAM auf 0x40 rcall LCD_cmd rcall wait5ms ret ;----------------------------------------------------------------------- - wait5ms: push r24 ;r24 retten push r25 ;r25 retten ldi r25,50 ;für 1ms = 10 loop1: ldi r24,123 loop2: dec r24 brne loop2 ;Solange nicht NULL dec r25 ;Zähler 2 -1 brne loop1 ;Solange nicht NULL dec r16 ;Zähler1 -1 brne loop1 ;Solange nicht NULL pop r25 ;r25 wiederherstellen pop r24 ;r24 wiederherstellen ret ;Rücksprung ;----------------------------------------------------------------------- - LCD_init: sbi DDRD,1 sbi DDRD,2 sbi DDRD,3 sbi DDRD,4 sbi DDRD,5 sbi DDRD,6 sbi DDRD,7 cbi PORTD,2 ; warten bis Powerup ldi r18,10 powerup: rcall wait5ms dec r18 brne powerup ;min. 30 millisec ;sende init 1 ldi r16,0b00100000 out PORTD,r16 rcall LCD_enable rcall wait5ms ;Zeit zum umschalten lassen ldi r16,0b00101001 ;Funktion Set rcall LCD_cmd ldi r16,0b00011100 ;Bias Set rcall LCD_cmd ldi r16,0b01010010 ;Power Control rcall LCD_cmd ldi r16,0b01101001 ;Follower Control rcall LCD_cmd ldi r16,0b01110100 ;Contrast Set rcall LCD_cmd ldi r16,0b00001111 ;Display on rcall LCD_cmd ldi r16,0b00000001 ;Clear Display rcall LCD_cmd ldi r16,0b00000110 ;Entry Mode Set rcall LCD_cmd ret ;----------------------------------------------------------------------- -