سلام
من یک کدی نوشتم که با تایمر 0 پالس با فرکانس 38 کیلو هرتز میسازه و با adc مقدار خروجی tsop1238 رو استخراج میکنم...
ولی بوردش فقط 5 سانت هست... وقتی دستم رو نزدیک میکنم عدد 1015 رو دریافت میکنم وقتیم دور میکنم 0....
نباید بوردش بیشتر باشه ؟ چرا اینجوریه :sad:
فرستنده ها با یک ترانزیستور به هم وصل شده اند و به gnd وصل میشم.فرکانس میکرو 8 مگ
فرکانس تایمر 8 مگ هست و هر .125 میکرو ثانیه 1 دونه میشمره (بدون تقسیم فرکانسی )
تولید فرکانسی 38 کیلو هرتز 50% duty cycle :
256- 152 = 104
104 * .125 = 13 میکرو ثانیه تاخیر
کدهای مربوط به سنسور :
--------------------
من یک کدی نوشتم که با تایمر 0 پالس با فرکانس 38 کیلو هرتز میسازه و با adc مقدار خروجی tsop1238 رو استخراج میکنم...
ولی بوردش فقط 5 سانت هست... وقتی دستم رو نزدیک میکنم عدد 1015 رو دریافت میکنم وقتیم دور میکنم 0....
نباید بوردش بیشتر باشه ؟ چرا اینجوریه :sad:
فرستنده ها با یک ترانزیستور به هم وصل شده اند و به gnd وصل میشم.فرکانس میکرو 8 مگ
فرکانس تایمر 8 مگ هست و هر .125 میکرو ثانیه 1 دونه میشمره (بدون تقسیم فرکانسی )
تولید فرکانسی 38 کیلو هرتز 50% duty cycle :
256- 152 = 104
104 * .125 = 13 میکرو ثانیه تاخیر
کدهای مربوط به سنسور :
--------------------
کد:
#include <mega32.h> #include <delay.h> #include <stdlib.h> #include <string.h> #asm .equ __lcd_port = 0x18 ;//PORTB #endasm #include <lcd.h> #define MIN_STEP 1.8 char s1[8]; int mode = 0 ; int count = 0 ; int a=1023; /**************************** ADC SETTING ***************************/ unsigned int adc_data; #define ADC_VREF_TYPE 0x40 interrupt [ADC_INT] void adc_isr(void) { adc_data=ADCW; } unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); #asm in r30,mcucr cbr r30,__sm_mask sbr r30,__se_bit | __sm_adc_noise_red out mcucr,r30 sleep cbr r30,__se_bit out mcucr,r30 #endasm return adc_data; } /**************************** ADC SETTING ***************************/ /**************************** IR SENSOR 38KHz ***************************/ interrupt [TIM0_OVF] void timer0_ovf_isr(void) { //IR 38KHz Send TCNT0 = 152; PORTB.3 =~ PORTB.3; } /**************************** IR SENSOR 38KHz ***************************/ main(){ int i=0; lcd_init(16) ; lcd_gotoxy(0,0); lcd_putsf("Start"); //********************* PORT A ******************************* DDRA = 0x00; ADMUX=ADC_VREF_TYPE; ADCSRA=0x8F; SFIOR&=0xEF; //********************* PORT A ******************************* //********************* PORT B ******************************* DDRB=0xFF; //--B.3 ==>> 38khz sender -- PORTB.3= 1; //IR GND Q ON // Other Pin Connect To Lcd //********************* PORT B ******************************* //********************* TIMER ******************************* TCCR0=0x01; // ferq timer = 8MHz TCNT0 = 152; // SEND 38KHZ IR-TX TIMSK=0x01; //TIMER0 FOR >> IR sensor 38khz //********************* TIMER ******************************* #asm("sei") while(1){ //IR Sensor Test 38KHz --- // delay_ms(200); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("F:"); a=read_adc(3); itoa(a,s1); lcd_puts(s1); lcd_putsf(" U3: "); a=read_adc(0); itoa(a,s1); lcd_puts(s1) ; lcd_gotoxy(0,1); lcd_putsf("U1: "); a=read_adc(1); itoa(a,s1); lcd_puts(s1); lcd_putsf(" U2: "); a=read_adc(2); itoa(a,s1); lcd_puts(s1); //--- IR Sensor Test 38KHz --- // } }
دیدگاه