Psst.. new poll here.
[email protected] webmail now available. Want one? Go here.
Cannot use outlook/hotmail/live here to register as they blocking our mail servers. #microsoftdeez
Obey the Epel!
Paste
Pasted as C by sfe_kav ( 14 years ago )
#define SPI_CS 9 //conected to #8 leg of chip
#define SPI_CLK 11 //conected to #10 leg of chip
#define SPI_IN 12 //connected to #11 leg of chip
#define SPI_OUT 10 //conected to #8 leg of chip
#define SPI_DELAY 1
//char b_mask[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
char b_mask[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
boolean getBit(char b,char bnum){
if( b & b_mask[bnum] ) return HIGH; else return LOW;
}
char setBit(char b,char bnum, boolean val){
if(val) b|=b_mask[bnum]; else
b &= ~(b_mask[bnum]);
return b;
}
void init_spi(){
pinMode(SPI_CS, OUTPUT);
pinMode(SPI_CLK, OUTPUT);
pinMode(SPI_IN, INPUT);
pinMode(SPI_OUT, OUTPUT);
digitalWrite(SPI_CS,HIGH);
digitalWrite(SPI_CLK,LOW);
//do set end reset auto black level (is it realy needed?)
delay(100);
}
char read_reg(char r_num){
char result=0;
int i;
digitalWrite(SPI_CS,LOW);
//write adres
for(i=0;i<8;i++){
//write bit
digitalWrite(SPI_OUT,getBit(r_num,i));
//delay
delayMicroseconds(SPI_DELAY);
//clk=1
digitalWrite(SPI_CLK,HIGH);
//delay
delayMicroseconds(SPI_DELAY);
//clk=0
digitalWrite(SPI_CLK,LOW);
}
//delay btw
for(i=0;i<8;i++){
//read bit
//delay
delayMicroseconds(SPI_DELAY);
result=setBit(result,i,digitalRead(SPI_IN));
//clk=1
digitalWrite(SPI_CLK,HIGH);
//delay
delayMicroseconds(SPI_DELAY);
//clk=0 ,read bit
digitalWrite(SPI_CLK,LOW);
}
digitalWrite(SPI_CS,HIGH);
return result;
}
void write_reg(char r_num,char val){
int i;
digitalWrite(SPI_CS,LOW);
//write address
for(i=0;i<8;i++){
//write bit
digitalWrite(SPI_OUT,getBit(r_num,i));
//delay
delayMicroseconds(SPI_DELAY);
//clk=1
digitalWrite(SPI_CLK,HIGH);
//delay
delayMicroseconds(SPI_DELAY);
//clk=0
digitalWrite(SPI_CLK,LOW);
}
//delay btw
//write value
for(i=0;i<8;i++){
//write bit
digitalWrite(SPI_OUT,getBit(val,i));
//delay
delayMicroseconds(SPI_DELAY);
//clk=1
digitalWrite(SPI_CLK,HIGH);
//delay
delayMicroseconds(SPI_DELAY);
//clk=0
digitalWrite(SPI_CLK,LOW);
}
digitalWrite(SPI_CS,HIGH);
}
void init_disp(){
char vv=0x38;//8 4 2 1
write_reg(0x00,vv);
//vv=0x00;
//write_reg(0x01,vv);
vv=0x00;
write_reg(0x04,vv);
vv=0x01;
write_reg(0x05,vv);
char x=25;
vv=0x01;
write_reg(0x06,x);
write_reg(0x07,0x1D);
vv=0x01;
write_reg(0x06,x+1);
write_reg(0x07,0x0B);
vv=0x01;
write_reg(0x06,x+2);
write_reg(0x07,0x17);
}
void setup(){
delay(5000);
Serial.begin(9600);
init_spi();
init_disp();
}
void loop(){
char v=0;
Serial.println("tick");
write_reg(0x00,0x28);//28 for external sync 08 for internal
delay(500);
write_reg(0x00,0x20); //20 for external 00 for internal
delay(500);
v=read_reg(0x80);
Serial.println((int)v);
v=read_reg(0x81);
Serial.println((int)v);
v=read_reg(0xA0);
Serial.println((int)v);
}
Revise this Paste