اطلاعیه

Collapse
No announcement yet.

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

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

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


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

    هم اکنون نیازمند یاری سبزتان هستیمممممممم :wow: :wow:
    شما اصلا برنامتون رو کامپایل کردین؟
    من که کامپایل کردم 1234 تا خطا داد
    1- Refrnce غلطه. درستش میشه Reference
    2- Uscar چیه دیگه؟
    3- متغیر B رو بیت تعریف کردین ، بعد یک بایت توش می ریزین؟ ( B=High(a) :question:
    4- Else If غلطه. درستش میشه ElseIF (بدون فاصله)
    5- چندجا نوشتین : If B <> 0 Goto Start . چرا این IF ، دستور Then نداره؟
    6- به جای نو.شتن Pb.0 = 1 , Pb.1 = 0 , Pb.2 = 0 , Pb.3 = 0 (که اشتباهه) باید بنویسین :Portb.0 = 1: Portb.1 = 0: Portb.2 = 0: Portb.3 = 0 . همه جای برنامه رو درست کنین. در ضمن بین چند دستور دونقطه میذارن
    7- به جای If 1 <= W <= 4.7 Then باید بنویسین : If 1 <= W And W<= 5 Then. توجه کنین که متغیر W از نوع اعشاری نیست . پس نمی تونین با 4.7 مقایسه کنین.
    8- به جای 1000h باید بنویسین H1000& (البته اگه منظورتون 1000 در مبنای هگزه)
    9-همه این مواردی رو گفتم به شکلای مختلف تو برنامه استفاده کردین . حتما درستش کنین.
    10- بهتره Label رو تو برنامه از کلمات تعریف شده استفاده نکنین( مثل Start )

    اینا فقط خطاهای زمان Debug بود . در مورد برنامه بعدا صحبت می کنیم



    دیدگاه


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

      سلام من برنامه رو کامپایل کرده بودم ولی 40 تا خطا بیشتر نداده بود :cry2:
      احتمالا بیسکام شما با ما لجه
      رجیستر Uscar یک بیت به نام RXC داره که اگه این بیت یک باشه یعنی میکرو عددی از پورت در یافت کرده و اگر صفر باشه عددی دریافت نکرده است ما از این بیت برای سرکشی استفاده می کنیم که وسط برنامه اون رو سرکشی می کنیم اگه صفر یا یک باشه کار های مختلف انجام می ده پس اسن یه رجیستر برای ار تباط سریال هست!!!!!
      برای متغییر B ما می خواستیم بیت پرارزشش رو که همون RXC است جدا کنیم الان که کتاب رو دیدم فهمیدم اشتباه کردیم باید برای جدا کردن RXC که بیت هفتم اون رجیستره از شیفت استفاده منیم نه؟؟؟یه بار شیفت به چپ بدیم کافیه درسته؟؟؟؟؟
      بقیش رو الان درست می کنم و می ذارم اینجا تا امشب ترو خدا زود زود سر بزنید
      گاهی دلم برای چوپان دروغگو خیلی می سوزد.بیچاره 2 بار بیشتر دروغ نگفت انگشت
      نماشد... ولی ما هنوز صادق ترینیم

      دیدگاه


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

        یه سوالی واسه بنده مطرحه
        شما با برنامه نویسی سطح بالا کار می کنید ( بسکام )
        یا با اسمبلی
        یا سی

        چرا اینقدر با مسله سطح پائین برخورد می کنید
        اخه اینکه اسمبلی 8051 نیست که :eek:
        خودتون هم اذیت میشید :smile:

        دیدگاه


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

          وایییییی چه اشکالات مضحکی داشت واقعا خجالت کشیدیم :redface:
          آخه ما فقط رویی کاغذ برنامه رو نوشته بودیم و ...
          مرسی که خندیدین به برناممون :mrgreen: واقعا من تشکر می کنم! خدا آخر عاقبت این پروژه رو به خیر کنه !
          آقای حامد ممنون که اشکالاتش رو متذکر شدین برطرفش می کنیم. یه ایراد هم برای کمبود حافظه sram می گرفت ، اون جریانش چیه ؟
          آقای حاجی زاده حق با شماست ، آخه ما تا حالا با زبان های سطح بالا برنامه ننوشتیم و این تقریبا اولین تجربمونه با بیسکام.
          توی درس میکرو دانشگاه هم برنامه نویسی با اسمبلیه ..
          اگه می شه لطف کنین راهنماییمون کنین تا سطح بالا برخورد کردن و یاد بگیریم و مرسی
          آقای روباه مگه ما چه جوری پیش می ریم ؟ :cry:
          من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

          دیدگاه


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

            سلام
            دوست عزیز یه سوال چرا زبان برنامه نویسی بیسیک ایجاد شد
            واسه این که هر کسی که تجربه ای در مورد برنامه نویسی نداره بتونه راحت وارد محیط های برنامه نویسی بشه و ترسش بریزه
            حالا کاری ندارم
            منظورم اینه که شما وقتی داری با بسکام کار می کنی نباید زیاد نگران مسائل جانبی سخت افزاری باشی مثلا حافظه چقدر دارم فلان رجسیتر چی شد اینا رو خود کامپایلر مدیریت می کنه
            شما راحت بشین و تمرکز تون رو روی منطق برنامه بذار
            مطمئن باش این طوری کارت راحت تره

            حتی اگه با سی کار می کردیدهمین رویه رو باید دنبال می کردید
            یعنی اول واسه ماژول های مختلف تابع می نوشتید تا از گیر و بند مسائل سطح پائین سخت افزاری جدا بشید و بعد از این مرحله با استفاده از همین توابع کارای سطح بالا و توابع مربوط می نوشتید

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

            حداقل واسه این پروژه اتون
            وقت رو در نظر بگیرید داره از دست میره

            موفق باشید

            دیدگاه


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

              برای داشتن این همه خطا نخندیدم. برای این خندیدم که رو کاغذ برنامه رو نوشتین.

              رجیستری رو که برای ارتباط سریال استفاده میکنین درست نیست. یه نگاه به دیتاشیتش بکنبد.

              در ضمن منم حرف رضای عزیز رو تایید می کنم. اگه می خواین بیسیک کار کنین چرا این همه تو رجیسترها می خواین بچرخین؟

              در ضمن من برنامه رو کامپایل کردم ، خطایی برای حافظه توش ندیدم. شما از چه ورژن بیسکام استفاده می کنین؟ دمو که نیست؟

              دیدگاه


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

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

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

                دیدگاه


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

                  سلام
                  ممنون من برنامه رو اصلاحاتش رو انجام دادم
                  اون مشکل هم رفع شد روی کامپیوتر خودم تست نکرده بودم الان این کار و کردم دیدم آره از حافظه ایراد نمی گیره و ضمنا از ورژن 1.11.7.4 که توی کتاب کاهه بود استفاده می کنیم
                  الان برنامه تصحیح شده رو می ذارم فقط دو تا ایراد می گیره الان ، شما هم لطفا یکبار کامپایل کنین ببینین همبن دوتاست یا بیشتره !!! اینا رو هم بعد از روشن شدن تکلیفشون به کمک شما درست خواهیم کرد. مرسی
                  برای رجیستر ایراد می گیره نمیدونم چرا . آخه اینو از توی دیتا شیت مگا 32 دیدیم مطمئنیم همینه بیت هفتم همین رجیستر باید چک بشه... بعدم اینکه می گین نیاز به کار با رجیستر نیست پس می شه بگین باید چی کار کنیم ؟ یعنی اگه با رجیستر کار نکنیم پس میکرو از کجا باید بفهمه که براش عدد اومده ؟؟؟؟ بیسکام سطح بالاست درنتیجه طبق گفته شما باید راه ساده تری وجود داشته باشه دیگه نه ؟ اون چیه ؟
                  آقای حاجی زاده ممنونم از توضیحاتتون بازم ما رو راهنمایی کنین مثلا از قابلیت هایی که داره و ما نمی دونیم برامون بگین تا برناممون رو ساده تر کنیم . خودمون هم خیلی نگرانیم چون واقعا وقتی باقی نمونده :cry2:
                  $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 , Reference = Avcc
                  Main:
                  A = Ucsra
                  B = High(a)
                  If B = 0 Then Goto Main
                  X = Udr
                  If X = &H01 Then
                  Goto Lable1
                  Elseif X = &H02 Then
                  Goto Lable2
                  Elseif X = &H03 Then
                  Goto Lable3
                  Elseif X = &H04 Then
                  Goto Lable4
                  Elseif X = &H05 Then
                  Goto Lable5
                  Elseif X = &H06 Then
                  Goto Lable6
                  End If
                  Goto Start
                  Lable1:
                  Do
                  Waitms 0.1
                  Gosub Loc1
                  If B <> 0 Then Goto Main
                  Loop
                  Lable2:
                  Do
                  Waitms 1
                  Gosub Loc1
                  If B <> 0 Then Goto Main
                  Loop
                  Lable3:
                  Do
                  Waitms 5
                  Gosub Loc1
                  If B <> 0 Then Goto Main
                  Loop
                  Lable4:
                  Do
                  Waitms 10
                  Gosub Loc1
                  If B <> 0 Then Goto Main
                  Loop
                  Lable5:
                  Do
                  Waitms 20
                  Gosub Loc1
                  If B <> 0 Then Goto Main
                  Loop
                  Lable6:
                  Do
                  Waitms 50
                  Gosub Loc1
                  If B <> 0 Then Goto Main
                  Loop
                  Loc1:
                  Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0 : Portb.3 = 0
                  Loc10:
                  W = Getadc(0)
                  If 1 <= W And W <= 5 Then
                  W = W Or &H1000
                  Print W
                  Elseif W > 5 Then
                  Print "voltage is out of range"
                  Elseif W < 1 Then
                  Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 0 : Portb.3 = 0
                  End If
                  Loc11:
                  W = Getadc(0)
                  If 1 <= W And W <= 5 Then
                  W = W Or &HC00
                  Print W
                  Elseif W > 5 Then
                  Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0 : Portb.3 = 0
                  Goto Loc10
                  Elseif W < 1 Then
                  Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1 : Portb.3 = 0
                  End If
                  Loc12:
                  W = Getadc(0)
                  If 1 <= W And W <= 5 Then
                  W = W Or &H800
                  Print W
                  Elseif W > 5 Then
                  Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 0 : Portb.3 = 0
                  Goto Loc11
                  Elseif W < 1 Then
                  Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 0 : Portb.3 = 1
                  End If
                  W = Getadc(0)
                  If 1 <= W And W <= 5 Then
                  W = W Or &H400
                  Print W
                  Elseif W > 5 Then
                  Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1 : Portb.3 = 0
                  Goto Loc12
                  End If
                  من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                  دیدگاه


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

                    1- قبلا که نسخه موجود در کتاب دمو بود . جدیدا نمی دونم نسخه کامل گذاشته شده یا نه. اون نسخه برنامه های بیشتر از 2 کیلو رو خطا میداد.
                    2- یک خطا مربوط به همون رجیستریه که گفتم. اگه اینی که شما نوشتین رجیستر باشه تو محیط بیسکام قرمز رنگ دیده میشه ( نه سیاه)
                    3- خطای دیگه هم مربوط به خط بعدشه . فکر کنم هنوز مفهوم High رو نفهمیدین.اگه شما می خواین بیت هفتم متغیر A رو تو B بریزین ینویسین: B=A.7 . همین.
                    4- به غیر از این دو تا برنامه یه خطای دیگه هم داره که اونا رو درست کنی خودشو نشون میده. لیبلتون رو نصفه درست کردین. شما فقط در محل تعریف لیبل اونو تغییر دادین در صورتی که تو خط 27 برنامه از Goto Start استفاده کردین. باید اونو به Goto Main تغییر بدین.

                    اینا رو که درست کنین تازه برنامه خطای دیباگ نمیده. تازه میرسیم به اصل برنامه. الان که فرصت نداشتم نگاه کنم. احتمال زیاد درست باشه(با توجه به الگوریتمی که قبلا گفته بودین. ) ولی یه چیز تابلو بود. دستور Start ADC رو ننوشتین. اگه اینو تو برنامه ننویسین(مثلا همون اول برنامه- همیشه قبل از GetADC باید نوشته بشه) تو عمل پروژتون کار نمی کنه.
                    حالا سعی کنین اون رجیستر رو پیدا کنین و سریع به مرحله عمل برسین.

                    Be Successfull

                    دیدگاه


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

                      سلام
                      برنامه نسخه کرک داره همراهش ، گمونم اونجا که از حافظه خطا می گرفت احتمالا کرک نشده بوده
                      بعدش هم من که گفتم دو تا خطا رو داره بله همونطور که رجیستر UDR رو قرمز کرده و یعنی شناخته باید این یکی هم قرمز رنگ می کرد که نمی دونم چرا نمی شناستش حالا فردا از استاد خواهم پرسید :agree:

                      high رو هم چرا متوجه شدم که یک بایت رو جدا می کنه نه بیت ! اما گذاشتم فعلا بمونه تا اصل کار که همون رجیستر هست تکلیفش روشن بشه بعد اگه پذیرفتش باید شیفت بدیم و بیت هفتمش رو بکشیم بیرون و ... اینه که چون اصل کار خراب بود به این high هم دست نزدم.
                      عرض کردم که خواستم ببینم بازم ورژن شما تعداد خطای بیشتری نشون می ده یا همین 2 تا رو .. که فهمیدم . پس برنامه منم مشکلی نداره خطا ها رو می گیره .
                      lable رو هم درست می کنم. ببینم کجا جا مونده...
                      مرسی از پاسختون
                      شب یلدای همه تون بخیر :wow:
                      من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                      دیدگاه


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

                        خیلی جالبه
                        سه تا رجیستر داره توی قسمت usart ،
                        UcsrC , UcsrA , UcsrB
                        بعد این بیسکام نمی دونم چرا فقط UcsrC رو می شناسه و اون دو تارو نمی شناسه!
                        اون خط ها رو هم اصلاح کردم (B=A.7) خوبه ممنون دیگه احتیاجی به شیفت و این بازیا نیست
                        جدا چقدر ما کارارو سخت می گیریما!
                        start adc رو هم گداشتم بعد از config adc ...
                        دیگه خطایی نمی گیره جز همین رجیستر که اینم فردا ایشالا استاد راهنماییمون کنه وو بریم پروگرمش کنیم فردا. کاش اوکی شه ! :eek:
                        من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                        دیدگاه


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

                          سلام
                          خوب امروز به کمک استاد مشخص شد که بیسکام اون رجیستر رو با نام USR می شناسه
                          فعلا تمام خطاهای دیباگ برطرف شد
                          برنامه اینترفیس هم که کلا مونده یه جورایی ، ما دو بایت رو که میکرو ارسال می کنه می ریزیم توی یک متغیر string بعد دیگه با دستور val نمی شه مقدار دو بایت رو استخراج کرد با چه دستوری می شه ؟
                          یه نفر گفت با چه دستوری اما درست یادش نبود :
                          R=str convrt (meghdar,vb unicode)
                          البته اصلا مطمئن نبود ، گمونم اینطوری به صورت آرایه در میاد اما نمی دونم دو بایتی رو هم می شه یا نه و اینکه دستور دقیقش چیه ...
                          کسی می دونه دستورش چیه ؟ :surprised:
                          من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                          دیدگاه


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

                            خب حالا شد. رجیستر USR و بیت UDR .

                            دیدگاه


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

                              سلام به همگی
                              بله بیت هفتم USR نیاز هست و محتویات رجیستر UDR .

                              یک مشکل:
                              برنامه ای که میبینین رو توی میکرو پروگرم کردیم و بعد
                              توسط یک تقسیم مقاومتی ولتاژ های بین 0 تا 5 ولت رو به پایه ADC میکرو اعمال کردیم نتایج یکم نا امید کننده بود !!!

                              $regfile = "m32def.dat"
                              $crystal = 3686400
                              $baud = 9600
                              Config Adc = Single , Prescaler = Auto , Reference = Avcc
                              Dim W As Word
                              Dim A As Byte
                              Start Adc
                              Do
                              W = Getadc(0)
                              A = Low(w)
                              Loop
                              End

                              وقتی 5 ولت رو می دادیم مرتبا عدد 255 که معادل FF هگز است رو در کامپیوتر دریافت می کردیم تا اینجا درسته اما بعد
                              صفر رو که اعمال کردیم عددهای 0و1و2و3 رو نشون می داد که این یعنی مقداری خطا
                              حالا اینم فرض کنیم ندیده بگیریم... اما از این بدتر اینکه
                              وقتی 2.5 ولت اعمال کردیم انتظار می رفت عدد 127 که معادل 7F هگز است نشون داده بشه یعنی دقیقا نصف بشه اما عدد های حوالی 150 در کامپیوتر دریافت می شد! و همینطور برای بقیه ولتاژ ها:
                              2 ولت عدد 150
                              3.5 ولت عدد 212
                              دریافت شد !!!!!!!
                              برای 3.5 ولت باید حوالی 178 دریافت می شد اما...
                              این نتایج واقعا اشتباه هستن کسی می تونه لطف کنه دلیلش رو بهمون بگه ؟ ممنون می شم :job:
                              من آن گلبرگ مغرورم که می میرم ز بی آبی ولی با خفت و خواری پی شبنم نمی گردم.

                              دیدگاه


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

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

                                دیدگاه

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