Sida 2 av 2

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 15:02:09
av Adis
Hmm!
Manual skrev:Display Start Line (Z Address)
Z address (AC0~AC5) of the display data RAM is set in the display start line register and displayed at the top of the screen.
Som du säger, skicka noll, men det gick ju inte :S Det var därför jag blev så fundersam!
Displayen är i två halvor. Varje halva är indelad i 8 rader. Varje rad har 8 vertikala pixlar. Och det är så man skriver till dem.

Håller på att bli galen. Ska testa så får jag se.

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 15:15:53
av ToPNoTCH
Dags att du visar lite mer kod :o

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 15:23:07
av Adis
Det finns inte mer kod, det jag skrev tidigare är allt typ... Ville bara få ut något på skärmen, sen är resten enkelt.

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 15:46:33
av sodjan
> Som du säger, skicka noll, men det gick ju inte

Varför går inte det och vad menar du igentligen med att "skicka noll" ???

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 18:36:58
av Adis
Skicka data till displayen (D0-D7) 0b000000

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 18:42:48
av sodjan
Och varför går inte det ?
Jag fattar noll just nu...

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 18:47:42
av Adis
Alltså om man skall sätta på en pixel så skall man skicka in ett data-värde. Nu så är alla pixlar på redan från start. Om jag nu skickar in 0b00000001 till en viss y och x adress så skall en viss pixel tändas och eftersom de andra bitarna i datan som skickas är "noll" så borde dessa pixlar släckas. Men de gör dem ju inte, eller de gjorde inte det. Har inte testat än att rensa hela skärmen först då jag inte har sakerna tillgängliga här :) Återkommer när jag kommit dit.

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 22:03:23
av ToPNoTCH
Okay...

Posten började med att skärmen var full i pixlar och övergår nu till att du egentligen inte kan skriva till den alls.

Rensandet har egentligen inte med ditt skrivande att göra, utan var mer tips på din ursprungliga fråga.

Du kan strunta i rensandet tills du får ut grejorna på skärmen överhuvudtaget, vilket inte verkar vara fallet här.

Det är lätt att man hamnar på sniskan i tänkandet och de enkla felen blir mindre uppenbara.

Exempelvis har du koll på kontrasten. ??
Om den är maxad så blir alla pixlar fyllda oavsett vad displayminnet innehåller.

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 22:20:41
av sodjan
> Nu så är alla pixlar på redan från start.

Menar du *exakt* alla ?
Normalt är det ca hälften, lite slumpartat över hela skärmen
(dock med ungefär samm a "mönster" vid varje power-on).

Det låter som ett kontrastproblem...

Re: En lurig ATM12864D (128x64 LCD)

Postat: 25 april 2010, 23:32:13
av Adis
Hmm, problemet är inte att jag inte kan skriva till den, egentligen så vet jag inte om jag skrivit något till den eftersom alla pixlar är på, och då kan jag ju inte se om något verkligen är skrivet.

Men som ni säger, kontrasten, den är ju full nu :D Ska se om det blir någon skillnad med en pot.

Re: En lurig ATM12864D (128x64 LCD)

Postat: 26 april 2010, 07:55:05
av TomasL
Hmm. det är inte så att du har ett kontrastproblem?
Du kan normalt inte ha kontrasten på "fullt", nånstans i mitten, brukar bli bra.

Så här ser vår kod ut

Kod: Markera allt

//----- defines ------------------------------------------
// #define GLCD_UseBusyFlag
#define GLCD_DATA_IO PORTB
#define GLCD_DATA_DD TRISB  
#define GLCD_CTRL_IO PORTD
#define GLCD_CTRL_IO_BIT PORTDbits
#define GLCD_CTRL_DD TRISD
 

#define GLCD_DATA_READ  255
#define GLCD_DATA_WRITE 0

#define GLCD_Display128x64


#ifdef GLCD_Display128x64
	#define GLCD_SEL_ON 	 1
	#define GLCD_SEL_OFF  0

	#define GLCD_EN_ON 	 1
	#define GLCD_EN_OFF   0

	#define GLCD_RS_DATA  1
	#define GLCD_RS_CTRL  0

	#define GLCD_RW_READ  1
	#define GLCD_RW_WRITE 0

	#define GLCD_BUSY RD7
	#define GLCD_DOFF RD5
	#define GLCD_RES  RD4

	#define GLCD_SELBITS_SELECT 0b00001100

	#define GLCD_BUSYB 		 0b10000000
	#define GLCD_DOFFB 		 0b00100000
	#define GLCD_RESB  		 0b00010000
#endif
        void   glcd_init(void);
	void   glcd_open(void);
	void   glcd_close(void);
	void   glcd_clear_openclose(void);
        extern unsigned char glcd_in_use;

Kod: Markera allt

void 				
unsigned char glcd_in_use; // 0=not in use 
unsigned char glcd_ctrl_io;//	1=in use 

glcd_init(void) {    
	
	GLCD_RW = GLCD_RW_WRITE;
	GLCD_CTRL_DD = 0;
	GLCD_DATA_DD  = GLCD_DATA_WRITE;
	GLCD_DATA_IO  = 0;
	GLCD_CTRL_IO  = 0;
	GLCD_RST = 0; // reset display
	Delay10KTCYx( 80 );  // delay in ms	
	GLCD_RST = 1;
	
	glcd_in_use=0;
	glcd_gmode = GLCD_B_W;
	
#ifndef GLCD_inverted
		glcd_gmodemask=0;
#endif
#ifdef GLCD_inverted
		glcd_gmodemask=255;
#endif
	
	glcd_clipx=0;
	glcd_clipy=0;

	#ifdef GLCD_Display128x64
		glcd_clipx2=128;
		glcd_clipy2=8;
	#endif
	#ifdef GLCD_Display256x64
		glcd_clipx2=256;
		glcd_clipy2=8;
	#endif
	#ifdef GLCD_Display128x128
		glcd_clipx2=128;
		glcd_clipy2=16;
	#endif

	glcd_clear_openclose();
}
void	glcd_clear_all(void) {
	#ifdef GLCD_Display128x64
		glcd_clear( 0, 0, 128, 8);
	#endif
	#ifdef GLCD_Display256x64
		glcd_clear( 0, 0, 256, 8);
	#endif
	#ifdef GLCD_Display128x128
		glcd_clear( 0, 0, 128, 16);
	#endif

void 	glcd_clear_openclose(void) {
	glcd_open();
	glcd_clear_all();
	glcd_close();
}
void 				glcd_close(void) {
	glcd_in_use=0;
}
void	glcd_open(void) {
	glcd_in_use = 1;	 // display in use
	GLCD_CS1 = GLCD_SEL_ON; 	
	GLCD_CS2 = GLCD_SEL_ON;
	glcd_write_com(GLCD_ON);
}

Re: En lurig ATM12864D (128x64 LCD)

Postat: 27 april 2010, 20:36:31
av Adis
Pinsamt fel. Kontrasten + LATD (data output) (PIC18F4550) :oops:
Funkar prima.