ايران ويج

نسخه‌ی کامل: ADC
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام

من با Mega8 یک دماسنج ساخته ام. وقتی برق 5 ولت به دستگاه می رسد، دما درست است( با LM35 اندازه گیری می کنم) اما وقتی برق می شود 4.7 ولت (یا یک ولتاژ دیگه به غیر از 5 ولت) دما اشتباه نشون داده می شود. ( از 7805 هم استفاده کردم اما درست نشد که بدتر شد!).

آیا این مشکل قابل حل شدن است؟؟؟
خب اگه آداپتور یا منبع تغذیه ات درست 5 ولت میده مستقیم به مداروصل کن و7805 نذار

7805 برای اینکه درست کارکنه نیاز با ولتاژ تقریبا دوبرابرش داره یعنی باید که به ورودیش بیشتر از 5 ولت داده بشه تا خروجیشم دقیقا 5 ولت بشه

اگه به ورودیش دقیقا 5 ولت بدی از اونجایی که خود رگولاتور تلفات داره باعث میشه که خروجی دقیقا 5 ولت نشه وکمی کمتر بشه

درکل یا 5 ولت رو مستقیم به مدار بده ویا اینکه 12 ولت رو به 7805 بده وخروجی 5 ولتشو به مدارت بده

البته خود 7805 هم عوض کن ببین خراب نشده باشه ...چونکه الان دیگه چینی شدن و زود میسوزن ودقیق نیستن
آیا راهی هست که با نوسان برق دقت دما تغییر نکنه؟
مهندس رفرنس داخلی بذار !
مشکلت حل میشه !

توجه داشته باش که که رفرنس داخلی 2.56 ولت ثابت هستش !
پس عددی رو که می خوای باید تقسیم بر 4 کنی !! ( الان فکر کنم تقسیم بر دو می کنیش !! )

کد php:
Config Adc Single Prescaler Auto Reference Internal 

در ضمن هر رگولاتور بین 2 تا 3 ولت بیشتر از ولتاژ خودش نیاز داره تا خروجیش ثابت باشه !!
معمولا هم خراب نمیشن !!!
سلام

باید به پایه5 ولت برسونم ( پایه اولی 5 ولت، وسطی adc، آخری gnd)

مگر نمی گین 2.56 ولت. حالا من 2.56 ولت از کجا پیدا کنم؟؟؟!!!
وای مهندس !
خود میکرو این 2.56 ولت رو درست می کنه و شما نمی خواد به پایه های تنظیم رفرنس ولتاژ بدی !!!

تغذیه خود سنسور LM35 رو هم وصل کن تغذیه میکرو و توجه داشته باش این سنسور بالای 3 ولت می تونه راحت کار کنه !!!

کاشکی اون کانفیگی رو که من نوشتم رو تست می کردین و بعد پست می زدین !!!
همیشه که نباید 5 ولت بدیم !!!!!

اینم برنامه یه دماسنج ساده با دقت 0.25 درجه با سنسور LM35 ! ( هر چند دقت خود سنسور در حد یه درجه هستش !! ) !!

کد php:
$regfile "M8DEF.dat" $crystal 1000000

Config Lcdpin 
Pin Db4 Pinb.3 Db5 Pinb.2 Db6 Pinb.1 Db7 Pinb.0 Pinb.4 Rs Pinb.5
Config Lcd 
16 Cursor Off Cls

Config Adc 
Single Prescaler Auto Reference Internal

Deflcdchar 0 
24 24 32 7             '.C

Dim W As Word , S As Single

Do

   Start Adc : W = Getadc(0) : Stop Adc
   S = W / 4
   Home : Lcd "TEMP = " ; S ; " " ; Chr(0) ; "     "
   Waitms 500

Loop 

مدار همون مدار قبلی که خودت بستی !!!

تست کن و نتیجشو اعلام کن !!!
سلام
یه سوال دیگه!!

1- منظورتون اینه که به AVCC و AREF نباید 5 ولت بدم؟
من یه پایه lm35 رو به vcc یکی رو به gnd و یکی رو هم به adc وصل کردم. به پایه های AREF و AVCC هم برق ندادم. کانفیگی رو که گفته بودین هم اجرا کردم ولی دما به کلی اشتباه نشون داده می شه.
اگه AVCC و AREF رو به VCC وصل کنم فرقی می کنه؟؟

2- چرا این قدر قیمت آی سی ها گرون شده؟؟؟؟!!! قبلا من Mega8 رو 1200 تومان می خریدم اما الان 3500 شده. باز چه خبره!!
1- وقتی شما رفرنس داخلی استفاده می کنین دیگه نیازی نیست به پایه های رفرنس خارجی ولتاژی اعمال کنین !
هر چند اگه ولتاژی هم بدین فرقی نمی کنه !!!!!

دما رو چجوری به کلی اشتباه نشون می داد ؟؟
برنامتون رو می ذارین ؟؟

فرقی نمی کنه !!


2- مهندس این تایپیک رو ببین : http://www.iranled.com/forum/showthread.php?tid=17072
خیلی وقته !!
سلام

