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

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

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

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)
Funkar prima.