Hur få fart på 128x64 GLCD?
Postat: 19 mars 2009, 11:48:39
Hej,
efter en hel del arbete med min glcd har jag kommit lika långt som jag var från början. Får inte ut ett skvatt på skärmen.
Min display är en 128*64 grafisk display SG12864C, jag jobbar med en PIC16F690 på breadboard. Min högsta önskan nu är att skriva ut en synlig pixel eller två på displayen. Jag har kollat att alla utgångar fungerar som de ska med lysdioder, jag har kopplat in kontrastpotentiometer, jag har studerat http://www.geocities.com/dinceraydin/dj ... cdsim.html. Dessutom har jag laddat ner alla olika 'glcd.c' på nätet och testat med mina förutsättningar.
Jag kan inte assembler, utan jobbar med c-kod via cc5x. Jag har testat _många_ varianter, men här är den senaste koden.
Mycket tacksam för input om vad jag borde testa. Vad är de vanligaste nybörjarfelen med glcd? Jag har svårt att förstå essensen av timingdiagrammet i manualen (jag är ingen elektriniker egentligen), vad är det viktiga att hålla koll på där? Jag kan tillägga att jag jobbat med två olika displayer med samma resultat.
efter en hel del arbete med min glcd har jag kommit lika långt som jag var från början. Får inte ut ett skvatt på skärmen.
Min display är en 128*64 grafisk display SG12864C, jag jobbar med en PIC16F690 på breadboard. Min högsta önskan nu är att skriva ut en synlig pixel eller två på displayen. Jag har kollat att alla utgångar fungerar som de ska med lysdioder, jag har kopplat in kontrastpotentiometer, jag har studerat http://www.geocities.com/dinceraydin/dj ... cdsim.html. Dessutom har jag laddat ner alla olika 'glcd.c' på nätet och testat med mina förutsättningar.
Jag kan inte assembler, utan jobbar med c-kod via cc5x. Jag har testat _många_ varianter, men här är den senaste koden.
Kod: Markera allt
#include "16F690.h"
#pragma config FOSC = 4 //intern oscillator, RA4, RA5 tillgängliga för I/O
#pragma bit DI @ PORTB.4
#pragma bit ENABLE @ PORTB.5
#pragma bit RW @ PORTA.1
#pragma bit RESET @ PORTA.2
#pragma bit CS1 @ PORTB.6
#pragma bit CS2 @ PORTB.7
void delay(char millisec);
void main( void)
{
TRISA=0;TRISB=0;TRISC=0; //bara utgångar
//Måste initiera dessa för att kunna använda PORTA-PORTC som digital I/O
ANSEL=0;
ANSELH=0;
delay(100);
RESET=0;
delay(100);
RESET=1;
delay(100);
PORTC=0b00111111;delay(1); //display on
DI=0;RW=0;ENABLE=1;CS1=1;CS2=1;RESET=1;
delay(10);
ENABLE=0;nop();nop(); ENABLE=1;nop();nop(); //
PORTC=0b1100.0000;delay(1); //set STARTLINE
DI=0;RW=0;ENABLE=1;CS1=1;CS2=1;RESET=1;
delay(10);
ENABLE=0;nop();nop(); ENABLE=1;nop();nop();
PORTC=0b10111000;delay(1); //set page 0
DI=0;RW=0;ENABLE=1;CS1=1;CS2=1;RESET=1;
delay(10);
ENABLE=0;nop();nop(); ENABLE=1;nop();nop();
PORTC = 0b01000000;delay(1); //set y address 0
DI=0;RW=0;ENABLE=1;CS1=1;CS2=1;RESET=1;
delay(10);
ENABLE=0;nop();nop(); ENABLE=1;nop();nop();
PORTC = 0b01010101;delay(1); //write data
DI=1;RW=0;ENABLE=1;CS1=1;CS2=1;RESET=1;
delay(1);
ENABLE=0;nop();nop(); ENABLE=1;nop();nop();
while(1)
{
}
}
void delay( char millisec)
{
OPTION = 2; /* prescaler divide by 8 */
do {
TMR0 = 0;
while ( TMR0 < 125) /* 125 * 8 = 1000 */
;
} while ( -- millisec > 0);
}