اطلاعیه

Collapse
No announcement yet.

کمک برای نوشتن برنامه ولتمتر

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

    کمک برای نوشتن برنامه ولتمتر

    سلا به همه
    من می خوام برنامه ولتمتر رو با بسکام بنویسم منتهی نمی دونم چه جوری ، کسی میتونه راهنمایی کنه که چه جوری بنویسم و از چه دستورهایی استفاده کنم؟
    زندگی تاس خوب آوردن نیست ، تاس بد را خوب بازی کردن است

    #2
    پاسخ : کمک برای نوشتن برنامه ولتمتر

    سلام دوست من
    به لینک زیر سز بزن تا مشکلت حل بشه.
    http://www.eca.ir/forum2/index.php?t...1613#msg111613
    **همیشه به این فکر کن که خداوند با توست**

    دیدگاه


      #3
      پاسخ : کمک برای نوشتن برنامه ولتمتر

      سلام
      لینک رو دیدم
      ممکنه یکم توضیح بدین که چه جوری با adc ولتاژ رو اندازه می گیره؟
      مرسی
      زندگی تاس خوب آوردن نیست ، تاس بد را خوب بازی کردن است

      دیدگاه


        #4
        پاسخ : کمک برای نوشتن برنامه ولتمتر

        سلام
        adc داخلی میکرو دارای وضوح ده بیتی هست و حداکثر ولتاژی که می تونی به پایه adc بدی 5 ولت ، adc حداکثر سطح ولتاژ که عدد 5 هست رو معادل 2 به توان 10 (=1024) در نظر میگیره ، با این توضیحات adc به ازای چه میزان تغییرات سطح ولتاژ آنالوگ یک واحد دیجیتال افزایش یا کاهش خواهد داشت ؟ کافیه از یک نسبت ساده استفاده کنیم :

        5v 1024
        x 1

        که میشه حدود 5 میلی ولت ، به این معنی که صفر ولت آنالوگ معادل 0 و (4.88mV(=0.00488 معادل 1 ، 9.76 = 4.88mV * 2 معادل 2 و ...
        حالا فرض کنیم ولتاژ 2.3 ولت باشه ، adc عددی که می خونه برابر هست با (471 = 2.3/0.00488 )

        بنابراین هر عددی که توسط adc میکرو خونده شد توی برنامه با ضرب در عدد 0.00488 ( یا عکسش : تقسیم بر 204.9 = 1/0.00488 ) تبدیل به مقدار آنالوگ خودش میشه .

        دیدگاه


          #5
          پاسخ : کمک برای نوشتن برنامه ولتمتر

          من برنامه زیر رو تو پروتیوس اجرا کردم اگر بخوایم فقط تا 3 رقم اعشار نشون بده نه تمام اعشارشو باید چیکار کنیم؟
          ولتاژهای بین 0 تا 5 رو نشون می ده بخوایم بیشتر از این رو هم نمایش بده چی؟
          avcc رو برابر 5 باید بزاریم دیگه؟
          واحدشم ولت هست دیگه؟
          [hr]
          $regfile = "m16def.dat"
          $crystal = 8000000
          Config Adc = Single , Prescaler = Auto , Reference = Avcc
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
          Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
          Start Adc
          Dim W As Single
          Dim A As Word
          Do
          W = 0
          A = Getadc(0)
          W = A / 204.5
          Lcd W ; " volt "
          Waitms 50
          Cls
          Loop
          End

          زندگی تاس خوب آوردن نیست ، تاس بد را خوب بازی کردن است

          دیدگاه


            #6
            پاسخ : کمک برای نوشتن برنامه ولتمتر

            - متغیر w بر حسب ولت هست دیگه

            - avcc رو فکر کنم باید 5 ولت رو بزاری ( دقیقا خاطرم نیست :biggrin

            - اگه میخوای رنج اندازه گیری شده بیشتر باشه میشه از تقسیم مقاومتی استفاده کنی مثلا اگه ولتاژت تا 30 ولته و با تقسیم مقاومتی به 5 ولت روی پایه adc رسوندیش تو برنامه و بالاتر از دستور lcd اینو بنویس :
            w=w*6

            - برای روند کردن هر جایی که برنامه رو بخوای استفاده کنی فرقی نداره کافیه از این دستور استفاده کنی :

            تعداد # بعد از نقطه معادل تعداد رقم های اعشار هستش ( اینجا تا سه رقم اعشار )

            دیدگاه


              #7
              پاسخ : کمک برای نوشتن برنامه ولتمتر

              کد:
              $regfile = "m32def.dat"
              $crystal = 10000000
              $baud = 9600
              '--------------------------------------------------------
              Dim C As Byte
              Dim B As Byte
              Dim A(200) As Word
              Dim Mina As Long
              Dim Omid As Word
              Dim Omid2 As Single
              Dim Mega As Byte
              
              Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portb.1
              Config Lcd = 20 * 4
              Enable Interrupts
              Config Adc = Single , Prescaler = 2 , Reference = Internal
              
              '---------------------------------------------------------
              Deflcdchar 0 , 32 , 32 , 7 , 5 , 7 , 1 , 2 , 4       ' æ
              Deflcdchar 1 , 4 , 4 , 4 , 4 , 28 , 32 , 32 , 32      ' á
              Deflcdchar 2 , 32 , 12 , 32 , 4 , 31 , 32 , 32 , 32     ' Ê
              Deflcdchar 3 , 2 , 2 , 2 , 2 , 3 , 32 , 32 , 32       ' Ç
              Deflcdchar 4 , 32 , 4 , 14 , 32 , 4 , 4 , 8 , 16      ' Ò
              Cls
              Lcd "In The name of God"
              Waitms 700
              Locate 2 , 14
              Lcd ":" ; Chr(4) ; Chr(3) ; Chr(2) ; Chr(1) ; Chr(0)
              Wait 1
              Locate 1 , 1
              Lcd "  OMID Habibi  "
              Cursor Off Noblink
              '-----------------------------------------------
              Do
              
              For Mega = 17 To 1 Step -1
              Mina = 0
              For B = 1 To 200
              Start Adc
              A(b) = Getadc(0)
              Stop Adc
              A(b) = A(b) / 4
              Mina = Mina + A(b)
              
              Next B
              Omid = Mina / 200
              Omid2 = Omid / 52
              
              Locate 3 , 1
              Lcd "      "
              Locate 3 , 1
              Lcd Omid2
              Locate 3 , 6
              Lcd "     "
              Locate 3 , 6
              Lcd "V"
              Locate 4 , 1
              Lcd "********************"
              Locate 4 , Mega
              
              Lcd "AVR"
              Waitms 470
              Next
              
              Loop
              این ولتمر تا 5 ولت رو تا 3 رقم اعشار نشون میده
              من تست کردم(اخه واسه ازمایشگاه میکرو بود مجبور شدم تست کنم )

              برنامه خیلی خوب کار می کنه و تقریبا هیچ خطایی نداره(در حد چند میلی ولت)

              در ضمن به خواست استاد کلمه (((ولتاژ)))به فارسی روی lcd نوشته شده و روش کلمه Avr رو هم دارم شیفت میدم(واسه بریدن کف استاد) :icon_razz:
              علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

              دیدگاه

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