اطلاعیه

Collapse
No announcement yet.

ساخت ولتمتر دیجیتال قابل اتصال به کامپیوتر

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

    پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

    اولا این برنامه ای که نوشتین چطوری به کامپیوتر ارسال میشه؟(یعنی کجا گفتین به PC فرستاده بشه؟)
    دوم اینکه باید حتما پایه AREF با یک خازن 100 نانو زمین بشه.
    سوم کد تبدیل شده در میکرو دوبایتیه . چرا شما فقط 8بیت کم ارزشش رو گرفتین؟

    اگر ولتاژ پایه A.0 رو تغییر بدین عدد موجود در W از 0 تا 1023 تغییر می کنه. در واقع شما باید یه عدد دو بایتی رو به کامپویتر ارسال کنید . ولی شما تو اون برنامه قبلی همچین کار نکردین. فقط با یه سری عدد(که من نمی دونم از کجا اومدن؟) OR کردین.
    عدد 1023 به هگز میشه 3FF وقتی هشت بیت کم ارزشش رو جدا می کنین میشه FF . برای 2.5 ولت عدد معادل 511 ظاهر میشه که معادل هگز 1FF هست که هشت بیت کم ارزشش بازم همون FF میشه.
    حالا فهمیدین چرا اینطوری میشه؟


    اون مقدار 0 ، 1 ، 2 و 3 هم به خاطر نویز روی پایه هست.
    با همون روش میانگین گیری میشه اونا رو کمتر کرد. ولی فکر نکنم فیکس بشه

    دیدگاه


      پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

      سلام
      خیلی ممنونم آقای روباه لطف دارین شما ، مرسی ، اشکال نداره خوب برنامه vb همچنان رو زمین مونده :cry: ما هم که دیگه فورجه ها شوروع شد و ... آخرین مهلته دفاع پروژه 20 بهمنه
      آقای حامد
      اولا مثل اینکه print a رو اینجا جا انداختم!
      دوما پایه های AREF ,AGND , AVCC رو مثل اونی که تو کتاب کاهه هست وصل کرده ام
      سوما یک ماه پیش خودتون برنامه ما رو با گرفتن بیت کم ارزش اصلاح کردین و وقتی پرسیدم چرا گفتین :"برنامه باید اصولی باشه!"
      یادتون میاد؟
      توی برنامه قبلی چرا دیگه ، همین کار و کردیم دیگه، یعنی 10 بیت که مربوط به همون عددیه که ADC درست کرده بقیه اش هم با عددهای خاصی که رنج اندازه گیری رو نشون می ده OR کردیم
      که بعد بریم توی VB با and کردن دوباره اینها رو از هم جدا کنیم و با توجه به رنج عدد رو برگردونیم به حالت صحیحش
      اگر بتونم کاملا کاری که کردیم رو کاملا براتون توضیح می دم فردا که بهتر بتونین راهنماییمون کنین
      (همین قضیه And و or رو می گم)
      احتمالا به خاطر اینکه توی این برنامه کوچیکه 2 بیت رو حذف کردیم این مشکلات ایجاد شده پس ...
      اما آخه اینطوری که شما می گین باید برای 2.5 ولت بازم ما همون 255 که FF هست رو می داشتیم ... البته نمی دونم
      خوب پس میگین برنامه رو اینطوری اصلاحش کنم ؟

      $regfile = "m32def.dat"
      $crystal = 3686400
      $baud = 9600
      Config Adc = Single , Prescaler = Auto , Reference = Avcc
      Dim W As Word
      Start Adc
      Do
      W = Getadc(0)
      Print W
      Loop
      End
      من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

      دیدگاه


        پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

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

        دیدگاه


          پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

          راستش راجع به بحث اصولی بودن کار چیزی یادم نمیاد.(این همه صفحه رو نمی تونم برگردم عقب)
          اما در مورد برنامه
          اول یه بار دیگه یه برنامه بنویسین که یه عدد ثابت رو به PC بفرسته.(مثل 1023) بعد که جواب داد عدد رو متغیر کنید (یعنی از ADC بگیرین و بفرستین. بدون هیچ AND و OR ) . تو ولتاژ صفر باید عدد 0 و تو ولتاژ 5 عدد 1023 رو دریافت کنید. اعداد بین اونها هم یه تناسبه که خودتون میدونین.
          اگه اعداد دریافتی تفاوت زیادی داشت حتما یه جایی تو سخت افزار ایراد دارین.(AREF رو با یک خازن 100 نانو زمین کنید.)

          دیدگاه


            پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

            سلام
            مشکلی نیست ، من فقط یادم مونده بود اصولی بودن رو! oo:
            برنامه ای که می گین و قبلش نوشتیم و امتحان کردیم یعنی یک عدد ثابت رو بدون استفاده از ADC و فقط از طریق تعریف در برنامه ارسال کردیم
            برنامه ارسال عدد 55 هگز (توی یک لوپ) بود بعد توی pc عدد 85 مرتبا دریافت می شد که خوب نتیجه صحیحی هست
            حالا برنامه ADC همون که توی قسمت قبل نوشتم رو پروگرامش کنم و بعد ولتاژ های مختلف می دم
            برای 5 ولت باید 1023 بده ، و برای 2.5 ولت 511 ، برای 1.25 ولت 255 و ....
            یعنی در کل هر عددی که توی pc دریافت کردم رو باید تقسیم بر عدد 204 کنم و نتیجه این تقسیم با ولتاژی که به پایه ADC اعمال شده یکسان باید باشه ، درست می گم؟
            حالا یکشنبه می رم و این موضوع رو عملا بررسی می کنم.
            ممنون از راهنماییتون
            :nice:
            من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

            دیدگاه


              پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

              منظورم از عدد ، یک عدد دوبایتی بود(مثل 1023)
              در مورد تقسیم هم برای دقیق تر شدن تو VB عدد رو تقسیم بر 204.8 کن.
              موفق باشی

              دیدگاه


                پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

                سلام
                امیدوارم همگی خوب باشید
                ما امروز این کارایی که شما گفتید رو انجام دادیم و ارسالمون رو با دقت تقریبا خوب جواب گرفتیم :agree:
                حالا رفتیم سر مدار آنالوگ که اون رو هم ببندیم و برنامه کلی مون رو تست کنیم
                ایشالا اگه اشکال داشتیم مجددا مزاحمتون می شیم
                شما اینجا سر بزنید و ما رو از کمکهای بی دریغتون محروم نکنید
                شاد و قدرتمند باشید :applause: :wow:
                گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
                نماشد... ولی ما هنوز صادق ترینیم

                دیدگاه


                  پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

                  میتونی از برنامه ایی که من گذاشتم برای پیدا کردن سریع و اتوماتیک پورت COM تو هر کامپیوتری استفاده کنی
                  http://www.4shared.com/file/33328627...Detector.html?
                  خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

                  دیدگاه


                    پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

                    سلا
                    ممنون فعلا که پروژمون به دلیل برودت هوا تعطیل شده
                    تا ایشالا یه ماهه دیگه که گازمون وصل شه ما هم شروع به کار کنیم :applause:
                    گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
                    نماشد... ولی ما هنوز صادق ترینیم

                    دیدگاه


                      پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

                      نوشته اصلی توسط روباه
                      میتونی از برنامه ایی که من گذاشتم برای پیدا کردن سریع و اتوماتیک پورت COM تو هر کامپیوتری استفاده کنی
                      http://www.4shared.com/file/33328627...Detector.html?
                      سلام آقای روباه
                      پس ار مدتها ...
                      ممنون از برنامه ای که گذاشتین من دانلودش کردم اما فایل VB ندیدم که ؟؟؟ نکنه من اشتباه می بینم ؟
                      خلاصه که نتونستم برنامه ای که می گین و ببینم ممنون می شم کدهاش رو بذارین یا فایلش رو.
                      من شروع کردم به نوشتن برنامه vb و هرجا اشکال داشتم می پرسم :redface:
                      فورجه ها بیش از حد طولانی شده اینجا
                      به علت قطع گاز هموز امتحانامون برگزار نشده و خلاصه یکم زمان کش اومده ما هم تصمیم گرفتیم فعلا که دانشگاه تعطیله و نمی شه رفت اتاق پروژه ،روی نرم افزاری هاش و تهیه گزارش پروژه کار کنیم. :rolleyes:
                      من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                      دیدگاه


                        پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

                        فقط یادت باشه که گزینه ای به اسم ms com پیدا نمی کنی بلکه توی یکی از متن هایی که نوشته microsoft... (یادم نیست دقیقا کدوم بود)باید دنبال اون تلفنه باشی و وقتی پیداش کردی همونطوری که روباه گفت یه تلفن به box اضافه میشه که با اون میتونی پورت های کامپیوتر رو باز کنی بازم یادت باشه پورتی رو باز کنی که تو میکرو تعریف کردی

                        دیدگاه


                          پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

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

                          دیدگاه


                            پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

                            سلام
                            امیدوارم که همگی خوب باشید.
                            اگه امکان داره این برنامه میکرو رو چک کنید و اشتباهاتش رو به من بگید!!!!!!!!!!!!!!!!11
                            کل کاری که کردم اینه:
                            اول یه عدد از کی برد می خونه که نشون دهنده پریود نمونه برداری مون هست .این اعداد باید بین 1 تا 6 باشه .که نشون دهنده رنج های 0.1میلی ثانیه ،1 میلی ثانیه،5،10،20،و بالاخره 50 میلی ثانیه هست. ابتدا عدد خونده شده که TXT هست رو تبدیل به VAL کردم .بعد مقایسه رو انجام دادم .و بعدش با توجه به عدد پریود نمونه برداری که مشخص شد به زیربرنامه LABLE میره و به اندازه پریود نمونه برداری صبر می کنه و سپس به زیر برنامه LOC1 می ره در اونجا از عدد نمونه برداری می کنه و آفستش رو ازش کم می کنه و اون رو PRINT می کنه .پورت B هم به صورت دستی صفر و یک می شه تا رنج رو به صورت دستی مشخص کنه .مثلا اگه رنج من تو سخت افزارم 50-0 هست PB.1=1 میشه که میکرو بفهمه کدوم رنجه .این برای کم کردن افستی که وی پایه های اپمپ در اون رنج می افته هست.
                            این یه برنامه فقط یرای تست سخت افزارمونه .می خوام ببینم درست نوشتم یا نه؟؟؟؟؟ :cry2: :cry2: :cry2: :cry2:



                            $regfile = "m32def.dat"
                            $crystal = 3646800
                            $baud = 9600
                            Dim W As Word
                            Dim B As Byte , A As Byte
                            Dim C As String * 10
                            Config Portb = Input
                            Config Adc = Single , Prescaler = Auto , Reference = Avcc
                            Config Serialin = Buffered , Size = 30
                            Start Adc
                            Enable Interrupts
                            Print "start"
                            Main:
                            C = Inkey()
                            B = Val(c)
                            If B = "0" Then Goto Main
                            Read:
                            If B = "1" Then
                            Goto Lable1
                            Elseif B = "2" Then
                            Goto Lable2
                            Elseif B = "3" Then
                            Goto Lable3
                            Elseif B = "4" Then
                            Goto Lable4
                            Elseif B = "5" Then
                            Goto Lable5
                            Elseif B = "6" Then
                            Goto Lable6
                            End If
                            Goto Main

                            Lable1:
                            Waitms 0.1
                            Goto Loc1

                            Lable2:
                            Waitms 1
                            Goto Loc1

                            Lable3:
                            Waitms 5
                            Goto Loc1

                            Lable4:
                            Waitms 10
                            Goto Loc1

                            Lable5:
                            Waitms 20
                            Goto Loc1

                            Lable6:
                            Waitms 50
                            Goto Loc1

                            Loc1:
                            If Portb.0 = 1 Then
                            W = Getadc(0)
                            W = W - 0.1059
                            Print W
                            Goto Main
                            Elseif Portb.1 = 1 Then
                            W = Getadc(0)
                            W = W - 0.462
                            Print W
                            Goto Main
                            Elseif Portb.2 = 1 Then
                            W = Getadc(0)
                            W = W - 4.36
                            Print W
                            Goto Main
                            Elseif Portb.3 = 1 Then
                            W = Getadc(0)
                            W = W - 4.37
                            Print W
                            Goto Main
                            End If
                            Goto Main
                            گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
                            نماشد... ولی ما هنوز صادق ترینیم

                            دیدگاه


                              پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

                              برنامه ایراد داره
                              ببین ؛ اگه از Val استفاده می کنی پس یعنی داری به عدد تبدیل می کنی . پس" B="0 غلطه . باید بنویسی : B=0
                              برای بقیه هم همین طور.
                              متغیری که برای ADC تعریف کردی از نوع Word هست . یعنی یه عدد صحیح بین 0 تا 65536 می تونه باشه.( چی؟ عدد صحیح)
                              پس اگه بنویسی W=W-4.37 در عمل چیکار میشه؟ .. برنامه میاد اینو انجام میده: w=w-4 .
                              شما که قرار بود اطلاعات خام رو بفرستین به PC و VB اون تجزیه و تحلیل کنه.
                              یه چیز دیگه. آخه Waitms 0.1 هم داریم؟ اگه منظورت 100 میکرو ثانیه ست که باید بنویسی Waitus 100

                              من فقط ایرادایی که تو چشم بود گفتم. نمی دونم ساختار برنامه ایراد داره یا نه.

                              ولی در کل فکر کنم پیشرفت خوبی داشتین


                              دیدگاه


                                پاسخ : سوال برای برنامه نویسی میکرو AVR کمک

                                سلام
                                من این اشکالاتی که گرفتین رو درست کردم
                                ولی جواب نمیده :cry2: :cry2: :cry2:
                                اخه چی کارش کنیم مارو دیوونه کرده
                                دیشب از یکی پرسیدم بهم گفت goto یه دستور خسته تو برنامه نویسی نباید زیاد ازش استفاده کنی و اگه هم استفاده کردی و جواب نداد جای تعجب نیست
                                استادمون هم گفت که باید از زی برنامه استفاده کینیم و با دستور call اونو فراخوانی کنیم
                                شما پیشنهادی چیزی در مورد ساختار برنامه ندارید .نمی تونید راهنمایی مون کنید این ساختار که جواب نداه
                                ببینید ما کلا می خوام چی کا کنیم
                                در مرحله اول باید پریود نمونه برداری رو ما مشخص کنیم که باید یکی از عدد های 0.1 - 1 - 5 - 10 - 20 - 50 میلی ثانیه باشه ،از وقفه هم نمی خایم استفاده کنیم.بعد با توجه به این دوره تناوب بره از adc میکرو نمونه برداری کنه و توی hyper terminal نشون بده تا اینجاش رو کمکمون کنید.

                                برنامه ای که نوشتم از نظر منطقی کاملا درسته ولی نمیدونم چرا جواب نمی ده .حالا شما یه برنامه با فکر خودتون بنویسید اگه امکان داره و فرصت دارید
                                تا من ببینم اشکالهای کار در ساختار برنامه در کجاست من که دیگه چیزی به ذهنم نمیرسه oo: oo: oo: :eek:
                                گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
                                نماشد... ولی ما هنوز صادق ترینیم

                                دیدگاه

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