logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Inicjalizacja KS0108B 128x64 LCD w C/Bascom - błędne pozycjonowanie grafiki

autoservice 11 Lip 2006 23:31 3312 4
REKLAMA
  • #1 2811996
    autoservice
    Poziom 20  
    Posty: 516
    Pomógł: 7
    Ocena: 16
    Witam
    Czy ma ktoś może jakieś przykłady inicjalizacji tego lcd? może być C lub Bascom. lcd rysuje mi co chcesz, ale czasami pojawią się krzaki ale najwiekszy problem to to, że za każym razem zaczyna rysować od innego miejsca ( zarówno kolumny jak i wiersza :( niby ustawiam za każdym razem kolumne i wiersz ale coś chyba nie tak...
    Dziękuję.
    Pzdr.
  • REKLAMA
  • REKLAMA
  • #3 2812222
    autoservice
    Poziom 20  
    Posty: 516
    Pomógł: 7
    Ocena: 16
    ..wlasnie na tym symulatorze dziala idealnie! zawsze w tym samym miejscu zaczyna "rysowac",a w realu tak jakby lcd czytal sobie stara zawartosc pamieci, w dodatku zaczyna rysowac w losowo wybranych miejsach, szczegolnie jesli chodzi o wiersze ( page'y )
    tyle tez ze w tym symulatorze mamy dowolne czasy....
    w realu ustawilem miedzy wszystkimi komendami 20us, no procz opadajacego zbocza na E
    pzdr.

    Dodano po 1 [godziny] 5 [minuty]:

    ..ok wiersze jeszcze ustawiaja sie OK, ale kolumny danej polowki (0..63) juz nie, lcd po zalaczeniu zasilania rozpoczyna od ostatnio zapamietanej kolumny :( a caly czas w petli podaje ze ma byc np 5ta, jak ustawiac ten samoinkrementujacy sie licznik?
    pzdr.
  • REKLAMA
  • #4 2812552
    Zaquadnik
    Poziom 27  
    Posty: 998
    Pomógł: 103
    Ocena: 25
    Tu masz przykład inicjalizacji i narysowania obrazka, ale w asemblerze :] Słowem komentarza niech będzie to, że najpierw musisz wysłać bajt inicjalizujący. Później wyświetlacz obsługujesz tak : sygnału CS1 i CS2 obsługują odpowiednie połówki ekranu. Każda połówka ma 8 stron po 64 bajty. Rysujesz w danej stronie od lewej do prawej umieszczając 1 na pozycji , gdzie piksel ma być zapalony. Najmłodsze bity znajdują się, o ile pamiętam, najwyżej. W głównym programie realizowane jest rysowanie obrazka (rozkaz po rozkazie, łopatologicznie).
    
    .include "m8def.inc"
    
    .equ 	E = PB4
    .equ 	CS1 = PB0
    .equ	CS2 = PB1
    .equ	RS = PB3
    .equ	RST = PB2
    .equ	D_M = PORTC	;mlodsza czesc PC
    .equ	D_S = PORTD	;starsza czesc PD
    
    
    			ldi R16,high(RAMEND)  ;konieczna inicjalizacja stosu
    			out SPH,R16			  ;wierzcholek na koncu RAMu
    			ldi R16,low(RAMEND)	  ;stos "zwisajacy", jak w x86
    			out SPL,R16
    
    			ldi R16,0x1F		  ;inicjalizacja portow
    			out DDRB,R16
    			ldi R16,0x0F
    			out DDRC,R16
    			ldi R16,0xF0
    			out DDRD,R16
    
    			rcall LCDinit
    			rcall LCDclear
    
    Program:	
    			cbi PORTB,CS2
    			cbi PORTB,RS
    			ldi R16,0x01
    			rcall Send
    			sbi PORTB,RS
    			ldi R16,0x80
    			rcall Send
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x60
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x80
    			rcall Send
    			rcall Send
    			rcall Send
    
    			rcall ZerAdr									
    			ldi R17,0x01
    			rcall ChangePage
    			ldi R17,0x3F
    			rcall ChangeAdr
    			cbi PORTB,CS1
    			
    			ldi R16,0x02
    			rcall Send
    
    			rcall ZerAdr
    			cbi PORTB,CS2
    
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x01
    			rcall Send
    			rcall Send
    			ldi R17,0x0D
    			rcall ChangeAdr
    			cbi PORTB,CS2
    			ldi R16,0x01
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			ldi R16,0x0F
    			rcall Send
    			rcall Send
    			ldi R16,0x1E
    			rcall Send
    			ldi R16,0x3E
    			rcall Send
    			ldi R16,0x7C
    			rcall Send
    			ldi R16,0xF8
    			rcall Send
    			rcall Send
    			ldi R16,0xF0
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			ldi R16,0x80
    			rcall Send
    
    			ldi R17,0x02
    			rcall ChangePage
    			ldi R17,0x19
    			rcall ChangeAdr
    			cbi PORTB,CS2
    
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x0F
    			rcall Send
    			ldi R16,0xFF
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0xFE
    			rcall Send
    			ldi R16,0xF8
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    
    			ldi R17,0x03
    			rcall ChangePage
    			ldi R17,0x08
    			rcall ChangeAdr
    			cbi PORTB,CS2
    
    			ldi R16,0x80
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    			ldi R16,0xF0
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x70
    			rcall Send
    			ldi R16,0x20
    			rcall Send
    			ldi R17,0x1B
    			rcall ChangeAdr
    			cbi PORTB,CS2
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0xFF
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    
    			ldi R17,0x04
    			rcall ChangePage
    			ldi R17,0x02
    			rcall ChangeAdr
    			cbi PORTB,CS2
    
    			ldi R16,0x20
    			rcall Send
    			ldi R16,0x70
    			rcall Send
    			ldi R16,0xF8
    			rcall Send
    			ldi R16,0xFC
    			rcall Send
    			ldi R16,0xFE
    			rcall Send
    			ldi R16,0xFF
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x7F
    			rcall Send
    			rcall Send
    			ldi R16,0xFF
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0xFD
    			rcall Send
    			ldi R16,0xF8
    			rcall Send
    			ldi R16,0xF0
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			ldi R16,0x80
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			ldi R16,0xF0
    			rcall Send
    			ldi R16,0xFC
    			rcall Send
    			ldi R16,0xFF
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x7F
    			rcall Send
    			ldi R16,0x1F
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    
    			ldi R17,0x05
    			rcall ChangePage
    			ldi R17,0x34
    			rcall ChangeAdr
    			cbi PORTB,CS1
    
    			ldi R16,0x80
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    			ldi R16,0xF0
    			rcall Send
    			ldi R16,0xF8
    			rcall Send
    			ldi R16,0xFC
    			rcall Send
    			ldi R16,0xF8
    			rcall Send
    			ldi R16,0xF0
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			rcall Send
    			ldi R16,0x80
    			rcall Send
    
    			ldi R17,0x00
    			rcall ChangeAdr
    			cbi PORTB,CS2
    
    			ldi R16,0x80
    			rcall Send
    			ldi R17,0x05
    			rcall ChangeAdr
    			cbi PORTB,CS2
    			ldi R16,0x01
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			ldi R16,0x0F
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x01
    			rcall Send
    			ldi R17,0x10
    			rcall ChangeAdr
    			cbi PORTB,CS2
    			ldi R16,0x01
    			rcall Send
    			ldi R16,0x83
    			rcall Send
    			ldi R16,0xC7
    			rcall Send
    			ldi R16,0xCF
    			rcall Send
    			ldi R16,0xFF
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0xFB
    			rcall Send
    			ldi R16,0xF0
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			ldi r16,0x80
    			rcall Send
    
    			ldi R17,0x06
    			rcall ChangePage
    			ldi R17,0x2C
    			rcall ChangeAdr
    			cbi PORTB,CS1
    
    			ldi R16,0x80
    			rcall Send
    			ldi R16,0xC0
    			rcall Send
    			ldi R16,0xE0
    			rcall Send
    			ldi R16,0xF0
    			rcall Send
    			ldi R16,0xF8
    			rcall Send
    			ldi R16,0xFC
    			rcall Send
    			ldi R16,0xFE
    			rcall Send
    			ldi R16,0xFF
    			rcall Send
    			rcall Send
    			ldi R16,0x7F
    			rcall Send
    			ldi R16,0x3F
    			rcall Send
    			ldi R16,0x1F
    			rcall Send
    			ldi R16,0x0F
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			rcall Send
    			ldi R16,0x0F
    			rcall Send
    			ldi R16,0x1F
    			rcall Send
    			rcall Send
    			ldi R16,0x3F
    			rcall Send
    			rcall Send
    
    			ldi R17,0x00
    			rcall ChangeAdr
    			cbi PORTB,CS2
    
    			ldi R16,0x3F
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x7F
    			rcall Send
    			rcall Send
    			ldi R16,0x7E
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0xFE
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x7E
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x3F
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0x1F
    			rcall Send
    			rcall Send
    			ldi R16,0x0F
    			rcall Send
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x01
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			ldi R16,0x0F
    			rcall Send
    			ldi R16,0x1F
    			rcall Send
    			ldi R16,0x3F
    			rcall Send
    			ldi R16,0x7F
    			rcall Send
    			ldi R16,0xFF
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			rcall Send
    			ldi R16,0xFE
    			rcall Send
    			ldi R16,0xFC
    			rcall Send
    			ldi R16,0x78
    			rcall Send
    			ldi R16,0x30
    			rcall Send
    			
    			ldi R17,0x07
    			rcall ChangePage
    			ldi R17,0x2D
    			rcall ChangeAdr
    			cbi PORTB,CS1
    
    			ldi R16,0x01
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			ldi R16,0x0F
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x01
    			rcall Send
    
    			ldi R17,0x20
    			rcall ChangeAdr
    			cbi PORTB,CS2
    
    			ldi R16,0x01
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x07
    			rcall Send
    			ldi R16,0x03
    			rcall Send
    			ldi R16,0x01
    			rcall Send
    
    End:
    			rjmp End
    
    			
    
    
    
    LCDinit:
    			cbi PORTB,RST
    			nop
    			sbi PORTB,RST
    			cbi PORTB,CS1
    			cbi PORTB,CS2
    			cbi PORTB,RS
    			cbi PORTB,E
    			ldi R16,0x3F
    			rcall Send
    			sbi PORTB,CS1
    			sbi PORTB,CS2
    			sbi PORTB,RST
    			ret
    
    
    Send:
    			mov R17,R16
    			andi R17,0x0F
    			out	D_M,R17
    			mov R17,R16
    			andi R17,0xF0
    			out D_S,R17
    			sbi PORTB,E
    			nop
    			nop
    			nop
    			cbi PORTB,E
    			ret
    
    LCDclear:
    			cbi PORTB,CS1
    			cbi PORTB,CS2
    			cbi PORTB,RS
    			ldi R16,0xB8
    			rcall Send
    			ldi R16,0x40
    			rcall Send
    			sbi PORTB,RS
    			ldi R21,0x00
    	Pion:
    			ldi R20,0x40
    	 Poziom:
    			ldi R16,0x00
    			rcall Send
    			dec R20
    			brne Poziom
    			cbi PORTB,RS
    			ldi R16,0x41
    			rcall Send
    			ldi R16,0xB8
    			or R16,R21
    			rcall Send
    			sbi PORTB,RS
    			inc R21
    			cpi R21,0x09
    			brne Pion
    			cbi PORTB,RS
    			ldi R16,0xB8
    			rcall Send
    			ldi R16,0x40
    			rcall Send
    			sbi PORTB,RS
    			sbi PORTB,CS1
    			sbi PORTB,CS2
    			ret
    
    			
    ZerAdr:    
    			cbi PORTB,CS1
    			cbi PORTB,CS2
    			cbi PORTB,RS
    			ldi R16,0x40
    			rcall Send
    			sbi PORTB,RS
    			sbi PORTB,CS1
    			sbi PORTB,CS2	
    			ret
    
    ChangeAdr:
    			cbi PORTB,CS1
    			cbi PORTB,CS2
    			cbi PORTB,RS
    			ldi R16,0x40
    			or R16,R17
    			rcall Send
    			sbi PORTB,CS1
    			sbi PORTB,CS2
    			sbi PORTB,RS
    			ret
    
    ChangePage:
    			cbi PORTB,CS1
    			cbi PORTB,CS2
    			cbi PORTB,RS
    			ldi R16,0xB8
    			or R16,R17
    			rcall Send
    			sbi PORTB,CS1
    			sbi PORTB,CS2
    			sbi PORTB,RS
    			ret
    

    A co do licznika, po prostu wysyłasz rozkaz 'set address' (czy jakoś tak) ustawiający go na 0. Na elenocie jest notka katalogowa sterownika KS108 i tam jest wszystko :) Tutaj załatwia to procedura ZerAdr :)
    Pozdrawiam :)
  • #5 2812586
    juntom
    Poziom 19  
    Posty: 216
    Pomógł: 35
    Ocena: 27
    Inicjacja lcd w c dla ARM
    void glcd_init (void)
    {
    AT91C_BASE_PIOA->PIO_PER=D0|D1|D2|D3|D4|D5|D6|D7|EN|RW|DI|CS1|CS2; 	// enable pio to control pin 
    AT91C_BASE_PIOA->PIO_OER=D0|D1|D2|D3|D4|D5|D6|D7|EN|RW|DI|CS1|CS2;	// otuput mode
    AT91C_BASE_PIOA->PIO_PPUER=D0|D1|D2|D3|D4|D5|D6|D7|EN|RW|DI|CS1|CS2;    // enable pullup
    glcd_CS2(1);
    glcd_CS1(0);  	  			   				// obsluga lewej czesci lcd
    glcd_write_instr(0x3e);							// lcd wyłączony
    glcd_write_instr(0x40);							// adres Y=0
    glcd_write_instr(0xb8);							// adres X=0
    glcd_write_instr(0xc0);							// offset Z=0
    glcd_write_instr(0x3f);							// lcd wlaczony
    glcd_CS1(1);
    glcd_CS2(0);                 						// obsluga prawej czesci lcd
    glcd_write_instr(0x3e);							// lcd wylaczony
    glcd_write_instr(0x40);							// adres Y=0
    glcd_write_instr(0xb8);							// adres X=0
    glcd_write_instr(0xc0);							// offset Z=0
    glcd_write_instr(0x3f);							// lcd wlaczony
    glcd_CS2(1);                 	
    glcd_clear();
    }
    

    pozdr.
REKLAMA