Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: