Hallo Leute! Wieder mal ein KS0073er Problem. Ich habe mir obiges Display gekauft und per 4bit Bus betrieben, habe die Brücke umgelötet und versucht es via SPI zu betreiben, komme aber nicht dahinter was ich falsch mache bzw. wo der Fehler liegt. Hardware anschlusse: Atmega8 --> LCD Masse --> Pin 5 CS PB3 --> Pin 6 SID PB5 --> Pin 7 CLK Das ganze in Assembler geschrieben: ;----------------------------------------------------------------------- --- ; Prozessor : ATmega8 ; Takt : 3,6864 MHz ; Sprache : Assembler ;----------------------------------------------------------------------- --- .include "m8def.inc" ;----------------------------------------------------------------------- - ; Reset and Interrupt vector Beschreibung begin: rjmp main ;POWER ON RESET reti ;Int0-Interrupt reti ;Int1-Interrupt reti ;TC2 Compare Match reti ;TC2 Overflow reti ;TC1 Capture reti ;TC1 Compare Match A reti ;TC1 Compare Match B reti ;TC1 Overflow reti ;TC0 Overflow reti ;SPI, STC Serial Transfer C. reti ;UART Rx Complete reti ;UART Data Register Empty reti ;UART Tx complete reti ;ADC Conversion Complete reti ;EEPROM Ready reti ;Analog Comparator reti ;TWI (I²C) Serial Interface reti ;Store Program Memory Redy ;----------------------------------------------------------------------- - ; Start, Power ON, Reset main: ldi r16, low(RAMEND) out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 ; Hier Init-Code eintragen. ldi r16,0b00111111 ;port b ausgang out DDRB,r16 ldi r16,0b01111110 ;SPI: 0=Interrupt, 1=SPI ein, 1=LSB,1=Master, 1=Idle high, 1=fallend flanke, 10=f/64 out SPCR,r16 ldi r16,0x00 out SPSR,r16 rcall LCD_init rcall output ;----------------------------------------------------------------------- -- mainloop: wdr ; Hier den Quellcode eintragen. rjmp mainloop ;----------------------------------------------------------------------- -- output: rcall LCD_data ldi r16,'H' rcall LCD_send ldi r16,'a' rcall LCD_send ldi r16,'l' rcall LCD_send ldi r16,'l' rcall LCD_send ldi r16,'o' rcall LCD_send ret ;----------------------------------------------------------------------- -- LCD_init: ;waten auf Powerup 50ms ldi r16,10 Powerup: rcall wait5ms dec r16 brne Powerup ;... rcall LCD_cmd ldi r16,0b00100100 ;re=1 rcall LCD_send ldi r16,0b00001001 ;0=5dot,0=normal Cursor,1=4 Zeilen display rcall LCD_send ldi r16,0b00100000 ; re=0 rcall LCD_send ldi r16,0b00001111 ;1=Display on, 1=cursor on, 1=blink on rcall LCD_send ldi r16,0b00000001 ; lcd clear rcall LCD_send ldi r16,0b00000010 ; Cursor Home rcall LCD_send ret ;----------------------------------------------------------------------- - LCD_data: ldi r16,0x5F ;(01011111)lsb 1111 1=start, 0=schreiben, 1=daten ,0=abschluss init out SPDR,r16 wdata: sbis SPSR,7 ;warten bis Übertragung vollständig rjmp wdata ret ;----------------------------------------------------------------------- - LCD_cmd: ldi r16,0x1F ;(00011111)lsb 1111 1=start, 0=schreiben, 0=Befehl ,0=abschluss init out SPDR,r16 wcmd: sbis SPSR,7 ;warten bis Übertragung vollständig rjmp wcmd ret ;----------------------------------------------------------------------- - LCD_send: push r17 rcall wait5ms mov r17,r16 ;z.B.: r16 = msb 11010101 lsb (zu sendende daten) swap r17 ;r17 = 01011101 lsb andi r16,0x0F ;r16 = 00000101 lsb andi r17,0x0F ;r17 = 00001101 lsb ; sende 1.teil und warten bis gesendet ist out SPDR,r16 ;1.teil senden teil1: sbis SPSR,7 rjmp teil1 ; sende 2.teil und warte bis gesendet ist out SPDR,r17 ;2.teil senden teil2: sbis SPSR,7 rjmp teil2 pop r17 ret ;----------------------------------------------------------------------- - wait5ms: push r16 push r17 ldi r17,50 loop1: ldi r16,123 loop2: dec r16 brne loop2 dec r17 brne loop1 pop r17 pop r16 ret ;----------------------------------------------------------------------- -
Also es hat also keiner von euch eine Ahnung worin mein Fehler besteht oder?
Ich betreibe hier DIP204-4 im SPI-Mode. Hatte am Anfang auch Probleme damit. Man muss es so initialisieren, wie im 8-Bit Parallelmode. Es hängt ein C-Programm an, welches bei mir läuft. Vielleicht kannst Du was draus entnehmen, meist ist die Initialisierung das Problem.
Danke für den Code, ich werde ihn mir mal zu gemüte führen und hoffe ich werde schlau draus.
Mir fällt gerade noch was ein. Wie hast Du den RESET-Pin beschaltet? Der muss auf H liegen.
Sorry hab ich vergessen, aber ja hängt auf H, bin leider noch nicht dazu gekommen deinen Code näher anzusehen bzw. zu probieren, werde das aber auf alle fälle noch dieses WE machen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.