اطلاعیه

Collapse
No announcement yet.

نوشتن برنامه

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

    نوشتن برنامه

    یک سنسور وزن داریم که به صورت غیر خطی کار می کند اگروزن از 0تا0.5 کیلوگرم تغییر کند ولتاژخروجی بین 0تا3 ولت تغییر خواهد کرد واگر وزن از 0.5تا 3 کیلوگرم تغییر کند ولتاژبین 3تا5 ولت تغییر می کند.
    می خواهیم با استفاده از A/Dبرنامه ای بنویسیم که ولتاژخروجی سنسور وزن را اندازه بگیرد ووزن وجرم آن را به مانمایش دهد.(یک کلید برایnext ویک کلید برای =)

    #2
    پاسخ : نوشتن برنامه

    چه زبانی کار میکنید ؟ و اینکه روی چی نمایش بده؟
    http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

    دیدگاه


      #3
      پاسخ : نوشتن برنامه

      نوشته اصلی توسط fatemehalimoradi
      یک سنسور وزن داریم که به صورت غیر خطی کار می کند اگروزن از 0تا0.5 کیلوگرم تغییر کند ولتاژخروجی بین 0تا3 ولت تغییر خواهد کرد واگر وزن از 0.5تا 3 کیلوگرم تغییر کند ولتاژبین 3تا5 ولت تغییر می کند.
      می خواهیم با استفاده از A/Dبرنامه ای بنویسیم که ولتاژخروجی سنسور وزن را اندازه بگیرد ووزن وجرم آن را به مانمایش دهد.(یک کلید برایnext ویک کلید برای =)
      درود
      ابتدا باید تابع آن سنسور را به دست آورید
      سپس در برنامه نویسی درج کنید ...
      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
      معرفی نرم افزار Codewizard PWM
      با من بیشتر آشنا شوید

      دیدگاه


        #4
        پاسخ : نوشتن برنامه

        سلام من اومدم :agree:
        در جلوی اقا سامان بی ادبی نکنم .
        اما من محاسبه کردم و تابع و کد هاتو رو نوشتم به این صورت
        کد:
        #include <mega32a.h>
        
        #include <delay.h>
        
        
        
        #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
        
        
        unsigned int read_adc(unsigned char adc_input)
        {
        ADMUX=adc_input | ADC_VREF_TYPE;
        
        delay_us(10);
        
        ADCSRA|=(1<<ADSC);
        
        while ((ADCSRA & (1<<ADIF))==0);
        ADCSRA|=(1<<ADIF);
        return ADCW;
        }
        
        void main(void)
        {
          unsigned int adc;
          float kg;
        
        
        
        
        ADMUX=ADC_VREF_TYPE;
        ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
        SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
        
        
        DDRC=255;
        DDRD=255;
        while (1)
           {
             adc=read_adc(0);
             
            if(adc<3)
            {
              kg=adc*0.5;
              kg=kg/3;
            }
            
            if(adc>3)
            {
              kg=adc*3;
              kg=kg/5;
            }
            
            delay_ms(500);     
        
           }
        }
        اینطوری متغیر adcاز کانال 0 adcخونده میشه و محاسباتش انجام میشه در نهایت متغیر kgمتغیری است که وزن رو نمایش میده .
        موفق باشید
        http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

        دیدگاه


          #5
          پاسخ : نوشتن برنامه

          ممنون.خیلی زحمت کشیدید.
          برنامه رامی خونم اشکال داشتم حتما مجددا مزاحمتون میشم.مرسی :wow: :applause:

          دیدگاه


            #6
            پاسخ : نوشتن برنامه

            خواهش میکنم :nerd:
            http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

            دیدگاه


              #7
              پاسخ : نوشتن برنامه

              نوشته اصلی توسط MAHDI ZAMANI
              سلام من اومدم :agree:
              در جلوی اقا سامان بی ادبی نکنم .
              اما من محاسبه کردم و تابع و کد هاتو رو نوشتم به این صورت
              کد:
              #include <mega32a.h>
              
              #include <delay.h>
              
              
              
              #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
              
              
              unsigned int read_adc(unsigned char adc_input)
              {
              ADMUX=adc_input | ADC_VREF_TYPE;
              
              delay_us(10);
              
              ADCSRA|=(1<<ADSC);
              
              while ((ADCSRA & (1<<ADIF))==0);
              ADCSRA|=(1<<ADIF);
              return ADCW;
              }
              
              void main(void)
              {
                unsigned int adc;
                float kg;
              
              
              
              
              ADMUX=ADC_VREF_TYPE;
              ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
              SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
              
              
              DDRC=255;
              DDRD=255;
              while (1)
                 {
                   adc=read_adc(0);
                   
                  if(adc<3)
                  {
                    kg=adc*0.5;
                    kg=kg/3;
                  }
                  
                  if(adc>3)
                  {
                    kg=adc*3;
                    kg=kg/5;
                  }
                  
                  delay_ms(500);     
              
                 }
              }
              اینطوری متغیر adcاز کانال 0 adcخونده میشه و محاسباتش انجام میشه در نهایت متغیر kgمتغیری است که وزن رو نمایش میده .
              موفق باشید
              برنامه غلطه !!!
              اصلا این تابع نیست !!!
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه


                #8
                پاسخ : نوشتن برنامه

                چراااا؟ سامان محاسباتش غلطه ؟ یا >=?
                http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                دیدگاه


                  #9
                  پاسخ : نوشتن برنامه

                  نوشته اصلی توسط MAHDI ZAMANI
                  چراااا؟ سامان محاسباتش غلطه ؟ یا >=?
                  به تابع زیر توجه کنید

                  مثلا مقدار X را هرچیزی که قرار بدید یه عدد خاص دیگه ای بهتون میده ...
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه


                    #10
                    پاسخ : پاسخ : نوشتن برنامه

                    نوشته اصلی توسط سامان اسدی
                    به تابع زیر توجه کنید

                    مثلا مقدار X را هرچیزی که قرار بدید یه عدد خاص دیگه ای بهتون میده ...
                    خب اینطوری هم یه عدد خاص میده که
                    دوتا شرط داره که adcبزرگتر از 3 هست یا کوچک تر اما من نمیفهمم کجا رو میگی oo:
                    http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                    دیدگاه


                      #11
                      پاسخ : پاسخ : نوشتن برنامه

                      نوشته اصلی توسط MAHDI ZAMANI
                      خب اینطوری هم یه عدد خاص میده که
                      دوتا شرط داره که adcبزرگتر از 3 هست یا کوچک تر اما من نمیفهمم کجا رو میگی oo:
                      ایشون دوحالت رو تست کردند ...
                      تابع اون رو که به دست نیاوردند ...
                      فقط دونقطه از اون تابع رو بهتون گفتند ...
                      باید مراجعه کنیم به دیتاشیت
                      ببینیم چه تابعی داره و اون رو ربطش بدیم به برنامه نویسی ...
                      در ضمن
                      خروجی adc از 0 تا 1023 هست ...
                      یعنی از 0 تا Vref به 1024 قسمت تقسیم شده ...
                      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                      معرفی نرم افزار Codewizard PWM
                      با من بیشتر آشنا شوید

                      دیدگاه


                        #12
                        پاسخ : نوشتن برنامه

                        اینطوری که تابع بی نهایت نقطه داره :surprised: :
                        کد رو اینطوری تغیر دادم تا adcاول به ولتاژ تبدیل بشه بعد محاسبه بشه
                        کد:
                        #include <mega32a.h>
                        
                        #include <delay.h>
                        
                        
                        
                        #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
                        
                        
                        unsigned int read_adc(unsigned char adc_input)
                        {
                        ADMUX=adc_input | ADC_VREF_TYPE;
                        
                        delay_us(10);
                        
                        ADCSRA|=(1<<ADSC);
                        
                        while ((ADCSRA & (1<<ADIF))==0);
                        ADCSRA|=(1<<ADIF);
                        return ADCW;
                        }
                        
                        void main(void)
                        {
                          float adc;
                          float kg;
                        
                        
                        
                        
                        ADMUX=ADC_VREF_TYPE;
                        ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
                        SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
                        
                        
                        DDRC=255;
                        DDRD=255;
                        while (1)
                           {
                           adc=read_adc(0); 
                           
                           adc=adc*5;
                           adc=adc/1023;
                             
                            if(adc<=3)
                             {
                              kg=adc*0.5;
                              kg=kg/3;
                             }
                            
                            if(adc>3)
                             {
                              kg=adc*3;
                              kg=kg/5;
                             }
                            
                            delay_ms(500);     
                        
                           }
                        }
                        سامان یعنی برای خواندن باید تابع ساخت ؟
                        خب تغیراتش از 0 تا 0.5 کیلو و از 0.5 تا 3 کیلو خطی هست مگه نه؟
                        برای اینکه فک کردم بین این محدوده ها خطی هست دوتا نقطه بدست اوردم
                        http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                        دیدگاه


                          #13
                          پاسخ : پاسخ : نوشتن برنامه

                          نوشته اصلی توسط MAHDI ZAMANI
                          اینطوری که تابع بی نهایت نقطه داره :surprised: :
                          کد رو اینطوری تغیر دادم تا adcاول به ولتاژ تبدیل بشه بعد محاسبه بشه
                          کد:
                          #include <mega32a.h>
                          
                          #include <delay.h>
                          
                          
                          
                          #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
                          
                          
                          unsigned int read_adc(unsigned char adc_input)
                          {
                          ADMUX=adc_input | ADC_VREF_TYPE;
                          
                          delay_us(10);
                          
                          ADCSRA|=(1<<ADSC);
                          
                          while ((ADCSRA & (1<<ADIF))==0);
                          ADCSRA|=(1<<ADIF);
                          return ADCW;
                          }
                          
                          void main(void)
                          {
                            float adc;
                            float kg;
                          
                          
                          
                          
                          ADMUX=ADC_VREF_TYPE;
                          ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
                          SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
                          
                          
                          DDRC=255;
                          DDRD=255;
                          while (1)
                             {
                             adc=read_adc(0); 
                             
                             adc=adc*5;
                             adc=adc/1023;
                               
                              if(adc<=3)
                               {
                                kg=adc*0.5;
                                kg=kg/3;
                               }
                              
                              if(adc>3)
                               {
                                kg=adc*3;
                                kg=kg/5;
                               }
                              
                              delay_ms(500);     
                          
                             }
                          }
                          سامان یعنی برای خواندن باید تابع ساخت ؟
                          خب تغیراتش از 0 تا 0.5 کیلو و از 0.5 تا 3 کیلو خطی هست مگه نه؟
                          برای اینکه فک کردم بین این محدوده ها خطی هست دوتا نقطه بدست اوردم
                          هر چقدر تعداد نقاط بیشتر باشه تابع بهتر به دست میاد ...
                          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                          معرفی نرم افزار Codewizard PWM
                          با من بیشتر آشنا شوید

                          دیدگاه


                            #14
                            پاسخ : نوشتن برنامه

                            پس الان درسته برنامه فقط زیاد دقیق نیست درسته؟
                            http://s6.uplod.ir/i/00674/9cm41hm4inx0.jpg

                            دیدگاه


                              #15
                              پاسخ : نوشتن برنامه

                              نوشته اصلی توسط MAHDI ZAMANI
                              پس الان درسته برنامه فقط زیاد دقیق نیست درسته؟
                              تقریبا بهتر شد ...
                              ولی باز کامل و دقیق نیست ...
                              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                              معرفی نرم افزار Codewizard PWM
                              با من بیشتر آشنا شوید

                              دیدگاه

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