اطلاعیه

Collapse
No announcement yet.

تغییر کد دماسنج LM35 و میکرو atmega16 به میکرو atmega8

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تغییر کد دماسنج LM35 و میکرو atmega16 به میکرو atmega8

    سلام
    این کد الان در محیط پروتئوس داره کار میکنه:
    کد:
    #include <mega16.h>
    #include <delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    #asm
      .equ __lcd_port=0x18
    #endasm
    #include <lcd.h>
    float temp=0.0;
    void display(){
      char str1[16],str2[16]; 
      ftoa(temp,1,str1);
      sprintf(str2,"Temp=%3s",str1);
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_puts(str2); 
    }
    interrupt [ADC_INT] void adc_isr(void){
      unsigned int adc_data;
      adc_data=ADCW;
      temp=(adc_data*2.56/1024)*100;
    }
    void main(){
      ACSR=0xC0;
      ADMUX=0xC0;
      ADCSRA=0x8F;
      lcd_init(16);
      #asm("sei")
      ADCSRA=0xCF;
      while(1){
        display();
        delay_ms(250);
        ADCSRA=0xCF;
      }
    }
    و اینم شماتیکش:

    برای تغییر این کد به atmega8 باید دقیقا چه کارهایی انجام بشه؟(در کد و در اتصال پین ها)
    در حال حاضر فکر کنم 0.2 درجه خطا داره. علتش چیه؟
    ممنون از راهنماییاتون

    #2
    پاسخ : تغییر کد دماسنج LM35 و میکرو atmega16 به میکرو atmega8

    توی کدویزاد atmega8 رو انتخاب کن و lcd و adc و تنظیمات دیگه ای رو که لازم داری رو فعال کن و بعد برنامتو کپی کن و در اون paste کن! در قسمت configure>>project>>c compile هم atmega8 رو انتخاب کن.
    به همین راحتی :biggrin:
    www.gam-co.blogsky.com

    دیدگاه


      #3
      پاسخ : تغییر کد دماسنج LM35 و میکرو atmega16 به میکرو atmega8

      ممنون
      در کد بالا کدوم خط داره تعیین میکنه که lm35 به PORTA.0 وصل شده.

      دیدگاه


        #4
        پاسخ : تغییر کد دماسنج LM35 و میکرو atmega16 به میکرو atmega8

        اتمگا8 پورت A نداره و adc اون روی پورت c هستش. چون شما از وقفه adc استفاده کردید فکر نمیکنم لازم باشه توی برنامتون تغییری بدید فقط تنظیمات کدویزارد رو برای اتمگا8 و adc و lcd انجام بدید. فقط مقدار رجیسترهای ADCSRA و ADMUX رو چک کنید که لازمه تغییر کنه یا نه. ADMUX رجیستری هستش که کانال وردی adc رو انتخاب میکنه و تعیین میکنه که کدوم پایه های adc خونده بشه و ADCSR هم فعال ساز adc هستش.
        www.gam-co.blogsky.com

        دیدگاه


          #5
          پاسخ : تغییر کد دماسنج LM35 و میکرو atmega16 به میکرو atmega8

          خطاش طبیعیه
          بخاطر اون تبدیلایی هست که تو adc انجام میدیم و ولتاژی که سنسور برای هر درجه میده
          telgram:09396888049

          دیدگاه


            #6
            پاسخ : تغییر کد دماسنج LM35 و میکرو atmega16 به میکرو atmega8

            سلام.
            ممنون بابت راهنماییتون.
            درست شد.
            فقط مشکلش اینه که اولا دما ثابت نیست. حدود 5 درجه نوسان داره، دوما دما درست نیست، مثلا الان دمای اتاق منو زده 40 درجه حدودا(از 37 تا 42 نوسان داره)
            مشکل کجا میتونه باشه.
            میانگین هم میگیرم:
            کد:
            #include <mega8.h>
            #include <delay.h>
            #include <stdio.h>
            #include <stdlib.h>
            #asm
              .equ __lcd_port=0x18
            #endasm
            #include <lcd.h>
            
            float temp=0.0;
            
            void display(){
              char str1[16],str2[16]; 
              ftoa(temp,1,str1);
              sprintf(str2,"Temp=%3s",str1);
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_puts(str2);   
            }
            
            interrupt [ADC_INT] void adc_isr(void){
              unsigned int adc_data; 
              adc_data=ADCW;          
              temp=(adc_data*2.56/1024)*100;
            }
            
            void main(){
              int i;
              float sum;
              ACSR=0xC0;
              ADMUX=0xC0;
              ADCSRA=0x8F;
              lcd_init(16);
              #asm("sei")
              ADCSRA=0xCF;
              while(1){
                display();
                delay_ms(50); 
                sum=0;
                for(i=0;i<1000;i++)
                {
                  ADCSRA=0xCF;
                  sum+=temp;
                  delay_ms(1); 
                }       
                temp=sum/1000;
              }
            }

            دیدگاه


              #7
              پاسخ : تغییر کد دماسنج LM35 و میکرو atmega16 به میکرو atmega8

              ببینید منم خیلی با این مشکل تغییرات مکرر adc دست و پنجه نرم کردم. کارایی که میشه برای حل این مشکل انجام داد ایناس:
              هر چند میلی ثانیه یه بار یه نمونه بگیریم و بعد میانگین گیری کنیم.
              در صورت امکان از مد 8 بیتی adc استفاده کنیم.
              در نزدیکی پین های AVCC و AREF از سلف و خازن مناسب استفاده کنیم.
              نویز کنسلر رو فعال کنیم.
              خط دیتا کوتاه و یا از سیم شیلد دار استفاده کنیم.
              تمامی پایه های VCC و GND میکرو رو متصل کنیم.
              یه خازن روی پایه adc قرار بدیم.
              تدابیر لازم جهت کاهش اثرات نویز روی کل مدار رو اتخاذ کنیم.
              البته درصورتیکه زمان پاسخگویی براتون مهمه، اکثر روش هایی که در بالا گفته شد باعث افزایش زمان پاسخگویی خواهد شد که لازمه در نظر داشته باشید.
              www.gam-co.blogsky.com

              دیدگاه

              لطفا صبر کنید...
              X