top of page

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

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#ifndef _MCP3425_C_ #define _MCP3425_C_ #include "mcp3425.h"

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


bottom of page