MCP3422 için örnek program

Başlatan Salih, 01 Nisan 2011, 14:55:26

Salih

Arkadaşlar forumda bu konuda örnek yoktu denediğim bir programı paylaşmak istedim.
MCP3422 iki kanallı bir ADC entegresidir. I2C haberleşmesi kullanır. 12  ~ 18 Bit arası çözünürlüğü ayarlanabilir.
Ayrıca içinde kazancı ayarlanabilir opamp'ıda vardır. Kazanç x1,x2,x4,x8 olarak ayarlanabilir.
Aşağıdaki program test edilmiştir.
Aşağıdaki programda bir okuma süresini ölçtüm.Süre 30ms.
#include <16F877.h>
#Fuses HS,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP
#USE DELAY( clock = 20000000 ) 
#USE I2C( MASTER , SCL = PIN_C3 , SDA = PIN_C4, force_hw,fast=200000) 

#define DAL_SCL PIN_C3 
#define DAL_SDA PIN_C4 
#include <LCD.c> 
// 0 -> ACK, 1 -> NO ACK  
#define _ACK      0 
#define _NOACK 1 

void main( void ) 
{ 
   setup_psp(PSP_DISABLED); 
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32);
   setup_timer_1(T1_DISABLED);  
   setup_timer_2(T2_DISABLED,0,1);  
   setup_adc_ports(NO_ANALOGS);    
   setup_adc(ADC_OFF); 
   setup_CCP1(CCP_OFF); 
   setup_CCP2(CCP_OFF); 
   int8 Ack; 
   char byte0=0 , byte1=0 , byte2=0, conf; 
   int32 adc_in   =  0; 
   float Volts    =  0.0;   
   lcd_init();    
   // 
   output_float(DAL_SDA); 
   output_float(DAL_SCL);   
   i2c_start();   
   Ack = i2c_write( 0b11010000 ); // Yazma modu   
   Ack = i2c_write( 0b00011100 ); // Sürekli çevirme - 18bit - PGA = 1V/V
   i2c_stop(); 
   delay_ms(100);
      
   while(True) 
   {       
       i2c_start();         
      Ack = i2c_write( 0b11010001); // MCP3421   adresini yolla    
       // 
      byte0 = i2c_read( 1 );           // birinci baytı oku ve ACK yolla
      byte1 = i2c_read( 1 );           // ikinci baytı oku ve ACK yolla
      byte2 = i2c_read( 0 );           // üçüncü baytı oku ve ACK yollama
       i2c_stop(); 
      byte0 &= 0b00000011; 
      adc_in = byte0; 
      adc_in <<= 8; 
      adc_in += byte1; 
      adc_in <<= 8; 
      adc_in += byte2; 
            
      printf( lcd_putc , "\f %LX"  , adc_in );     
      Volts = (float)adc_in * 0.015625; // 18 bits ADC 
      printf( lcd_putc ,  "\nmV=%0.3f      " , Volts ); 
      delay_ms( 500 ); 
   } 
}

klutch


hiovoltage