Usiłuję nawiązać jakąś komunikację z wyświetlaczem graficznym LGM2412. Ma on rozdzielczość 240x128 pikseli. Jednak ze strony wyświetlacza nie ma odzewu. Poniżej kod:
Pracuję na wewnętrznym taktowaniu 4MHz. Datasheet od tego wyświetlacza jest tu. Sterownik na module LCD to T6963C. Teoretycznie przedstawiony program powinien zresetować LCD i wyświetlić migający kursor o wybranym rozmiarze.
Osoba, która udzieli pomocnej odpowiedzi otrzyma 100 punktów.
.nolist
.include "m16def.inc"
.list
.cseg
;sterowanie LCD
.EQU WR = 7
.EQU RD = 6
.EQU CE = 5
.EQU C_D = 4
.EQU RST = 3
.EQU FS = 2
.EQU STER_LCD = PORTA
.EQU STER_LCD_DDR = DDRA
;dane LCD
.EQU DANE_LCD = PORTB
.EQU DANE_LCD_DDR = DDRB
.EQU DANE_LCD_PIN = PINB
.org 0 rjmp RESET
reset_LCD:
cbi STER_LCD,RST
ldi R17,254
delay:
inc R17
brne delay
sbi STER_LCD,RST
ret
zajety_tryb_zwykly:
;szyna danych LCD - jako wejście
clr R17
out DANE_LCD_DDR, R17 ;DDRB
ser R17
out DANE_LCD, R17 ;PORTB
sbi STER_LCD,WR
sbi STER_LCD,C_D
cbi STER_LCD,RD
nop
nop
cbi STER_LCD,CE
ldi R16,0x03
oczekiwanie:
in R17,DANE_LCD_PIN
andi R17,0x03
cpse R17,R16
rjmp oczekiwanie
sbi STER_LCD,CE
ret
zajety_tryb_auto:
;szyna danych LCD - jako wejście
clr R17
out DANE_LCD_DDR, R17 ;DDRB
ser R17
out DANE_LCD, R17 ;PORTB
sbi STER_LCD,WR
sbi STER_LCD,C_D
cbi STER_LCD,RD
nop
nop
cbi STER_LCD,CE
ldi R16,0x0C
oczekiwanie_:
in R17,DANE_LCD_PIN
andi R17,0x0C
cpse R17,R16
rjmp oczekiwanie_
sbi STER_LCD,CE
ret
wyslij_polecenie:
;w R17 wysyłane polecenie
sbi STER_LCD,RD
cbi STER_LCD,WR
sbi STER_LCD,C_D
;szyna danych LCD - jako wyjście
ser R16
out DANE_LCD_DDR,R16
out DANE_LCD,R17
nop
nop
cbi STER_LCD,CE
nop
nop
sbi STER_LCD,CE
ret
wyslij_dane:
;w R17 wysyłane dane
sbi STER_LCD,RD
cbi STER_LCD,WR
cbi STER_LCD,C_D
;szyna danych LCD - jako wyjście
ser R16
out DANE_LCD_DDR,R16
out DANE_LCD,R17
nop
nop
cbi STER_LCD,CE
nop
nop
sbi STER_LCD,CE
ret
RESET:
ldi R17, high(RAMEND) ;inicjalizacja wskaźnika stosu
ldi R16, low(RAMEND)
out SPH, R17
out SPL, R16
;ldi R20,0xFF
;out DDRA,R20
;out PORTA,R20 ;dioda zgaszona i port ustawiony jako wyjście
ldi R17, 0x00
out DANE_LCD_DDR, R17 ;DDRB
ldi R17, 0xFF
out DANE_LCD, R17 ;PORTB
;konfiguracja linii sterujących LCD
clr R17
ldi R17,(1<<RD)|(1<<WR)|(1<<CE)|(1<<C_D)|(1<<RST)|(1<<FS)
out STER_LCD_DDR,R17
out STER_LCD,R17
rcall reset_LCD
rcall zajety_tryb_zwykly
ldi R17,0x93 ;cursor on, blink on
rcall wyslij_polecenie
rcall zajety_tryb_zwykly
ldi R17,0x83 ;AND mode
rcall wyslij_polecenie
rcall zajety_tryb_zwykly
ldi R17,0xA2 ;3-line cursor
rcall wyslij_polecenie
petla_glowna:
rjmp petla_glowna
Pracuję na wewnętrznym taktowaniu 4MHz. Datasheet od tego wyświetlacza jest tu. Sterownik na module LCD to T6963C. Teoretycznie przedstawiony program powinien zresetować LCD i wyświetlić migający kursor o wybranym rozmiarze.
Osoba, która udzieli pomocnej odpowiedzi otrzyma 100 punktów.