اطلاعیه

Collapse
No announcement yet.

ADC و نشان دادن ولتاژ

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

    ADC و نشان دادن ولتاژ

    سلام
    اساتید محترم یک سوال کوچولو
    یک برنامه خواندن ولتاژ با adc نوشتم ولی ولتاژی نشون نمیده
    ولتاژ مرجع 5 ولت هست حالا نمیدونم درست نوشتم یا نه
    کد:
    #include <mega16.h>
    #include <delay.h>
    #include <Stdio.h>
    #asm
    .equ __lcd_port=0x15
    #endasm
    #include <Lcd.h>
    float vol;
    char s[16];
    
    interrupt [ADC_INT] void adc_isr(void){
    unsigned long adc_data;
    adc_data=ADCW;
    vol=(adc_data*5)/1024;
    
    
    
    }
    
    
    
    void main(){
    PORTB=0X00 ;
    DDRB=0XFF;
    
    
    PORTA = 0x00;
    DDRA=0x00;
    ACSR=0X80;
    SFIOR=0X00;
    ADMUX=0x40;
    ADCSRA=0x8D;
    #asm("sei")
    
    lcd_init(16);
    while (1){
    
    ADCSRA=0xCD;
    lcd_clear();
    sprintf(s,"vollt=%3f",vol);
     lcd_puts(s);
     
    }
    }

    #2
    پاسخ : ADC و نشان دادن ولتاژ

    نوشته اصلی توسط ramin20007
    سلام
    اساتید محترم یک سوال کوچولو
    یک برنامه خواندن ولتاژ با adc نوشتم ولی ...
    .
    .
    درود!
    اگر از سخت افزار و تنظیمات ADC اطمینان دارید، یک delay بعد از lcd_puts قرار بدید تا نتیجه اندکی روی lcd بمونه(چون شما دارید مرتب lcd رو پاک می کنید)
    در صورت جواب نگرفتن، فایل پروژه CV به همراه شبیه سازی پروتئوس رو پلود بفرمایید(لطفا با به صورت فشرده zip) تا بیشتر بررسی بشه
    اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

    دیدگاه


      #3
      پاسخ : ADC و نشان دادن ولتاژ

      مرسی از رسیدگیتون
      فایل پروتئوس و سورس برنامه رو براتون گذاشتم
      http://www.4shared.com/rar/ArMDjM2l/ADC.html

      البته باید اینم بگم که نیاز به اطلاعات دقیق ولتاژ نیاز دارم یعنی تا 2 یا 3 رقم اعشار
      کل پروژه نسبتا مربوط به یک ترازوی دیجیتالی هست ولی برای بسته های 50 گرمی هست که باید بتونه 52 گرم یا 48 گرم هم اندازه گیری کنه
      سنسور وزن دارای خروجی بین 0 تا 5 ولت و دارای قابلیت اندازه گیری 0 تا 500 گرم هست. ولتاژ مرجع ADC را AVCCهم باید در نظر بگیرم

      دیدگاه


        #4
        پاسخ : ADC و نشان دادن ولتاژ

        نوشته اصلی توسط ramin20007
        مرسی از رسیدگیتون
        فایل پروتئوس و سورس برنامه رو براتون گذاشتم
        http://www.4shared.com/rar/ArMDjM2l/ADC.html

        البته باید اینم بگم که نیاز به اطلاعات دقیق ولتاژ نیاز دارم یعنی تا 2 یا 3 رقم اعشار
        کل پروژه نسبتا مربوط به یک ترازوی دیجیتالی هست ولی برای بسته های 50 گرمی هست که باید بتونه 52 گرم یا 48 گرم هم اندازه گیری کنه
        سنسور وزن دارای خروجی بین 0 تا 5 ولت و دارای قابلیت اندازه گیری 0 تا 500 گرم هست. ولتاژ مرجع ADC را AVCCهم باید در نظر بگیرم
        فایل پروتئوس رو یادتون رفته اضافه کنید
        اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

        دیدگاه


          #5
          پاسخ : ADC و نشان دادن ولتاژ

          واییی ببخشید یک جای دیگه سیوش کرده بودم لینکو تصحیح کردم
          http://www.4shared.com/rar/OgqYeTR6/ADC_2.html

          دیدگاه


            #6
            پاسخ : ADC و نشان دادن ولتاژ

            اگر ممکنه یک نگاه به این کد بکنین بگی کجاشو اشتباه نوشتم

            دیدگاه


              #7
              پاسخ : ADC و نشان دادن ولتاژ

              نوشته اصلی توسط ramin20007
              اگر ممکنه یک نگاه به این کد بکنین بگی کجاشو اشتباه نوشتم
              درود!
              اولین اشتباهتون:

              نت رو درست وصل نکردید!

              اشتباه دوم:

              اول این که تا حد امکان از تابع sprintf استفاده نکنید، حجم زیادی رو اشغال می کنه(این تابع بع تنهایی بیش از 2kb از حافظه فلش میکرو رو اشغال می کنه!!! :eek
              ثانیا، اگر نیاز به استفاده بود، باید مطابق شکل تنظینات رو انجام بدید.
              اشتباه سومتون رو ببینم خودتون از روی کد تصحیح شده متوجه می شید؟!
              http://uploadkon.ir/?file=bdc26ea34d6891298c6bb4a9731af030.rar
              اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

              دیدگاه


                #8
                پاسخ : ADC و نشان دادن ولتاژ

                یعنی این اشتباه های خفنی کرده بودم که کردم اولیش #asm ('cli&#039 دومی هم دستورات ftoa که اعداد اعشاریو اسکی میکنه
                واقا مرسی :job: :job:

                دیدگاه


                  #9
                  پاسخ : ADC و نشان دادن ولتاژ

                  نوشته اصلی توسط ramin20007
                  یعنی این اشتباه های خفنی کرده بودم که کردم اولیش #asm ('cli&#039 دومی هم دستورات ftoa که اعداد اعشاریو اسکی میکنه
                  واقا مرسی :job: :job:
                  خواهش می کنم
                  شما که داخل کدتون #asm ('cli&#039 و ftoa نداشتید! (راستی ftoa همون Float To Array هستش)
                  نه! اشتباه سومتون این بود که باید:
                  unsigned long adc_data;
                  رو تصحیح کنید، تا این خط:
                  vol=(adc_data*5)/1024;
                  خروجی صحیح بده
                  اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                  دیدگاه


                    #10
                    پاسخ : ADC و نشان دادن ولتاژ

                    vol=(adc_data*5)/1023;

                    دیدگاه


                      #11
                      پاسخ : ADC و نشان دادن ولتاژ

                      نوشته اصلی توسط علی علی پور ریکنده
                      vol=(adc_data*5)/1023;
                      آهان، اینم از نکته سنجی های علی آقا
                      اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                      دیدگاه


                        #12
                        پاسخ : ADC و نشان دادن ولتاژ

                        تورو خدا ببخشین
                        اگر بخوام بگم مثلا 0.5 ولت ولتاژ اصلی من هست که باید ثابت باشه حالا اگر بخوام بگم اگر ولتاژ به 0.48 , 0.52 تغییر کرد مثلا یک led روشن کن شرط پایین درسته

                        if (vol<= 0.48 || vol >= 0.52 ){
                        PORTB.0=1;}
                        }
                        :job:

                        دیدگاه


                          #13
                          پاسخ : ADC و نشان دادن ولتاژ

                          مفهوم این جملت رو متوجه نشدم : اگر ولتاژ به 0.48 , 0.52 تغییر کرد
                          اگه میخواین با ولتاژ های پایین کار کنید بهتره برای دقت بیشتر ولتاژ رفرنس رو هم پایین تر بدید ...
                          با سپاس

                          دیدگاه


                            #14
                            پاسخ : ADC و نشان دادن ولتاژ

                            حق با شماست ولی چون این برنامه ای که باید طبق اون برم جلو ، کل برنامش به صورت زیر :

                            یک خط تولید کارخانه دارای سنسور وزن بر روی نوار نقاله خود می باشد. بر روی این خط بسته های 50 گرمی در حال انتقال هستند. دقیقا پس از قسمت وزن کننده دو سیستم منحرف کننده برای بسته های سبک و سنگین وجود دارد. این سیستم بسته هایی که بیش از دو گرم سنگین تر یا سبک تر باشند را منحرف می کند. این سیستم را بصورتی طراحی کنید که

                            سیستم وزن کننده به پایه ADC0 متصل و منحرف کننده بسته های سبک به پایه B.0 و دیگری به B.1 متصل باشد. ( با نوشتن یک بر روی پایه ها می توانید بسته ها را منحرف کنید)

                            سنسور وزن دارای خروجی بین 0 تا 5 ولت و دارای قابلیت اندازه گیری 0 تا 500 گرم می باشد. ولتاژ مرجع ADC را AVCC در نظر بگیرید.

                            حالا ولتاژ با دقت 3 رقم اعشار میتونم بخونم
                            اینطور که حساب کردم هر ولت معادل 100 گرم میشه پس 0.5 ولت معادل 50 گرم پس باید بتونم ولتاژ های 0.52 و 0.48 بخونه و واکنش انجام بده
                            حالا میخوام ببینم با شرطی که بالا نوشتم درسته یا نه :job:

                            دیدگاه


                              #15
                              پاسخ : ADC و نشان دادن ولتاژ

                              نوشته اصلی توسط ramin20007
                              تورو خدا ببخشین
                              اگر بخوام بگم مثلا 0.5 ولت ولتاژ اصلی من هست که باید ثابت باشه حالا اگر بخوام بگم اگر ولتاژ به 0.48 , 0.52 تغییر کرد مثلا یک led روشن کن شرط پایین درسته

                              if (vol<= 0.48 || vol >= 0.52 ){
                              PORTB.0=1;}
                              }
                              :job:
                              این کد، اگر مقدار ولتاژ در باز 0.48-0.52 نباشه، PORTB.0 رو یک می کنه، اما با توجه به توضیحات شما:
                              نوشته اصلی توسط ramin20007
                              حق با شماست ولی چون این برنامه ای که باید طبق اون برم جلو ، کل برنامش به صورت زیر :

                              یک خط تولید کارخانه دارای سنسور وزن بر روی نوار نقاله خود می باشد. بر روی این خط بسته های 50 گرمی در حال انتقال هستند. دقیقا پس از قسمت وزن کننده دو سیستم منحرف کننده برای بسته های سبک و سنگین وجود دارد. این سیستم بسته هایی که بیش از دو گرم سنگین تر یا سبک تر باشند را منحرف می کند. این سیستم را بصورتی طراحی کنید که

                              سیستم وزن کننده به پایه ADC0 متصل و منحرف کننده بسته های سبک به پایه B.0 و دیگری به B.1 متصل باشد. ( با نوشتن یک بر روی پایه ها می توانید بسته ها را منحرف کنید)

                              سنسور وزن دارای خروجی بین 0 تا 5 ولت و دارای قابلیت اندازه گیری 0 تا 500 گرم می باشد. ولتاژ مرجع ADC را AVCC در نظر بگیرید.
                              باید دو بازه جدا، بیشتر از 0.52 و کمتر از 0.48 در نظر بگیرید و در هر حالت پایه های متناسب رو یک کنید(و صد البته در صورت برقرار نبودن شرط صفرش کنید، وگرنه یک بار که بسته سبک/سنگین رد شد، دیگه از اون به بعد همه بسته ها رو منحرف می کنه :icon_razz، البته تمام اینا با فرض این هستش که سنسور خطی عمل کنه، یعنی ولت0 معادل 0گرم، 1ولت معادل 100 گرم و...، و در ضمن تاخیرهای نمونه برداری هم باید طوری در نظر گرفته بشه که در هر عبور کالا از سنسور، حداقل 2-3بار اندازه گیری انجام بشه!
                              فعلا همینا به ذهن خواب آلودم رسید :redface:

                              اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                              دیدگاه

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