راستش با یه میکرو امتحان کردم دما رو 55 نشون داد. البته نمی دونم چرا تازگش ها این میکر اینقدر داغ می کنه
با یه میکر دیگه هم امتحان کردم دما رو 0 نشون داد.

کد: (این کدیه که قبلا استفاده می کردم)
کد:
'-config------------------------------------------------------------------------------------
$regfile = "m8def.dat" : $crystal = 8000000
Config Portc.1 = Output : Config Portd = Output : Config Portc.2 = Output : Config Portc.3 = Output
Dim N As Word : Dim A As Word : Dim B As Word : Dim C As Word : Dim D As Word : Dim I As Word : Dim P As Word

Config Portc.4 = Output : Config Portc.0 = Output
Reset Portc.4
Reset Portc.0
Waitms 10

Dim Res As Word
Res = 0
Config Pinb.0 = Input : Config Pinb.1 = Input : Config Pinb.2 = Input
Dim Y As Word
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Debounce = 25
Reset Portc.3

'-begin-------------------------------------------------------------------------------------
For I = 1 To 3
    Reset Portd
    Set Portc.1
    Set Portc.2
    Waitms 300

        Set Portd
    Reset Portc.1
    Reset Portc.2
    Waitms 200
Next I
Readeeprom P , 1

Waitms 1000


'-show--------------------------------------------------------------------------------------
Start Adc
N = Getadc(5) : N = N / 2
Stop Adc
Sss:
Do
Reset Portc.3
Start Adc
N = Getadc(5) : N = N / 2
Stop Adc


      I = 0 : Y = 0 : A = 0 : B = 0 : C = 0 : D = 0
      For I = 1 To N                                        'change
          Incr A : If A > 9 Then : A = 0 : Incr B : End If  'change
          If B > 9 Then : B = 0 : Incr C : End If
          Debounce Pinb.0 , 1 , Setting                     'check
      Next I
      If P > N Then                                         '''''''''''
         Set Portc.4
         Set Portc.0
      End If

      If P <= N Then
        Reset Portc.4
        Reset Portc.0
      End If                                                'change
          Debounce Pinb.0 , 1 , Setting                     'check
      For Y = 1 To 100
            If P <= N Then                                  '''''''''''''
         Set Portc.4
      Else
         Reset Portc.4
      End If

          Debounce Pinb.0 , 1 , Setting                     'check
          Set Portc.1
          Reset Portc.2
          Portd = Lookup(a , Digits)
          Reset Portd.7
          Waitms 1

          Reset Portc.1
          Set Portc.2
          Portd = Lookup(b , Digits)
          Set Portd.7
          Waitms 1
      Next Y
      Set Portc.3
      Waitms 40
Loop



End                                                         'end program

Setting:
    Set Portd
    Reset Portc.1
    Reset Portc.2
    Readeeprom P , 1
Waitms 500


Sett:
Do
Res = Res + 1
Set Portc.3
    I = 0 : Y = 0 : A = 0 : B = 0 : C = 0 : D = 0
      For I = 1 To P                                        'change
          Incr A : If A > 9 Then : A = 0 : Incr B : End If  'change
          If B > 9 Then : B = 0 : Incr C : End If
          Debounce Pinb.1 , 1 , Upp
          Debounce Pinb.2 , 1 , Down
          Debounce Pinb.0 , 1 , Sa                          'check
      Next I                                                'change
          Debounce Pinb.1 , 1 , Upp
         Debounce Pinb.2 , 1 , Down
         Debounce Pinb.0 , 1 , Sa                           'check
      'For Y = 1 To 1000
        '  Debounce Pinb.1 , 1 , Upp
        '  Debounce Pinb.2 , 1 , Down
       '   Debounce Pinb.0 , 1 , Sss                         'check
          Set Portc.1
          Reset Portc.2
          Portd = Lookup(a , Digits)
          Waitms 1

          Reset Portc.1
          Set Portc.2
          Portd = Lookup(b , Digits)
          Waitms 1
     ' Next Y
     If Res > 500 Then
        Res = 0
          Reset Portc.1
          Reset Portc.2
          Reset Portd
          Waitms 150
     End If
Loop
End

Sa:
Writeeeprom P , 1
Waitms 500
jmp SSS
End

Upp:
P = P + 1
Waitms 10
Goto Sett
Return
End
Down:
P = P - 1
Waitms 10
Goto Sett
Return
End                                                         'end program
'******** Data **********************************
Digits:
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 , &B10010010 , &B10000010 , &B11011000 , &B10000000 , &B10010000 , 64 , 128 , 56 , 70 , 00
'     0    1   2    3    4     5     6     7   8     9     -    dp    L    +
'************************************************

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

کد: این کدیه که با کانفیگ شما استفاده کردم:

کد:
'-config------------------------------------------------------------------------------------
$regfile = "m8def.dat" : $crystal = 8000000
Config Portc.1 = Output : Config Portd = Output : Config Portc.2 = Output : Config Portc.3 = Output
Dim N As Word : Dim A As Word : Dim B As Word : Dim C As Word : Dim D As Word : Dim I As Word : Dim P As Word

Config Portc.4 = Output : Config Portc.0 = Output
Reset Portc.4
Reset Portc.0
Waitms 10

Dim Res As Word
Res = 0
Config Pinb.0 = Input : Config Pinb.1 = Input : Config Pinb.2 = Input
Dim Y As Word
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Debounce = 25
Reset Portc.3

'-begin-------------------------------------------------------------------------------------
For I = 1 To 3
    Reset Portd
    Set Portc.1
    Set Portc.2
    Waitms 300

        Set Portd
    Reset Portc.1
    Reset Portc.2
    Waitms 200
Next I
Readeeprom P , 1

Waitms 1000


'-show--------------------------------------------------------------------------------------
Start Adc
N = Getadc(5) : N = N / 4
Stop Adc
Sss:
Do
Reset Portc.3
Start Adc
N = Getadc(5) : N = N / 4
Stop Adc


      I = 0 : Y = 0 : A = 0 : B = 0 : C = 0 : D = 0
      For I = 1 To N                                        'change
          Incr A : If A > 9 Then : A = 0 : Incr B : End If  'change
          If B > 9 Then : B = 0 : Incr C : End If
          Debounce Pinb.0 , 1 , Setting                     'check
      Next I
      If P > N Then                                         '''''''''''
         Set Portc.4
         Set Portc.0
      End If

      If P <= N Then
        Reset Portc.4
        Reset Portc.0
      End If                                                'change
          Debounce Pinb.0 , 1 , Setting                     'check
      For Y = 1 To 100
            If P <= N Then                                  '''''''''''''
         Set Portc.4
      Else
         Reset Portc.4
      End If

          Debounce Pinb.0 , 1 , Setting                     'check
          Set Portc.1
          Reset Portc.2
          Portd = Lookup(a , Digits)
          Reset Portd.7
          Waitms 1

          Reset Portc.1
          Set Portc.2
          Portd = Lookup(b , Digits)
          Set Portd.7
          Waitms 1
      Next Y
      Set Portc.3
      Waitms 40
