Witam ostatnio wpadł mi w ręce wyświetlacz LCD alfanumeryczny 2x16 więc spróbowałem go zaprogramować.
Najpierw ponieważ nie wiedziałem czy jest sprawny pobrałem program
test napisany w C z neta. Jednak pomimo tego że wszystko dokładnie podłączyłem a program miał wypisać na LCD napis Hello World
efekt działania był taki że zamiast jednej czarnej linii która pojawiała się normalnie po włączeniu zasilania dostałem 2 czarne linie.
Pomyślałem więc że może z tym programem coś nie tak. Postanowiłem napisać swój tym razem w assemblerze program miał za zadanie tylko i wyłącznie komendą Clear Display 00000001 wyczyścić ekran.
Jednak LCD ani drgną. Zamieszczam więc program napisany
przez mnie w asmie i bardzo proszę sprawdzić czy to ja popełniłem
błąd i źle napisałem program czy jednak z LCD jest coś nie tak.
Z wyświetlaczem komunikuje się 8-bitami przez linie PD0..PD7
numery pinów odpowiadają numerom szyny danych. Aby lepiej czytało się listing i szło odgadnąć moje intencje załączyłem komentarze.
Ostatnia rzecz o która chce zapytać to to czy jeżeli nóżka LCD Vo
musi być podpięta do GND żeby kontrast był w miarę dobry ( przy regulowaniu potencjometrem nie widać nic ) to wyświetlacz ma ujemne napięcie dla kontrastu. Jeśli tak to czy może to być powodem nie działania
LCD.
Najpierw ponieważ nie wiedziałem czy jest sprawny pobrałem program
test napisany w C z neta. Jednak pomimo tego że wszystko dokładnie podłączyłem a program miał wypisać na LCD napis Hello World
efekt działania był taki że zamiast jednej czarnej linii która pojawiała się normalnie po włączeniu zasilania dostałem 2 czarne linie.
Pomyślałem więc że może z tym programem coś nie tak. Postanowiłem napisać swój tym razem w assemblerze program miał za zadanie tylko i wyłącznie komendą Clear Display 00000001 wyczyścić ekran.
Jednak LCD ani drgną. Zamieszczam więc program napisany
przez mnie w asmie i bardzo proszę sprawdzić czy to ja popełniłem
błąd i źle napisałem program czy jednak z LCD jest coś nie tak.
Z wyświetlaczem komunikuje się 8-bitami przez linie PD0..PD7
numery pinów odpowiadają numerom szyny danych. Aby lepiej czytało się listing i szło odgadnąć moje intencje załączyłem komentarze.
Ostatnia rzecz o która chce zapytać to to czy jeżeli nóżka LCD Vo
musi być podpięta do GND żeby kontrast był w miarę dobry ( przy regulowaniu potencjometrem nie widać nic ) to wyświetlacz ma ujemne napięcie dla kontrastu. Jeśli tak to czy może to być powodem nie działania
LCD.
;Rs = PB.0
;E = PB.1
;Linia R/W podłączona do GND
.include "m8def.inc"
.cseg
.org 0x00 rjmp Reset
Wait_ms:
W0:
ldi r17, 250
W1:
nop
dec r17
brne W1
dec r16
brne W0
ret
Reset:
ldi r16, low(RAMEND)
ldi r17, high(RAMEND)
out SPL, r16
out SPH, r17
ldi r16, 0xff ;Ustawienie
out DDRD, r16 ;jako wyjść D
sbi DDRB, 0 ;Ustawienie RS
sbi DDRB, 1 ;i RS jako wyjść
ldi r16, 0x00 ;E i RS
out PORTB, r16 ;w stanie niskim
ldi r16, 0x01 ;instrukcja Clear Display
out PORTD, r16 ;Na 8 bitów Danych
ldi r16, 1
rcall Wait_ms ;Odczekanie 1ms
ldi r16, 0x02 ;Ustawienie E
out PORTB, r16 ;w stan wysoki
ldi r16, 1
rcall Wait_ms ;Odczekanie 1 ms
cbi PORTB, 1 ;Ustawienie E w stan niski
Petla:
rjmp Petla