ايران ويج

نسخه‌ی کامل: مشکل با ADC مگا 8
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام یکی از دوستام یه برنامه به من داده که خطایابی کنم
برنامه ولتاژ و دما رو lcd نشون می ده
محدوده ولتاژ 0 تا 50 که با استفاده از تقسیم مقاومتی 1/10 ولتاژ خروجی اندازه گیری میشه و در نهایت X*10 که میشه ولتاژ اصلیمون میشه
حالا اشکال چیه !!
با مگا32 پرش زیادی داریم تو اندازه گیری دما

اما وقتی از مگا 8 استفاده می کنیم اگه یکی از ورودی های ADC صفرباشه مدار درست کار می کنه اما اگه ولتاژ مثلا بشه 15 ولت دما هم 23 دما شروع می کنه به نوسان گاهی هم با کم زیاد کردن ولتاژ دما هم شروع می کنه به تغییر

یه مورد دیگه هم که هست کارکتری که واسه علامت درجه ساخته شده رو مگا 32 درست نشون می ده اما رو مگاه 8 چینی می نویسه !!!!
تکنیک های نویز گیری ADC انجام دادم فرقی نکرد
این برنامه منتظر راهنماییم!!
کد php:
$regfile "m8def.dat"
$crystal 1000000
Config Lcdpin 
Pin Db7 Pinb.2 Db6 Pinb.3 Db5 Pinb.4 Db4 Pinb.5 Pinb.1 Rs Pinb.0
Config Lcd 
16 Cursor Off Cls
Config Portd 
Output
Config Adc 
Single Prescaler Auto
Start Adc
Deflcdchar 0 
28 20 28 32 7            'c
Deflcdchar 1 , 24 , 28 , 30 , 31 , 3 , 7 , 15 , 31          ' 
fan left
Deflcdchar 2 
31 30 28 24 31 15 3          ' fan right
Dim A As Word , C As Word
Dim B As Single , D As Single
Dim V As String * 10 , T As String * 10
Do
If Pinc.5 = 1 Then : Goto Over
Else
Gosub VLOt
Gosub Temp
Gosub Fan
Gosub Sw
End If
Loop




Vlot:
Locate 1 , 1 : Lcd V ; " V  "
A = Getadc(2)
B = A * 4.91
B = B / 1024
V = Fusing(b , "#.##")

Return

Over:
Cls
Locate 1 , 1 : Lcd "!!OVER  CURNET!!"
Set Portd.0
Waitms 200
Reset Portd.0
Waitms 200
Return

Temp:
Locate 1 , 12 : Lcd T : Lcd Chr(0) ; " "
C = Getadc(0)
D = C * 491
D = D / 1024
T = Fusing(d , "#.#")
Return

Sw:
If A > 700 Then : Set Portd.1 : End If
If A < 650 Then : Reset Portd.1 : End If
Return

Fan:
If C > 750 Then : Set Portd.2 : Locate 2 , 15 : Lcd ; Chr(1) ; Chr(2) : End If
If C < 650 Then : Reset Portd.2 : Locate 2 , 15 : Lcd "  " : End If
Return 
مهندس نقشه رو هم بذار !

الان Pinc.5 به چی وصل شده !

منظورت از پرش چیه ؟؟؟
(۲۳-بهمن-۱۳۸۸, ۱۲:۳۷:۰۸)t3r!p3000 نوشته است: [ -> ]مهندس نقشه رو هم بذار !

الان Pinc.5 به چی وصل شده !

منظورت از پرش چیه ؟؟؟

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

منظور از پرش یعنی بین مثلا 27 28 29 درجه هی بالا پاین میشه اعداد بزرگ و نمیشه اغماض کرد البته این وقتی اتفاق می افته که ورودی ولتاژ تغییر کنه اگه صفر باشه مشکلی نیست
الان وقتی ولتاژ رو 0 دما دقیق و درست 22.5 نشون می ده حالا وقتی پایه مربوط به ADC ولتاژ وصل می کنم به VCC دما میشه 31.2

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
مهندس من از برنامت چیز زیادی سر در نیاوردم ولی اینو امتحان کن :

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

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

Ddrd 
255
Config Adc 
Single Prescaler Auto Start Adc

Config Timer1 
Timer Prescale 1024
On Timer1 Ant 
Enable Interrupts Enable Timer1

Deflcdchar 0 
28 20 28 32 7            'c
Deflcdchar 1 , 24 , 28 , 30 , 31 , 3 , 7 , 15 , 31          ' 
fan left
Deflcdchar 2 
31 30 28 24 31 15 3          'Fan Right

Dim A As Word , C As Word , B As Single , D As Single
Dim V As String * 10 , T As String * 10 , Z As Word , W As Byte

Star:
Do
   Gosub Vlot
   For Z = 0 To 200
      Debounce Pinc.5 , 1 , Over , Gosub
      Gosub Ali
   Next
   Gosub Sw
   For Z = 0 To 200
      Debounce Pinc.5 , 1 , Over , Gosub
      Gosub Ali
   Next
   Gosub Fan
   For Z = 0 To 200
      Debounce Pinc.5 , 1 , Over , Gosub
      Gosub Ali
   Next
   Gosub Temp
   For Z = 0 To 200
      Debounce Pinc.5 , 1 , Over , Gosub
      Gosub Ali
   Next
Loop

Vlot:
   Home : Lcd V ; " V  "
   A = Getadc(2) : B = A * 4.91 : B = B / 1024 : V = Fusing(b , "#.##")
Return

Over:
   Home : Lcd "!!OVER  CURNET!!"
   Set Portd.0 : Start Timer1
Return

Temp:
   C = Getadc(0) : D = C * 491 : D = D / 1024 : T = Fusing(d , "#.#")
   Locate 1 , 12 : Lcd T : Lcd Chr(0) ; " "
Return

Sw:
   If A > 700 Then Set Portd.1
   If A < 650 Then Reset Portd.1
Return

Fan:
   If C > 750 Then : Set Portd.2 : Locate 2 , 15 : Lcd ; Chr(1) ; Chr(2) : End If
   If C < 650 Then : Reset Portd.2 : Locate 2 , 15 : Lcd "  " : End If
Return

Ali:
      If Pinc.5 = 0 Then : Stop Timer1 : Timer1 = 0 : Reset Portd.0
      End If
Return

Ant:
   If Pinc.5 = 1 Then Toggle Portd.0
Return 
تشکر همشهری اما کما کان 2 adc تابع هم تغییر می کنند نمی دونم چشه شاید از مگا 8
درست شد !!! با یه مقاومت 1 کیلو پایه خروجی lm35 زمین کردم درست شد نمی دونم چرا اینجوری شده بود

حالا واسه مشکل دوم راه حلی ندارید؟

رو ال سی دی اوون کارکتر مورد نظر نشون نمی ده
مشکل دوم هم حل شد
ما که آخرش نفهمیدم مشکل چی بود و چجوری درست شد !!!

دوباره کارکتر رو تعریف کن و اگه منظورت کارکتر Fan Right هستش فقط خود تعریفش رو بنویش و انتهای خط رو پاک کن !!

نقل قول: Deflcdchar 2 , 31 , 30 , 28 , 24 , 31 , 15 , 7 , 3
نه از این نبود
نمی دونم چرا مگا 8 با ال سی دی مشکل داشت و فقط کارکتر 1 تا 7 می تونه نمایش بده الان شماره کارکتر از 0 گزاشتم 3 درست شد