وقت همه دوستان بخیر
من یه برنامه نوشتم که از سنسور PT100 استفاده کردم و ... .
مشکلی نداره هم دقت هم کارکرد.
فقط قسمتی که سنسور رو میخونه، بدلیل استفاده از انتگرال گیری و رفع نوسانات، سرعت میکرو پایین اومده. مثلا دکمه ها بلافاصله نمیزنن و باید با مکس کم نگه داری تا کار کنن. یا برخی کارهای میکرو.
خوستم ببینم میشه این کدهارو توی timer یا interrupt گذاشت که میکرو اینقدر درگیرش نباشه و عماکردش کم نشه.
اینم نمونه کد :
این قسمت های مرتبط با برنامه هست
من یه برنامه نوشتم که از سنسور PT100 استفاده کردم و ... .
مشکلی نداره هم دقت هم کارکرد.
فقط قسمتی که سنسور رو میخونه، بدلیل استفاده از انتگرال گیری و رفع نوسانات، سرعت میکرو پایین اومده. مثلا دکمه ها بلافاصله نمیزنن و باید با مکس کم نگه داری تا کار کنن. یا برخی کارهای میکرو.
خوستم ببینم میشه این کدهارو توی timer یا interrupt گذاشت که میکرو اینقدر درگیرش نباشه و عماکردش کم نشه.
اینم نمونه کد :
کد:
[LEFT]
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
/////////////////////////////////////////////////////////////////////
unsigned int adc_data;
interrupt [ADC_INT] void adc_isr(void)
{
adc_data=ADCW;
}
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
delay_us(10);
#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;
}
///////////////////////////////////////////////////////////////////////////////////
void CurrentTemp()
{
ADMUX = ADC_VREF_TYPE;
ADCSRA = (1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (1<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
temporary = 0;
for(i = 0; i < 60; i ++)
{
ADC0 = read_adc(0);
temporary = temporary + ADC0;
delay_ms(20);
}
ADC0 = temporary / 60;
for(adcin = 0; adcin < 300; adcin ++)
{
if(ADC0 <= t[adcin] && ADC0 >= t[adcin-1])
{
temp = adcin;
break;
}
}
}
//////////////////////////////////////////////////////////////////////
#asm("sei")
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("CURRENT TEMPERATURE:");
lcd_gotoxy(0,1);
lcd_putsf("--------------------");
lcd_gotoxy(1,2);
lcd_putsf("TEMP = ");
OffSet = _OffSet;
while(1)
{
temp = OffSet + temp;
CurrentTemp();
sprintf(Buffer_LCD,"%3d\xdf""C",temp);
lcd_gotoxy(8,2);
lcd_puts(Buffer_LCD);
}
[/LEFT]
این قسمت های مرتبط با برنامه هست






دیدگاه