اطلاعیه

Collapse
No announcement yet.

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

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

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

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

    دیدگاه


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

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

      دیدگاه


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

        سلام

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

        بهرحال ما تصمیم گرفتیم با یک oR کردن توی برنامه میکرو رنج رو با عدد 10 بیتی ADC کنار هم بگذاریم و ارسال کنیم. یعنی از 16 بیت متغیر W ، ده بیت عدد ADC باشه و توی شش بیت باقیمانده رنج رو قرار بدیم (با OR کردن) و بعد در برنامه VB با AND همونا رو از هم جدا کنیم.
        ضمنا ما ارسال یک عدد به کامپیوتر رو از طریق میکرو عملا جواب گرفتیم حدود یک ماه پیش و توی VB هم برنامشو نوشتیم و اونجا هم عدد ارسالی رو دریافت کردیم ولی فقط توی اینکه چه جوری عدد و رنج و با هم بفرستیم و بعد جدا کنیم احتیاج به راهنمایی داشتیم که حالا فکر کنم با همین AND , OR درست می شه.
        پس VB هم خودمون شروع کرده بودیم...

        ضمنا یکی به ما هم بگه توی این انجمن چه خبر شده ؟ جوش مثل قدیما دیگه صمیمی نیست... :sad:

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

        دیدگاه


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

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

          دیدگاه


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

            سلام
            چرا صمیمیه.بعضی موقع ها شوخی میکنیم صمیمی تر بشه.
            امیدوارم که از شوخی های ما هم دلگیر نشید.
            اینطوری که میگید نمیشه.شما اول باید با یک متغیر یا یک نوشته کوچیک که رنج رو اعلام میکنه بفرستید تا برنامه تو PC جای مورد نظر رو انتخاب کنه بعد عدد خونده شده از ADC رو که داخل یک متغیر Float هست رو ارسال کنید.
            در ضمن برنامه رو باید طوری بنویسید که بطور اتوماتیک پورت متصل به PC رو پیدا کنه.اگر نخواهید اینطور باشه باید دستی برید شماره پورت رو ببینید و وارد کنید.برنامتون رو بصورت مدیر ینویسید.یعنی اول رنج رو بگیره به قسمت اون رنج بفرسته و بعد دیتا رو بگیره.اگر میخواین همه رو با هم بفرستین یعنی هم رنج و هم دیتا باید یک پرتکل تعریف کنید.مثلا بین رنج و دیتا یک ستاره بفرستید که اینها رو از هم متمایز کنه و در 2 Lable یا Input Box قرار بده.
            باز هم هر سوالی بود من در خدمتم

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

            دیدگاه


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

              سلام و خسته نباشید
              ولی به نظر من که مثل قبل نیست ...

              چرا می گین اونطوری نمی شه؟
              ما به این صورت عمل می کنیم :
              XXXX XX00 0000 0000
              رنج موردنظرمون رو با OR کردن عدد فوق با ولتاژی که AD گزارش کرده توی یک بایت جا می دیم
              جای x ها عدد مربوط به رنج و باید بذاریم و بعد اینو با عددی که ده بیتیه و ADC ایجادش کرده OR می کنیم.

              بعد از اون طرف توی VB اولا برای جدا کردن رنج ، با عدد زیر AND خواهیم کرد:
              FC00
              و دوما برای جدا کردن ولتاژ با عدد 03FF ،
              and می کنیم
              از هم جدا می شن دیگه ؟؟؟؟!
              این چه مشکلی داره ؟ ممنون می شم اشکالشو بگین.
              نظر بقیه دوستان رو هم داشته باشیم خوشحال می شیم ....
              من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

              دیدگاه


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

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

                دیدگاه


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

                  سلام به همه دوستان
                  آقای روباه حیف اون دیوار نیست که سرتو بهش می کوبی خراب میشه ها

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

                  دیدگاه


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

                    الگوریتم برنامه VB
                    شروع
                    ابتدا باید تعیین پریود نمونه برداری توسط کلید های رادیویی در VB صورت گیرد.
                    6 کلید رادیویی می گذاریم که انتخاب هر کدام عددی را به میکرو ارسال کند ، اگر کلید رادیویی اول انتخاب شود عدد 1را به صورت یک بایت به میکرو ارسال می کنیم.و کلید رادیویی دوم عدد یک بایتی 2 را ارسال کند و ....
                    سپس عددی که میکرو به پورت سریال فرستاده است را در متغیر A می ریزیم.
                    عددی که در متغیر A است را با عدد h FF03 ، and می کنیم و در متغیر W می ریزیم.
                    عددی که در متغیرA است را با عدد h 00FC ، and می کنیم و در R می ریزیم.
                    اگر 1=R برو به 1loc
                    اگر 2=R برو به 2loc
                    اگر3=R برو به 3loc
                    اگر4=R برو به 4loc

                    1loc :
                    (0.005*1000)÷W را بریز در W
                    اگر 0.1>W> آنگاه W*1000 را بریز در W و
                    Wرا در text ای بریز که با رنج 0-1 ولت مشخص شده است ، رنج عدد را با mv مشخص کن.
                    وگرنه W در همان text بریز ولی با واحد ولت مشخص کن.
                    برو به شروع

                    Loc2:
                    (0.005*200)÷W را بریز در W
                    W را بریز در text که رنج 0-5 ولت را مشخص می کند
                    برو به شروع


                    Loc3:
                    (0.005*20)÷W را بریز در W
                    W را بریز در text که رنج 0-50 ولت را مشخص می کند
                    برو به شروع


                    Loc4:
                    (0.005*4)÷W را بریز در W
                    W را بریز در text که رنج 0-250 ولت را مشخص می کند
                    برو به شروع
                    پایان


                    توضیح :
                    اگه جایی اشکال داره ممنون می شم برام بگین
                    فقط بگم که and کردیم تا دو تا عددی که توی میکرو با هم ترکیب کرده بودیم و در قالب دو بایت فرستاده بودیم رو از هم جدا کنیم. ارسال و دریافت هم از طریق پورت سریال است.
                    بازم اگه جائیش مبهمه بگین توضیح می دم
                    ممنون می شم :nerd:

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

                    دیدگاه


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

                      آخه مشکل اینجاست که شما با بسکام برنامه میکر رو نوشتین و منم با بسکام کار نمی کنم .
                      ولی در کل ببین شما یک فرم Main بسازید که در اون ابتدا شماره پورت و نرخ ارسال و Stop Bit , ...رو از کاربر میخواد.وقتی اینها وارد شد با یک کلید این فرم Hide میشه و فرم دوم ظاهر میشه که حتی رو فرم اول میتونید کار گرافیکی و تبلیغ خودتون رو بکنید.تو فرم دوم که یک فرم کوچیک میتونه باشه چنتا کلید بزارین که رنج رو مشخص کنه.با فشار هر کلید یک پیغام از PC با دستور :
                      "مقدارتون"= MSComm1.output
                      به میکرو ارسال میشه.حالا تو میکرو یک حالت مدیریت باید ایجاد کنید.یعنی یک دستور گرفتن دیتا از USART میزاریدکه رنج رو بگیره.وقتی رنج رو گرفت تو یک آرایه یا متغیر قرار بده.حالا به تعداد رنج هاتون دستور IF قرار میدین و برنامه گرفتن از ADC و غیره هر رنج تویه این دستورات شرطی قرار میگیره.حالا وقتی از طرف PC دستور رنج میاد تو قسمت مدریت اول این تو یک آرایه یا متغر قرار داده میشه و بعد از این دستور که رد شد به هر کدوم این دستورات IF که رنج مورد نظر بخوره وارد اون میشه داخل هر دستور IF یک حلقه ثابت قرار میدین که مقداری که از ADC خونده شد در یک دستور به PC فرستاده بشه.تیه هر حلقه میتونید هم یکبار یا پشت سر هم این کار رو انجام بدید و با یک دستور به یک Lable بفرستید که از حلقه خارج بشه.با این روش دیگه احتیاجی نیست که که یک متغیر 16 بیتی بسازید و بخواین با هم بفرستسد یا OR کنیدو AND کنیدو اینا
                      خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

                      دیدگاه


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

                        سلام آقای روباه
                        ممنون
                        اما برنامه بیسکام ما آماده است کامل نوشتیمش این برنامه اینترفیس که ربطی به بیسکام نداره که شما باهاش کار نمی کنین !
                        من گفتم که با فشردن هر کدوم از کلید ها توی VB یک عدد خاص به میکرو ارسال بشه
                        عرض می کنم برنامه میکرو آماده است و نوشتیمش
                        اینی که من نوشتم الگوریتمیه که برای برنامه اینترفیس نیاز دارم و کاملا هم با توجه به برنامه میکرو تنظیم کردیم یعنی وقتی با فشردن کلید رنج نمونه برداری تعیین می شه یک عدد خاص به میکرو ارسال بشه از اونجا به بعدش به برنامه میکرو ربط داره
                        و باز بعد از اینکه میکرو اندازه گیری هاش رو انجام داد یک عدد به کامپیوتر ارسال می کنه و باز از اونجا به بعد باید توی برنامه vb عدد با توجه به رنجش که اونم میکرو باید بفرسته برامون دنرمالیزه بشه و نمایش داده بشه
                        من تمام محاسبات رو نوشتم توی الگوریتم بالا
                        الگوریتم برنامه میکرومون هم به همین صورت است که شما می گین اما برای اینکه عدد معلوم باشه رنجش چیه تصمیم داریم عدد و رنج رو با هم توی یک دو بایتی بفرستیمشون دیگه .
                        And , or هم به همین دلیله
                        شما برنامه میکرو رو توضیح دادین اما من الان برنامه vb رو می خوام
                        که شروع می کنم به نوشتن و می ذارم همینجا بر مبنای همین الگوریتم هم هست
                        ضمنا پورت رو خودمون توی برنامه تعیین می کنیم و همیشه com1 است
                        برنامه بیسکام هم به زودی می ذاریم اینجا که اگه کسی باهاش کار کرده و ... لطف کنه اشکالاتش رو بگه.
                        ممنون :job:
                        من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                        دیدگاه


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

                          شما نمی تونید همیشه و COM1 قرار بدین.چون تو هر کبامپیوتری معلوم نیست 1 کدوم و یا حتی ممکن بعضی PC ها COM1 نداشته باشن.
                          یا باید Searcher یا حالتی که بشه پورت رو وارد کرد.
                          با Activex پورت Com کار کردین؟
                          Microsoft Com Control
                          خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

                          دیدگاه


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

                            سلام بر دوستان

                            امیوار همگی خوب باشید :wow:
                            آقای روباه و سایر دوستان اینم برنامه میکرومون
                            اگه می شه عیب هاش رو بهمون بگید

                            $regfile="m32def.dat"
                            $crystal=3646800
                            $baud=9600
                            Dim w as word
                            Dim X As Byte , A As Byte
                            Dim B As Bit
                            Config Portb = Output
                            Config Adc = Single , Prescaler = Auto , Refrence = Avcc
                            Start:
                            A = Uscar
                            B = High(a)
                            If B = 0 Then Goto Start
                            X = Udr
                            If X = &H01 Then
                            Goto Lable1
                            Else If X = &H02 Then
                            Goto Lable2
                            Else If X = &H03 Then
                            Goto Lable3
                            Else If X = &H04 Then
                            Goto Lable4
                            Else If X = &H05 Then
                            Goto Lable5
                            Else If X = &H06 Then
                            Goto Lable6
                            End If
                            Goto Start
                            Lable1:
                            Do
                            Waitms 0.1
                            Gosub Loc1
                            If B <> 0 Goto Start
                            Loop
                            Lable2:
                            Do
                            Waitms 1
                            Gosub Loc1
                            If B <> 0 Goto Start
                            Loop
                            Lable3:
                            Do
                            Waitms 5
                            Gosub Loc1
                            If B <> 0 Goto Start
                            Loop
                            Lable4:
                            Do
                            Waitms 10
                            Gosub Loc1
                            If B <> 0 Goto Start
                            Loop
                            Lable5:
                            Do
                            Waitms 20
                            Gosub Loc1
                            If B <> 0 Goto Start
                            Loop
                            Lable6:
                            Do
                            Waitms 50
                            Gosub Loc1
                            If B <> 0 Goto Start
                            Loop
                            Loc1:
                            Pb.0 = 1 , Pb.1 = 0 , Pb.2 = 0 , Pb.3 = 0
                            Loc10:
                            W = Getadc(0)
                            If 1 <= W <= 4.7 Then
                            W = W Or 1000h
                            Print W
                            Else If W > 4.7 Then
                            Print "voltage is out of range"
                            Else If W < 1 Then
                            Pb.0 = 0 , Pb.1 = 1 , Pb.2 = 0 , Pb.3 = 0
                            End If
                            Loc11:
                            W = Getadc(0)
                            If 1 <= W <= 4.7 Then
                            W = W Or 0c00h
                            Print W
                            Else If W > 4.7 Then
                            Pb.0 = 1 , Pb.1 = 0 , Pb.2 = 0 , Pb.3 = 0
                            Goto Loc10
                            Else If W < 1 Then
                            Pb.0 = 0 , Pb.1 = 0 , Pb.2 = 1 , Pb.3 = 0
                            End If
                            Loc12:
                            W = Getadc(0)
                            If 1 <= W <= 4.7 Then
                            W = W Or 0800h
                            Print W
                            Else If W > 4.7 Then
                            Pb.0 = 0 , Pb.1 = 1 , Pb.2 = 0 , Pb.3 = 0
                            Goto Loc11
                            Else If W < 1 Then
                            Pb.0 = 0 , Pb.1 = 0 , Pb.2 = 0 , Pb.3 = 1
                            End If
                            W = Getadc(0)
                            If 0 <= W <= 4.7 Then
                            W = W Or 0400h
                            Print W
                            Else If W > 4.7 Then
                            Pb.0 = 0 , Pb.1 = 0 , Pb.2 = 1 , Pb.3 = 0
                            Goto Loc12
                            End If

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

                            دیدگاه


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

                              سلام
                              فعلا که همون تنظیم روی com1 کار ما رو راه میندازه چون نهایتا همونجا توی دانشگاه قراره پروژمون مورد ارزیابی قرار بگیره :mrgreen:
                              بعدها اگه خواست مورد extention واقع بشه قابلیت گشتن رو هم بهش می دیم ! ممنون از توضیحتون
                              بله با Microsoft Com Control کار کردم توی همون برنامه که گفتم نوشته بودیم و جواب رو دیدیم از mscomm استفاده کردیم .
                              سعی می کنم برنامه vb رو هم یه جورایی زودتر نوشته و اینجا بذاریم
                              مرسی
                              oo:
                              من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                              دیدگاه


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

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

                                دیدگاه

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