اطلاعیه

Collapse
No announcement yet.

دماسنج با آلارم با atmega8

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

    دماسنج با آلارم با atmega8

    دوستان عزیز ، سلام
    یه سوال که فکر می کنم ، خیلی از دوستان دنبال اونن ، همین دماسنج هستش.
    اگه می شه یه دماسنج با proteus و codevision پ کنید که دما رو ، روی 7 segments نشون بده و در دمای 30 درجه سانتیگراد بوق بزنه. در ضمن با [shadow=blue,left]ATMEGA8[/shadow] باشه. thanks
    کنکوری 90 ديروز،آ‌دانشجو مهندسي نرم افزار پلي تكنيك امروز!

    #2
    پاسخ : دماسنج با آلارم با atmega8

    سلام
    آقا من این نقشه برنامه دماسنج اینجا گذاشتم ولی با lcd و برنامه ی اون با بیسیک هست.

    نقشه مدار:
    http://www.2shared.com/fadmin/2810387/b58ddd8/circit.gif
    برنامه مدار:
    http://www.2shared.com/fadmin/2810387/b58ddd8/circit.gif

    امیدوارم بدردت بخوره

    دیدگاه


      #3
      پاسخ : دماسنج با آلارم با atmega8

      سنسورها در نرم افزار پروتئوس کار نمی کنند برای عملکرد مداراتی که سنسور دارن باید عملی کار کنی.
      www.icesi.ir

      دیدگاه


        #4
        پاسخ : دماسنج با آلارم با atmega8

        من هم با میلاد جان موافق هستم .
        من این نقشه رو گزاشتم که شما این مدار رو عملی ببندی و تست کنی.

        دیدگاه


          #5
          پاسخ : دماسنج با آلارم با atmega8

          این برنامش با دقت بالا که دما از 30 رد بشه یک رله On میشه:



          #include <mega8.h>
          #include <delay.h>
          #include <stdio.h>
          // Alphanumeric LCD Module functions
          #asm
          .equ __lcd_port=0x12 ;PORTD
          #endasm
          #include <lcd.h>

          unsigned int adc_data;
          #define ADC_VREF_TYPE 0x40

          // ADC interrupt service routine
          interrupt [ADC_INT] void adc_isr(void)
          {
          // Read the AD conversion result
          adc_data=ADCW;
          }

          // Read the AD conversion result
          // with noise canceling
          unsigned int read_adc(unsigned char adc_input)
          {
          ADMUX=adc_input|ADC_VREF_TYPE;
          #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;
          }
          int i;
          unsigned char lcd[36];
          float temp,filt[101],fout;
          flash int ed=8;

          void main(void)
          {
          // Declare your local variables here

          // Input/Output Ports initialization
          // Port B initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0
          PORTB=0x00;
          DDRB=0x01;

          // Port C initialization
          // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTC=0x00;
          DDRC=0x00;

          // Port D initialization
          // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
          // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
          PORTD=0x00;
          DDRD=0x00;

          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          TCCR0=0x00;
          TCNT0=0x00;

          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer 1 Stopped
          // Mode: Normal top=FFFFh
          // OC1A output: Discon.
          // OC1B output: Discon.
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer 1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          TCCR1A=0x00;
          TCCR1B=0x00;
          TCNT1H=0x00;
          TCNT1L=0x00;
          ICR1H=0x00;
          ICR1L=0x00;
          OCR1AH=0x00;
          OCR1AL=0x00;
          OCR1BH=0x00;
          OCR1BL=0x00;

          // Timer/Counter 2 initialization
          // Clock source: System Clock
          // Clock value: Timer 2 Stopped
          // Mode: Normal top=FFh
          // OC2 output: Disconnected
          ASSR=0x00;
          TCCR2=0x00;
          TCNT2=0x00;
          OCR2=0x00;

          // External Interrupt(s) initialization
          // INT0: Off
          // INT1: Off
          MCUCR=0x00;

          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=0x00;

          // Analog Comparator initialization
          // Analog Comparator: Off
          // Analog Comparator Input Capture by Timer/Counter 1: Off
          ACSR=0x80;
          SFIOR=0x00;

          // ADC initialization
          // ADC Clock frequency: 62.500 kHz
          // ADC Voltage Reference: AVCC pin
          ADMUX=ADC_VREF_TYPE;
          ADCSRA=0x8F;

          // LCD module initialization
          lcd_init(16);

          // Global enable interrupts
          #asm("sei&quot

          while (1)
          {


          // ************************************************** ******************************* Temp Control
          fout=0;
          for(i=0;i<99;i++)
          {
          filt[i]=read_adc(5);
          }
          for(i=0;i<99;i++)
          {
          fout+=filt[i];
          }
          temp=fout/100;

          temp=(temp*500/1023);
          if (temp>30)
          {
          PORTB.0=1;
          }
          else
          {
          PORTB.0=0;
          }
          // ************************************************** ******************************* Temp Control











          sprintf(lcd,"T:%2.0f\xdfC",temp);
          lcd_gotoxy(0,0);
          lcd_puts(lcd);
          delay_ms(1000);
          };
          }



          اینم شماتیک :



          خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

          دیدگاه


            #6
            پاسخ : دماسنج با آلارم با atmega8

            خیلی ممنون. ولی این نمونه با LCD هستش که خودم هم یه نمونه دارم. ولی مزیت شما تو آلارمش و زبان C هستش.
            چون برای یه کاری می خوام که چندان LCD براش جالب نمی شه و به سون سگمنت 2 تایی کافیه.
            در ضمن با تغییر کدوم خط می شه آلارم رو رو دمای دیگه ای تنظیم کرد؟
            کنکوری 90 ديروز،آ‌دانشجو مهندسي نرم افزار پلي تكنيك امروز!

            دیدگاه


              #7
              پاسخ : دماسنج با آلارم با atmega8

              تو دستور if که نوشتم Temp>30
              خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

              دیدگاه


                #8
                پاسخ : دماسنج با آلارم با atmega8

                اونش ، فهمیدم. ولی تو کد تون 2 تا اررور هستش. :angry:
                خودتون این رو چک کردین؟
                در ضمن می خوام رو سون سگمنت باشه.tanx
                کنکوری 90 ديروز،آ‌دانشجو مهندسي نرم افزار پلي تكنيك امروز!

                دیدگاه


                  #9
                  پاسخ : دماسنج با آلارم با atmega8

                  این Error ها بخاطر این هست که از اینجا کپی میکنی تو Codevision.
                  مشکل از سایت هست.
                  Sourse رو از اینجا بگیر.خودم تست کردم هیچ مشکلی نداره:

                  http://www.4shared.com/file/37122700/408e5d3/Temp.html?

                  شماتیک هم همونه
                  خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

                  دیدگاه


                    #10
                    پاسخ : دماسنج با آلارم با atmega8

                    دما تو lcd تغییر نمی کنه.
                    کنکوری 90 ديروز،آ‌دانشجو مهندسي نرم افزار پلي تكنيك امروز!

                    دیدگاه


                      #11
                      پاسخ : دماسنج با آلارم با atmega8

                      خب مسلمه تغییر نمی کنه به 2 علت:

                      1.چون LM35 تو پرتئوس کار نمی کنه فقط یک نماد
                      2.از منو Project - Configure - C Compiler - Sprintf Features گزینه float,width Precision رو انتخاب کن بعد کامپایلش کن.

                      حالا عملی که ببندی کار میکنه کنار عدد دما علامت درجه و C هم میاد
                      موفق باشی
                      خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

                      دیدگاه


                        #12
                        پاسخ : دماسنج با آلارم با atmega8

                        شما می تونه مدل lm35 رو با استفاده از یه پتانسیومتر و یه تقویت کننده با اپ امپ توی پروتیوش ببندی

                        موفق باشی

                        دیدگاه


                          #13
                          پاسخ : دماسنج با آلارم با atmega8

                          لطفا رو سون سگمنت باشه. در ضمن می شه با LM35 دمای 100 درجه سانتی گراد رو اندازه گرفت؟
                          کنکوری 90 ديروز،آ‌دانشجو مهندسي نرم افزار پلي تكنيك امروز!

                          دیدگاه


                            #14
                            پاسخ : دماسنج با آلارم با atmega8

                            اقا وحید نمی خوای به خودت تکونی بدی
                            :eek:

                            دیدگاه


                              #15
                              پاسخ : دماسنج با آلارم با atmega8

                              وحید جان با lm 35 از 55- تا 150 درجه رو میشه سنس کرد.

                              وحید جان مهم اینه که تو عدد رو بدست بیاری بعد یک تابع برای سون سگمنت بنویسی تمومه.

                              تا خودت ننویسی دستت راه نمی افته. :agree:
                              www.icesi.ir

                              دیدگاه

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