MCP3425, 16bit ADC TWI 읽기
- 관리자
- 2015년 11월 2일
- 2분 분량
// atmega128로 구현한 i2c ADC 읽기
// Main 루틴에서 사용한다
byte TWI_MCP3425_Init(void){ signed int w = 0;
twi_start();
if(twi_send(MCP3425_ADDR + MCP3425_Write)){ twi_stop(); return -1; }
CONFIG.bit.C = 0; // Channel Selection 여기서는 어드레스가 0이다 CONFIG.bit.G = 0; // PGA Gain Selector 여기서는 증폭도가 0이다 CONFIG.bit.S = 2; // Sample Rate Selection 여기서는 16bit CONFIG.bit.OC = 1; // Continuous Conversion Mode CONFIG.bit.RDY= 1; // Initiate a new conversion twi_send(CONFIG.UC); twi_stop(); TWCR = 0;
return 0; }
// MCP3425.C
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
byte TWI_MCP3425_Init(void){ signed int w = 0;
twi_start();
if(twi_send(MCP3425_ADDR + MCP3425_Write)){ twi_stop(); return -1; }
CONFIG.bit.C = 0; // Channel Selection 여기서는 어드레스가 0이다 CONFIG.bit.G = 0; // PGA Gain Selector 여기서는 증폭도가 0이다 CONFIG.bit.S = 2; // Sample Rate Selection 여기서는 16bit CONFIG.bit.OC = 1; // Continuous Conversion Mode CONFIG.bit.RDY= 1; // Initiate a new conversion twi_send(CONFIG.UC); twi_stop(); TWCR = 0;
return 0; }
byte TWI_MCP3425_Read_Config(void){ byte i = 0;
twi_start();
if(twi_send(MCP3425_ADDR + MCP3425_Read)){ twi_stop(); return 0; }
twi_NoData_send(_ACK_); i = TWDR; twi_stop(); TWCR = 0;
return i; }
signed int TWI_MCP3425_Read_Data(void){ signed int w = 0; byte i = 0x80;
twi_start();
if(twi_send(MCP3425_ADDR + MCP3425_Read)){ // twi_stop(); // return -1; }
twi_NoData_send(_ACK_); w = TWDR<<8;
twi_NoData_send(_ACK_); w |= TWDR; while(TWI_MCP3425_Read_Config() & 0x80) _WDR(); twi_stop(); TWCR = 0;
return w; } #endif
//--------------------------------------------------------------------------
// MCP3425.H
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #ifndef _MCP3425_H_ #define _MCP3425_H_ #define MCP3425_ADDR 0xd0 #define MCP3425_Write 0 #define MCP3425_Read 1 union union_type{
unsigned char UC;
struct struct_type{ unsigned char G :2; // 00=1, 01=2, 10=4, 11=8 Gain unsigned char S :2; // 00=12bits, 01=14bits, 10=16bits unsigned char OC :1; // 0=One-shot, 1=Continuous unsigned char C :2; // NA unsigned char RDY :1; // wrinting 1=Initiate, reading 0=Ready }bit;
}CONFIG;
#endif //--------------------------------------------------------------------------
Comments