AVR & ATmega

MCP3426A7 control Program(AVR Atmega128) Software

EP 기술연구소 2014. 1. 14. 13:03

/*****************************************************************
 Device  : MCP3426/7/8  16-Bit ADC
*****************************************************************/
//#define  ADC_SDA   PORTB.2  // 12 =
//#define  ADC_Data  PINB.2
//#define  ADC_SCL   PORTB.3  // 13 =

#define  SADC_SDA_input DDRB &= 0b11111011
#define  SADC_SDA_output DDRB |= 0b00000100

void SADC_Start()
{
 SADC_SDA_output;  // Serial data pin set = output
 ADC_SDA = 0;
 delay_us(5);
 ADC_SCL = 0;
 delay_us(5);
}

void SADC_Stop()
{
    SADC_SDA_output;  // Serial data pin set = output
 ADC_SCL = 1;
 delay_us(1);
 ADC_SDA = 1;
}

void WriteByte(unsigned char comm)
{
 unsigned char i;
 
 SADC_SDA_output;  // Serial data pin set = output
 for(i=0;i<=7;i++){
  ADC_SCL = 0;
  if(comm & 0x80) ADC_SDA = 1;
  else ADC_SDA = 0;
  comm <<= 1;
  ADC_SCL = 1;  // Data clock
  delay_us(1);
 }
 ADC_SCL = 0;
 SADC_SDA_input;  // Serial data pin set = input
 ADC_SCL = 1;
 delay_us(1);
 ADC_SCL = 0; //while(ADC_Input==0) delay_us(10);
}

unsigned char Read_Byte()
{
 unsigned char i, k;
 
 SADC_SDA_input;  // Serial data pin set = input
 for(i=0;i<=7;i++){
  k <<= 1;
  ADC_SCL = 1;  // Data clock
  if(ADC_Input) k |= 1;
  else k &= 0xFE;
  ADC_SCL = 0;
 }
 SADC_SDA_output;  // Serial data pin set = output
 ADC_SDA = 0;
 delay_us(1);
 ADC_SCL = 1;
 delay_us(1);
 ADC_SCL = 0;
 delay_us(1);
 
 return k;
}

//==========================================
void SADC_Initial()
{
 SADC_Start();
    WriteByte(0b11011110);  // Read
    WriteByte(0b00011000);  // Read
    SADC_Stop();
}


//unsigned long int SADC_Buffer=0;
//unsigned int SADC_Data, SADC_Highvolt;
//unsigned char SADC_Count;

void SADC_Control()
{
 unsigned char i, k;
 unsigned int da;
 
 SADC_Initial();
 /*
 #asm("cli")
 SADC_Start();
    WriteByte(0b11011111);  // Read
    delay_us(10);
    //da = i2c_read(1);  //   ACK
    da = Read_Byte();
 da <<= 8;
    //da |= i2c_read(0);  //  NACK
 da |= Read_Byte();
 SADC_Stop();
 #asm("sei")
 SADC_Data = da;
 //mcp_3426_init_zelle_1();       
    */
    return;
 
}
//#end