وقت همه دوستان بخیر
من یه برنامه نوشتم که از سنسور 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]
این قسمت های مرتبط با برنامه هست
دیدگاه