سلام
من یک کدی نوشتم که با تایمر 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 --- //
}
}



دیدگاه