اطلاعیه

Collapse
No announcement yet.

7 سگمنت و ADC

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

    7 سگمنت و ADC

    سلام
    من میخوام یه دما سنج با 7سگمنت و lm35 بسازم اما به مشکل اصابت کردم لطفا کمک.
    اینم برنامه:
    کد:
    $regfile "m8def.dat"
    $crystal = 8000000
    Config Adc = Single , Prescaler = Auto 
    Config Portb = Output
    Config Portc = Input
    Config Portd = Output
    Const Digit1 = &B01000000
    Const Digit2 = &B00100000
    Const Digit3 = &B00010000
    Dim A As Word , C As Single , F As Byte
    
    Start Adc
    Test:
    Portd = &B01110000
    Portb = 0
    Waitms 500
    Portd = &B00000000
    
    Main:
    Do
    A = Getadc(0)
    c = A / 2.04
    
    Waitus 1
     C = C Mod 10
     F = Lookup(c , Digits)
     Portd = F
     Portb = Digit1
     Waitms 5
     C = C / 10
     F = Lookup(c , Digits)
     Portd = F
     Portb = Digit2
     Waitms 5
     C = C / 100
     F = Lookup(c , Digits)
     Portd = F
     Portb = Digit3
     Waitms 5
    Loop
    End
    
    Digits:
    Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111 , 64
    '  0  1 2  3  4  5  6  7 8  9  -

    دمتون گرم
    سه توصیه دارم:
    1.کار 2.کار 3.کار
    ادیسون

    #2
    پاسخ : 7 سگمنت و ADC

    سلام.
    نفرمودید چه مشکلی؟
    اما چنتا نکته که در مورد برنامه ای که نوشتی به نظرم میرسه اینه:
    1)متغییر c رو از نوعinteger تعریف کن.
    2)واسه جدا کردن رقمهای مقدار c اینجوری عمل کن:
    Main:
    Do
    A = Getadc(0)
    C = A / 2.04

    Waitus 1
    C = C Mod 10
    F = Lookup(c , Digits)
    Portd = F
    Portb = Digit1
    Waitms 5
    C = C / 10
    c=c mod 10

    F = Lookup(c , Digits)
    Portd = F
    Portb = Digit2
    Waitms 5
    C = C / 10
    c=c mod 10

    F = Lookup(c , Digits)
    Portd = F
    Portb = Digit3
    Waitms 5
    Loop
    End

    دیدگاه


      #3
      پاسخ : 7 سگمنت و ADC

      سلام
      ممنون از همکاریتون
      شما گفتید که متغیر c رو از نوع integer تعریف کنم اما تو کاتب گفتندکه باید از نوع single باشه.در زمن برای جدا کردن اعدا باید اولی رو بر 10 دومی رو بر 100 تقسیم کنم.
      مشکل من اینه که دما رو که میگیره نشون نمیده.

      دمتون گرم
      سه توصیه دارم:
      1.کار 2.کار 3.کار
      ادیسون

      دیدگاه


        #4
        پاسخ : 7 سگمنت و ADC

        سلام.
        دوست عزیز من خودم دماسنج رو ساختم اما با یه روش دیگه برنامش رو نوشتم.
        متغییر c رو هم که میگم integer تجربه شخصی بدست آوردم :icon_razz:
        شماتیک مدار رو اگه بذاری بهتر میشه بحث کرد که چرا نشون نمیده.

        دیدگاه


          #5
          پاسخ : 7 سگمنت و ADC

          شماتیک خاصی نداره.یه سون سگمنت چارتایی هست که من 3تاشو استفاده کردم و اونارو به پوردت D وصل کرم و برای رفرش کردن به پورت B و یه سنسور دما به کانال 0 میکرو وصل کردم همین و از ولتاژ مرجع داخلی استفاده میکنم.

          دمتون گرم
          سه توصیه دارم:
          1.کار 2.کار 3.کار
          ادیسون

          دیدگاه


            #6
            پاسخ : 7 سگمنت و ADC

            پیکر بندی ADC رو اینجوری تغییر بده:

            CONFIG ADC = single, PRESCALER = AUTO, REFERENCE =AVCC

            پایه AREF و AVCC رو به 5 ولت و AGND رو به زمین وصل کن و امتحان کن.

            دیدگاه


              #7
              پاسخ : 7 سگمنت و ADC

              در مورد صحت اندازه گیری اونو با lcd امتحان کردم جواب داد.در مورد متغیر c اونو از نوع single انتخاب کردم تا دمارو دقیق نشئن بده چون اگر چیزی غیر از این رو انتخاب میکردم بعد از دمای 25 یه درجه بیشتر نشون میداد.من قسمت اعشار رو با INT حذف کردم.اما مشکل من نشون دادن رو 7سگمنته.برای ریفش کردن مشکل ندارم اما نیمدنم چرا اعداد رو نامعلوم نشون میده/

              ورژن بعدی برنامه :icon_razz:
              $regfile "m8def.dat"
              $crystal = 8000000
              Config Adc = Single , Prescaler = Auto
              Start Adc
              Config Portb = Output
              Config Portd = Output
              Const Digit1 = &B01000000
              Const Digit2 = &B00100000
              Const Digit3 = &B00010000
              Dim A As Word , C As Single , D As Byte , E As Byte , F As Byte , L As Integer , S As Byte
              Cursor Off
              Do
              A = Getadc(0)
              C = A / 2.04
              L = Int(c)

              D = L Mod 10
              E = L / 10
              F = L / 100

              If L < 100 Then
              Portb = Digit1
              Portd = Lookup(d , Digits)
              Waitms 4
              Portd = Digit2
              Portd = Lookup(e , Digits)
              Else
              Portb = Digit1
              Portd = Lookup(f , Digits)
              Waitms 4
              Portb = Digit2
              Portd = Lookup(e , Digits)
              Waitms 4
              Portb = Digit3
              Portd = Lookup(d , Digits)
              End If
              Loop

              End 'end program
              Digits:
              Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111 , 64
              ' 0 1 2 3 4 5 6 7 8 9 -


              دمتون گرم
              سه توصیه دارم:
              1.کار 2.کار 3.کار
              ادیسون

              دیدگاه


                #8
                پاسخ : 7 سگمنت و ADC

                نبود...
                سه توصیه دارم:
                1.کار 2.کار 3.کار
                ادیسون

                دیدگاه


                  #9
                  پاسخ : 7 سگمنت و ADC

                  این برنامه ورژن 2 ، رو lcd درست نشون میده؟
                  روی 7سگمنت چی نشون میده؟

                  دیدگاه


                    #10
                    پاسخ : 7 سگمنت و ADC

                    رو 7سگمنت چندتا خط و اعداد به صورت نامعلوم نشون میده.باید اعداد دقیق باشند تا بتونه از جدول lookup عدد رو انتخاب کنه.حالا اگه روش دیگه ای هست بگید تا انجام بدم.
                    سه توصیه دارم:
                    1.کار 2.کار 3.کار
                    ادیسون

                    دیدگاه


                      #11
                      پاسخ : 7 سگمنت و ADC

                      سلام.
                      پیشنهاد میکنم واسه اینکه از صحت جدول لوکاپت مطمئن شی اول یه برنامه ساده بنویس و اعداد رو ببین درست نشون میده.هر مشکلی جدول داره حل کن بعد بذارش تو برنامت

                      دیدگاه


                        #12
                        پاسخ : 7 سگمنت و ADC

                        جدول لوکاپت مشکلی نداره استاندارده برا 7سگمنت .مسکل من اینه که بجای انتخاب عدد مورد نظر یه عدد دیگرو انتخاب میکنه .من میخوام اعداد به دست اومده از 0 تا 9 باشه و به صورت کاملا روند.چون جدول لوکاپ عدد اعشاری رو قبول نمیکنه.حالا بگید روش تقسیم اعداد درسته که برای جدا کردن یگان و دهگان انجام دادم یا نه؟منم رشتم الکترونیک نیست که بتونم اینارو راحت تحلیل کنم یکم باشون مشکل دارم.


                        دمتون گرم
                        سه توصیه دارم:
                        1.کار 2.کار 3.کار
                        ادیسون

                        دیدگاه


                          #13
                          پاسخ : 7 سگمنت و ADC

                          سلام.
                          دوست عزیز واسه اینکه مطمئن شی که رقمهای متغییر L به درستی از هم جدا میشن،روی ال سی دی نمایششون بده ببین درستن یا نه.

                          دیدگاه


                            #14
                            پاسخ : 7 سگمنت و ADC

                            گفتم که رو lcd جواب داد رو 7سگمنت جواب نمیده :cry:
                            سه توصیه دارم:
                            1.کار 2.کار 3.کار
                            ادیسون

                            دیدگاه


                              #15
                              پاسخ : 7 سگمنت و ADC

                              سلام.
                              آقا حسین واسه رفع عیب یه برنامه باید قدم به قدم دستورات برنامه رو چک کنی ببینی مشکل از کجاست.این جوری خیلی سریع رفع عیب میشه کرد.
                              منم این چنتا کاری رو که گفتم انجام بده واسه همین بود.
                              اگه امتحان کردی همش درست جواب داده حالا این کارو هم امتحان کن:
                              $regfile "m8def.dat"
                              $crystal = 8000000
                              Config Adc = Single , Prescaler = Auto
                              Start Adc
                              Config Portb = Output
                              Config Portd = Output
                              Const Digit1 = &B01000000
                              Const Digit2 = &B00100000
                              Const Digit3 = &B00010000
                              Dim A As Word , C As Single , D As Byte , E As Byte , F As Byte , L As Integer , S As Byte
                              Cursor Off
                              Do
                              A = Getadc(0)
                              L = A / 2

                              D = L Mod 10
                              E = L / 10
                              F = L / 100

                              If L < 100 Then
                              Portb = Digit1
                              Portd = Lookup(d , Digits)
                              Waitms 4
                              Portd = Digit2
                              Portd = Lookup(e , Digits)
                              Else
                              Portb = Digit1
                              Portd = Lookup(f , Digits)
                              Waitms 4
                              Portb = Digit2
                              Portd = Lookup(e , Digits)
                              Waitms 4
                              Portb = Digit3
                              Portd = Lookup(d , Digits)
                              End If
                              Loop

                              End 'end program
                              Digits:
                              Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111 , 64
                              ' 0 1 2 3 4 5 6 7 8 9 -

                              دیدگاه

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