سلام بچها
من مدار زیر رو که یکی از دوستان در یکی از پستها پیشنهاد داده بودن با mega8 بستم .
چون فریت نداشتم سلف 10 uh گذاشتم
شماتیکشم گذاشتم :
http://uplod.ir/va3av1kqd4wy/loadcell.pdf.htm
مدل لودسل : L6D
capacity : 50k
full scale = 2.039 mv
Excition 10vdc nom 15vdc max
اینم کدی هس که استفاده کردم ، با کمی تغییرات به جای lcd با سریال میفرستم به کامپیوتر
این putchar هایی که میبینید واسه اینکه برنامم رو توی کامپیوترم دنبال کنم
حالا گاهی وسط تابع RESET_AD7730 گیر میکنه یا اگه هم گیر هم نکنه تو main توی حلقه while گیر میکنه و rdy کلا صفر نمیشه...
یکبار rdy رو خودم دستی زمین کردم ولی تو زیر روال تابع بعدی بعد از ارسال داده گیر کرد...
مشکل کجاس ؟چرا ارتباطش با spi درس انجام نمیشه...
پایه های +exc -exc به ref+ ref- وصل میکنم و +signal -signal به in+ in- ....
به لودسل تقریبا 11 ولت دادم با ملتی متر خروجی رو چک کردم وقتی فشار میارم یه 2 میلی ولتی بشون میده...
من مدار زیر رو که یکی از دوستان در یکی از پستها پیشنهاد داده بودن با mega8 بستم .
چون فریت نداشتم سلف 10 uh گذاشتم
شماتیکشم گذاشتم :
http://uplod.ir/va3av1kqd4wy/loadcell.pdf.htm
مدل لودسل : L6D
capacity : 50k
full scale = 2.039 mv
Excition 10vdc nom 15vdc max
اینم کدی هس که استفاده کردم ، با کمی تغییرات به جای lcd با سریال میفرستم به کامپیوتر
کد:
#include <mega8.h> #include <spi.h> #define xtal 8000000 #include <delay.h> #include <stdlib.h> #include <Serial_Init.c> #define SYS_ZERO_MODE 0b11001000//zero dakheli vurudi sefr mishavad #define SELF_CALB_MODE 0b10100000//calibre dakheli khod be khod #define CONT_CNV_MODE 0b00100000//mode peyvaste ersal //inha be adc_mode_bh dade mishavad unsigned char ADC_MODE_BH; #define UPDATE_RATE 150 #define ADC_Vin 0 //0=10mv,1=20mv,2=40mv,3=80mv #define MODE_LOW 0b10000000|(16*ADC_Vin) flash int xxx=0;//32768; #define ADC_RDY PINC.0 #define DDR_RDY() DDRC.0=0; #define ADC_CS PORTC.1 #define DDR_CS() DDRC.1=1; bit CHP; char str[9]; unsigned int ADC_GAIN0; unsigned int ADC_GAIN1; unsigned int ADC_GAIN2; //******************************************************** void RESET_AD7730(void) { putchar('.'); ADC_CS=0; putchar('.'); spi(255); putchar('.'); spi(255); putchar('.'); spi(255); putchar('.'); spi(255); putchar('.'); ADC_CS=1; putchar('.'); } //******************************************************** void ADC_FILTER_SET(void) { unsigned int filter; unsigned char filterL,filterH,byte3; putchar('.'); if(CHP) { putschar("CHP"); filter=102400/UPDATE_RATE; byte3=0b00010000; } else { putschar("!CHP"); filter=307200/UPDATE_RATE; byte3=0; } if(filter>2048) filter=2048; filterL=filter % 16; filterL=filterL*16; filterH=filter / 16; ADC_CS=0; spi(0b00000011); //be comunication reg mige halate badi neveshtane tu filter reg putschar("0b00000011"); spi(filterH); spi(filterL); spi(byte3); ADC_CS=1; } //******************************************************** void ADC_MODE_SET(void) { ADC_CS=0; spi(0b00000010);//be comunication reg mige halate badi neveshtane tu mode reg spi(ADC_MODE_BH); spi(MODE_LOW); ADC_CS=1; } //******************************************************** void ADC_GAIN_SET(void) { ADC_CS=0; spi(0b00000110); spi(ADC_GAIN2); spi(ADC_GAIN1); spi(ADC_GAIN0); ADC_CS=1; } //******************************************************** void ADC_GAIN_READ(void) { // default value of gain= 593CEA Hex ADC_CS=0; spi(0b00010110); ADC_GAIN2=spi(255); ADC_GAIN1=spi(255); ADC_GAIN0=spi(255); ADC_CS=1; } //******************************************************** unsigned int ADC_READ_DATA(void) { unsigned int adc_val; ADC_CS=0; spi(0b00010001); //be comunication reg mige halate badi khundane az data reg va 1 bar adc_val=(unsigned int) spi(255)*256 + spi(255); ADC_CS=1; return(adc_val); } //******************************************************** void main(void) { unsigned int ADC,temp,temp2; bit ADC_SEL,ZERO_ADC; unsigned char sum_cntr; unsigned long int sum; // SPI initialization // SPI Type: Master // SPI Clock Rate: 250.000 kHz // SPI Clock Phase: Cycle Half // SPI Clock Polarity: High // SPI Data Order: MSB First SPCR=0x58; SPSR=0x00; CHP=0; DDRB=0x28; SerialInit(); DDR_RDY() DDR_CS() putschar("hello !!"); delay_ms(1000); RESET_AD7730(); putschar("RESET_AD7730"); ADC_FILTER_SET(); putschar("ADC_FILTER_SET"); ZERO_ADC=0; ADC_SEL=1; sum_cntr=0; sum=0; while (1) { putchar('*'); if(ADC_RDY==0) { putschar("ADC_RDY"); if(ZERO_ADC) { putschar("ZERO_ADC"); ADC_MODE_BH=SYS_ZERO_MODE; ADC_MODE_SET(); putschar("ADC_MODE_SET"); ZERO_ADC=0; ADC_SEL=1; } else { if(ADC_SEL) { putschar("ADC_SEL"); ADC_SEL=0; ADC_MODE_BH=CONT_CNV_MODE; ADC_MODE_SET(); putschar("ADC_MODE_SET"); } else { temp=ADC_READ_DATA(); putschar("ADC_READ_DATA"); sum=sum+temp; if(++sum_cntr==50) { sum_cntr=0; ADC=sum/50; sum=0; ftoa(2,(ADC-xxx)/100,str); putschar(str); strcpy(str," "); } } } //******************************************************************** }; } }
حالا گاهی وسط تابع RESET_AD7730 گیر میکنه یا اگه هم گیر هم نکنه تو main توی حلقه while گیر میکنه و rdy کلا صفر نمیشه...
یکبار rdy رو خودم دستی زمین کردم ولی تو زیر روال تابع بعدی بعد از ارسال داده گیر کرد...
مشکل کجاس ؟چرا ارتباطش با spi درس انجام نمیشه...
پایه های +exc -exc به ref+ ref- وصل میکنم و +signal -signal به in+ in- ....
به لودسل تقریبا 11 ولت دادم با ملتی متر خروجی رو چک کردم وقتی فشار میارم یه 2 میلی ولتی بشون میده...
دیدگاه