اطلاعیه

Collapse
No announcement yet.

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

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

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

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

    دیدگاه


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

      نوشته اصلی توسط fargol_m1454
      اگه امکان داره و فرصت دارید
      شب میرم خونه روش فکر می کنم

      دیدگاه


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

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

        دیدگاه


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

          راستش یه چیز دیگه که تو برنامه به چشم میاد اینه که برای بررسی وضعیت پایه ها باید از Pin استفاده کنی نه Port

          این برنامه ای که میذارم شاید حدود 1 دقیقه طول کشید تا نوشتم. امیدوارم اشتباه نباشه.
          این برنامه یه عدد از PC می گیره (B) و بعد از اون وارد لوپی میشه که اونجا دائما ورودی ADC رو می خونه و با تاخیر متناسب با B اون رو به PC می فرسته. بعد از اون وضعیت پورت B هم ارسال میشه تا برنامه VB خودش تحلیل کنه که مقدار آفست چنده و چطوری محاسبه بشه.

          $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
          Start Adc
          Enable Interrupts
          Print "start"
          Main:
          C = Inkey()
          B = Val(c)
          Do
          W = Getadc(0)
          Print W
          Select Case B
          Case 1:
          Waitus 100
          Case 2:
          Waitms 1
          Case 3:
          Waitms 5
          Case 4:
          Waitms 10
          Case 5:
          Waitms 20
          Case 6:
          Waitms 50
          End Select
          Print Pinb
          Loop

          End



          دیدگاه


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

            سلام
            از لطف همتون ممنون. بله ما هم فکر می کنیم پیشرفتمون خوب بوده . اما هنوزم که جواب نگرفتیم :sad:
            من سوالامو راجع به برنامه vb توی قسمت برنامه نویسی و اینترفیس گذاشتم اما خیلی دیر به دیر و نا مطمئن جواب میگیرم
            آقای روباه عزیز شما قرار بود توی برنامه vb بهمون کمک کنینا یادتون که هست اینشالا ؟
            http://www.eca.ir/forum2/index.php/topic,13246.0.html

            برنامه رو اونجا نگذاشتم چون هیچکس اعلام آمادگی نکرد که بررسیش کنه
            اگه شما این لطف و می کنید ، بگین تا براتون بفرستم ببینینش
            احتمالا خیلی ناشیانه نوشتمش . هنوزم جور نشده تستش کنیم که ببینم اشکالاتش کجاست اگه شما لطف کنید یه نیگاهی بش بندازین ممنون می شم.
            ضمنا من به اون کدهایی که دنبال پورت می گرده هم احتیاج دارم اگه شد اونا هم به برناممون بچسبونین
            مرسییییییییی :job:

            آقای حامد از شما هم خیلی ممنون که روی برنامه میکرومون وقت می ذارین ما که دیگه خل شدیم از دست اون!
            روال برنامه منطقیه اما ...

            موفق باشید
            من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

            دیدگاه


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

              سلام
              ممنون از برنامتون
              ما امروز چکش کردیم .ببینید عدد که از کی برد نمی خوند :cry: و نشون هم نمی داد اصلا فرصت وارد کردن عدد رو به ما نمی داد.فقط پشت سرهم (فکر کنم با فرکانس کریستالمون) عددی که از adc می خوند رو نشون می داد .
              اما یه اشکال هم تو همین داشت و اون این بود که اگه ما ولتاژ 5رو به adc می دادیم .تو hype terminal عددهای 1023 و 215 رو پشت سر هم نشون می داد.اگه ولتاژ 0 رو می دادیم عدد های 0 و 215 رو نشون می داد و اگه ولتاژ 2.5 می دادیم عدد های 512 و 215 رو پشت سر هم نشون می داد .
              در صورتی که ما قبلا از adc جواب گرفتیم و این اداها رو از خودش در نمی آورد :eek:
              شما که برنامه قبلی رو ساعتها طول کشید نوشتید یه چند ساعتی هم روی این لطفا وقت بذارید من و آناهیتا کم مونده بریم تیمارستان
              یه سوال ما اگه بخوایم پریودهای اونها رو چک کنیم باید خروجی max رو روی اسکوپ ببینیم دیگه دسته.اونجا وقتی 9 و 9- می شه باید قاعدتا با همون دوره تناوبه که انتخاب شده تغییر کنه ؟؟؟؟ یا طوری دیگه هست؟؟؟ oo:
              ممنون از راهنمایی هاتون
              موفق باشید
              بای :job:
              گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
              نماشد... ولی ما هنوز صادق ترینیم

              دیدگاه


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

                یه کاری کنید.
                به جای Inkey از Input استفاده کنید.

                این اعدادی رو که میگی کاملا درسته. عدد اول که وضعیت پایه ADC رو نشون میده( که مشابه همون اعدادیه که خودتون قبلا بدست اوردین).
                عدد دوم هم وضعیت پایه های متصل به سلکتوره. اگه شما شش حالت دارین بهتره دو پایه آخر رو زمین کنید. با این وضعیت عدد دوم باید یکی از حالت های
                00000001 یا 00000010 یا 00000100 یا 00001000 یا 00010000 یا 00100000 باشه(همه اینا باینری بود. دسیمالشون میشه : 1 یا 2 یا 4 یا 8 یا 16 یا 32 )

                به این ترتیب مشخصه که وضعیت پایه های سلکتورتون درست نیست. ( فقط باید یه پایه از پورت B یک بشه)
                البته این اعداد رو با این منطق گفتم که فعال شدنشون با یک منطقی باشه و در حالت عادی( Unselected ) صفر منطقی هستند.

                دیدگاه


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

                  سلام
                  مگه شما پورت b رو hnput معرفی نکردید پس باید ورودی باشه یعنی وضعیت پایه هاش توسط ما مشخص بشه دیگه درسته؟؟؟؟؟؟؟؟؟؟؟؟
                  پس ما باید با توجه به رنجمون یکی از این پایه ها بین pb0 تا pb3 رو یک کنیم تا بتونیم به برنامه vb بفهمونیم که چه رنجی رو داریم ؟؟ منظورتون از سلکتور همینه ؟؟؟ چون ما دقیقا یه چیزی شبیه همین و می خوایم؟؟؟؟بع که printbin بزنیم مقدار باینری رو می تونیم ببینیم .اضافه ها رو هم زمین می کنیم.

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

                  دیدگاه


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

                    آره. منم منظورم این بود که شما در هر لحظه باید فقط یک ورودی رو فعال کنید. بقیه پایه ها باید زمین باشند.(هیچ پایه ای که به عنوان ورودی تعریف میشه نباید رها باشه( یا صفر باشه یا یک)

                    دیدگاه


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

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

                      حالا فقط مونده مدار آنالوگمون رو به میکرو وصل کنیم و کنترل رنج ها رو به برنامه میکرو اضافه کنیم .
                      آخه تصمیم داریم رنج ولتاژ مجهول که قراره ولتمتر ما اندازه بگیره رو اتوماتیک تعیین کنیم. یعنی باید اول بزرگترین رنج به صورت پیش فرض انتخاب بشه بعد بررسی کنه ببینه اگه به اون رنج نمی خورد خودش بره رنج پایین تر رو بررسی کنه و ... به همین ترتیب
                      تا اینکه رنج مناسب و پیدا کنه
                      به نظرتون برنامش با بیسکام خیلی سخت نیست ؟جواب گرفتنش و می گم ؟
                      این قسمت آخرین قسمت برنامه با بیسکام خواهد بود oo:

                      کسی می دونه آقای نجفی چرا جواب ما رو نمی دن ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :rolleyes:
                      (برای برنامه Vb )
                      من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                      دیدگاه


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

                        من برای برنامه نوشتن دو حالت در نظر می گیرم : یا می تونم یا نمی تونم. به صورت سخت و آسون طبقه بندی نمی کنم.

                        اما راجع به اون بحث Auto:
                        اگه قراره اتوماتیک ولتاژ رو پیدا کنه ، پس وضعیت این پورت B که ورودی تعریف شده چی میشه.
                        اگه از حالت Manual هم استفاده می کنین باید یه پایه رو به عنوان ورودی تعریف کنید که وضعیت Auto/Manual رو تعیین کنه. اگه مدار آنالوگتون این کار رو انجام میده که لازم نیست این کار بکنین( جدیدا حافظم خیلی ضعیف شده - هیچی یادم نمیاد).
                        به هر حال برای حالت Auto باید از دستورات شرطی استفاده کنید. به این صورت که تو لحظه اول برنامه یه مقدار از ADC می خونه . بعد شما یه شرط میذارین که اگر مقدار خونده شده کمتر از 410 بود بره تو رنج بعدی.( 410 رو این طوری حساب کردم:
                        بالاترین رنجتون 50 ولته. رنج بعدی 20 ولت . پس رنج دوم 0.4 رنج اوله. پس اگه عدد دریافتی از ADC کمتر از410 ( 0.4 عدد 1023) باشه ، می تونه تو رنج 20 ولت هم قرار بگیره).

                        به همین صورت می تونین رنج بعدی رو چک کنید.

                        امیدوارم فهمیده باشین. (من که خودم یه دور خوندم گیج شدم )

                        دیدگاه


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

                          .
                          من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                          دیدگاه


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

                            نوشتن رو که خوب نوشتیم منظورم از سختی جواب گرفتنش بود آخه برنامه یکخورده پیچیده می شه
                            همین برنامه های ساده هم کشت مارو تا جواب داد!!

                            پورت b هیچی اون مربوط به برنامه قبلی بود که برای جزء کردن برنامه و راحت جواب گرفتن ازش تعریف کرده بودیم( حالا توی برنامه کلی باید به عنوان output تعریف بشه )

                            میکرو باید
                            هم آی سی سوئیچ رو کنترل کنه (از طریق صفر و یک کردن یکی از پورتها(B )) ،
                            هم اینکه نمونه رو بگیره و رنجش رو تعیین کنه بعد بر همین اساس آی سی سوئیچ رو کنترل می کنه که کدوم رنج رو در مدار قرار بده (همون تقسیم مقاومتی ها)

                            ببینید یک چیزی ، ما الان برنامه رو با همون دستورات شرطی نوشتیم اما ما بر اساس عددی بین 0-5 ولت نوشتیم که اگه توی این رنج بود درسته مثلا ... وااااااااااااااای اینکه اشتباه بوده پس :cry2:

                            شما می گین باید همون 1023 و ... در نظر بگیریم و مقایسه کنیم ؟ نمی شه که ! اون که توی ارسال به pc به شکل 1023و 511 و 255 و اینا در میومد
                            آخه عددی که از ADc می خونیم و توی یک متغیر word میریزیم یعنی 10 بیتیه دیگه
                            اونو چی جوری باید مقایسه کنیم ؟ با 3ff و... اینا ؟
                            یعنی می خوام ببینم توی برنامه میکرو ما مقایسه رو باید بر اساس چه نوعی از عدد بنویسیم؟؟؟
                            1023-----5v------3FF
                            کدومش ؟؟؟؟؟؟؟؟؟
                            من از نوشته شما گیج نشدم اما از این موضوع الان کاملا قاط زدمممممم
                            وای از این تبدیل اعدادی که این میکرو انجام می ده !!

                            الان به من بگین : متغیر w که از نوع word تعریف کردم و از adc خونده می شه و توی اون ریخته می شه رو با چه نوع عددی مقایسه کنم که میکرو بفهمه و درست مقایسه رو انجام بده؟

                            گمونم چون باینری می ریزه با 3ff , 1ff,0ff,.... مقایسه می کنه ، نه ؟
                            من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                            دیدگاه


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

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

                              دیدگاه


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

                                1023 دسیمال با 3FF هگز هیچ فرقی نمی کنه. هر دوتاشو می تونی تو برنامه استفاده کنی. فقط باید بگی که عدد از نوع دسیماله یا هگز.
                                شما پورت B رو به عنوان خروجی تعریف کن. اول وضعیت پورت رو تو حالتی بذار که تو رنج 50 ولت باشه. بعد عدد ADC رو بخون اگه کمتر از 410 بود پورت B رو به وضعیت رنج 20 ولت تغییر بده. دوباره از ADC بخون . این بار اگه مقدار خونده شده کمتر از ... بود ( با توجه به مقدار رنج بعدیتون) پورت رو به وضعیت بعدی تغییر بده و به همین صورت...

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

                                دیدگاه

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