MCP3551E 22bit adc kullanan var mı ?

Başlatan pcb, 22 Ekim 2009, 21:32:35

pcb

MCP3551E 22bit bir adc kullanan var mı? bir türlü okuma yaptıramadım.

Klein

long int adc_adtemp=0;
unsigned int adc_adsum=0;
unsigned char adc_admode=0;
unsigned int adc_adbitcounter=0;
unsigned char adc_convert_ok=0;

#define adc_resolution 0x1FFFFF

float adc_rawval=0;
float adc_adfilterval=0;
float adc_adcorrval=0;

#define adc_SCL p1_0
#define adc_SDA p1_1
#define adc_SEN p1_2

void adc_delay( int time){
unsigned int I;
	I=time;
	while(I--);
}


void init_adc(void){
	pd1_2 =1;
	pd1_1 =0;
	pd1_0 =1;
	pu02 = 1; // p1_0 to p1_3 pulled high
}

void read_adc(void){
 		switch(adc_admode){
			case 0: 
					adc_SCL=1;adc_SDA=1;adc_SEN=1;
					adc_adbitcounter=0;
					adc_adtemp=0;
					adc_admode++;
					break;
			case 1: 
					adc_SEN=0;adc_admode++;break;
			case 2:
					adc_adbitcounter++;
					if(!adc_SDA){adc_admode++;adc_adbitcounter=0;}
					if(adc_adbitcounter==20)adc_admode=0;
					break;
			case 3: 
						for(adc_adbitcounter=0;adc_adbitcounter<24;adc_adbitcounter++){	
							adc_adtemp=adc_adtemp << 1; 
							adc_SCL=0;adc_delay(1);adc_SCL=1;adc_delay(1); 
							adc_adtemp = adc_adtemp | adc_SDA ; 
						}
					adc_SEN=1;
					if(adc_adtemp >0x01FFFFF) adc_adtemp=adc_adtemp-0x03FFFFF;
					adc_rawval=adc_adtemp/8;
					adc_convert_ok=1;
					adc_admode=0;
					break;
			default : adc_admode=0;
		}
}

MCP3550 için yazdığım kod. MCP3551 için de kullanabilirsin.  
MCP3550 saniyede 7.5 örnekleme yapıyor. bu yüzden örnekleme zamanını beklememek ve programı da burada bekletmemek için switch case kullandım.  rutini yaklaşık 100ms 'de bir çağırıyorsun. kolay gelsin

pcb

ilginiz için teşşekkür ederim, bu ADC yi proton ile kullanmak istiyordum kendim basitce bir program yazdım, ADC yi kullanmak isteyen arkadaşlara belki proton için yardımcı olur.

Symbol  CS  PORTA.0
Symbol  RDY PORTA.1
Symbol  SCK PORTA.2
kur:
            High    PORTA.0            'CONVERSİYON A BASLA
            DelayMS 100                'burada CS low yapılır ardından hemen 
            Low    PORTA.0             'RDY "1" olur, yani çevirim başlar.     
lets_go:
    If  PORTA.1=0   Then    CONVERT ' çevirim bittiğinde RDY "0" olur bunu
    GoTo    lets_go                            'takip et ve CONVERT e giderek
CONVERT:                                       ' Clock ile var1 e değişkeni yükle
    SHIn RDY , SCK , msbpre , [ var1\16 ] 
    For x=0 To  8  Step    1                ' for next döngüsü ADC toplamda 
    High    PORTA.2                           '24 veya 25 clock istediğinden ve 
    DelayUS 3                                   'bana 16bit çözünürlük gerekli   
    Low PORTA.2                               'olduğundan 24 clock tamamlamak   
    Next                                            'eklenmiştir.
CONVERT_FINISH:
    Print   At  4,1,Dec var1,   "   "   
    DelayMS 5
GoTo    lets_go      

MCP3551 contunious mode için yazılmıştır, çok daha profesyonelce de yazılabilir.

mustafa_cmbz

22 bit okuma yaptırmak için nasıl kullanabiliriz?

Murat Mert

Mustafa  protonda 22 bit okutmak için çok debinmiştim. Eski pc de varmı bakayım 2 yıldır CCS C kullanıyorum.
mert07

ergin

#5
protonda pt100 veya pt1000 veya ptc olarak nasıl olcum yaptırabiliriz?