Loop



End                                                         'end program

Setting:
    Set Portd
    Reset Portc.1
    Reset Portc.2
    Readeeprom P , 1
Waitms 500


Sett:
Do
Res = Res + 1
Set Portc.3
    I = 0 : Y = 0 : A = 0 : B = 0 : C = 0 : D = 0
      For I = 1 To P                                        'change
          Incr A : If A > 9 Then : A = 0 : Incr B : End If  'change
          If B > 9 Then : B = 0 : Incr C : End If
          Debounce Pinb.1 , 1 , Upp
          Debounce Pinb.2 , 1 , Down
          Debounce Pinb.0 , 1 , Sa                          'check
      Next I                                                'change
          Debounce Pinb.1 , 1 , Upp
         Debounce Pinb.2 , 1 , Down
         Debounce Pinb.0 , 1 , Sa                           'check
      'For Y = 1 To 1000
        '  Debounce Pinb.1 , 1 , Upp
        '  Debounce Pinb.2 , 1 , Down
       '   Debounce Pinb.0 , 1 , Sss                         'check
          Set Portc.1
          Reset Portc.2
          Portd = Lookup(a , Digits)
          Waitms 1

          Reset Portc.1
          Set Portc.2
          Portd = Lookup(b , Digits)
          Waitms 1
     ' Next Y
     If Res > 500 Then
        Res = 0
          Reset Portc.1
          Reset Portc.2
          Reset Portd
          Waitms 150
     End If
Loop
End

Sa:
Writeeeprom P , 1
Waitms 500
jmp SSS
End

Upp:
P = P + 1
Waitms 10
Goto Sett
Return
End
Down:
P = P - 1
Waitms 10
Goto Sett
Return
End                                                         'end program
'******** Data **********************************
Digits:
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 , &B10010010 , &B10000010 , &B11011000 , &B10000000 , &B10010000 , 64 , 128 , 56 , 70 , 00
'     0    1   2    3    4     5     6     7   8     9     -    dp    L    +
'************************************************


راستی این قیمت ها تا کجا می خواهد افزایش پیدا کنه. الان هر چه بخریم بهتره چون شاید یهو فردا شد 10000
مهندس ایا الان برنامه خودتون رو درست نشون میده ؟؟؟
یا فقط برنامه منو اشتباه نشون می ده !!

چون به نظر نمیاد کدهاتون مشکلی داشته باشه !!



به نظر من همین الان هم ارزش نداره زیاد باهاش کار بشه و بهتره بریم سراغ میکروهای دیگه !!
بله با همون میکرو ای که داغ می کنه کد اولی رو امتحان کدم و درست نشون داد. اما با کد دومی 55 نشون می ده.
البته 55 به هیچ وجه تغییر نمی کنه ؛ یعنی وقتی دستم میزارم روی lm35 دما بازهم همون 55 درجه هست.
صفحه‌ها: 1 2