ايران ويج

نسخه‌ی کامل: ولتمتر با AVR و بسکام
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
سلام رئیس
1) این برنامه به چه زبانیه الان؟ (ما مبتدی هستیم راهنمایی کنید لطفا)؟
2) دلیل استفاده از مدار پایینی در صفحه قبل چیست و توضیح؟
3) برای تغییر ساعت به تاریخ چکار کنم همچنین تبدیل 5 آمپر اندازه گیری به 20 آمپر با دقت دو رقم اعشار؟؟؟

با تشکر
يه عالمه توضيحات الان تايپ كردم و همش پريد .


برنامه به زبان بسكام هستش كه اونم هم تحت بيسيكه .

به خاطر متفاوت بودن زمين مدار و زمين منبع تغذيه اندازه گيري شونده بايد تغذيه مدار جدا از اون باشه و اون مدار هم اين قضيه رو نشون مي ده .

اينم برنامه فوق براي نمايش تاريخ و اندازه گيري حداكثر 20 آمپر و دقت سه رقم اعشار . ( دو و نيم رقم دقيق تر بگم )


کد:
$regfile = "M8DEF.dat" : $crystal = 2000000

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

Config Portd = &B11111000

Config Adc = Single , Prescaler = Auto , Reference = Internal

Deflcdchar 0 , 24 , 24 , 32 , 7 , 4 , 4 , 4 , 7 '.C

'-------------------------------------------------------------------------------
Dim Sal As Byte , Mah As Byte , Roz As Byte , B As Byte , F As Byte , T As Word
Dim Tt As Byte , S As Single , Days As Word , Eroz As Eram Byte
Dim Esal As Eram Byte At 5 , Emah As Eram Byte At 10 , Ft As Byte , W As Word
Dim A As Single , I As String * 8 , V As String * 8 , Fv As Byte
'-------------------------------------------------------------------------------
Sal = Esal : Mah = Emah : Roz = Eroz : Tt = 150

If Sal > 99 Then Sal = 10
If Mah > 12 Then Mah = 00
If Roz > 31 Then Roz = 1
Gosub Showsal : Gosub Showmah : Gosub Showroz

'-------------------------------------------------------------------------------
Config Timer2 = Timer , Prescale = 32 , Async = On
Enable Interrupts : Enable Timer2
On Timer2 Sectic
Start Timer2
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Star:
F = 0 : Ft = 0
Do
Debounce Pind.0 , 1 , Ant
Loop
'-------------------------------------------------------------------------------
Ant:
For T = 0 To 1200
If Pind.0 = 0 Then Goto Star
Waitms 1
Next
Goto sal
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Sectic:
Incr B
Select Case B
Case 1:
Start Adc : W = Getadc(1) : Stop Adc
If W > 800 Then : Fv = 1 : Set Portd.6 : Reset Portd.7
Else : S = W / 400 : S = S + 0.003 : V = Fusing(s , "#.###")
End If
Gosub Offlcd
Case 2:
Days = Days + 1 : Toggle Portd.3

If Days > 3599 Then :
Incr Roz : Eroz = Roz
End If

If Mah < 7 Then :
If Roz > 31 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Elseif Mah < 13 Then :
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Else :
Mah = 9
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
End If

If Mah > 12 Then :
Mah = 1 : Emah = Mah : Sal = Sal + 1 : Esal = Sal
End If
If Sal > 99 Then :
Sal = 0 : Esal = Sal
End If

Gosub Onlcd
If Fv = 1 Then :
Start Adc : W = Getadc(1) : Stop Adc
If W > 800 Then : Fv = 1 : Reset Portd.6 : Set Portd.7
Else : S = W / 40 : S = S + 0.03 : Fv = 0 : V = Fusing(s , "##.##")
End If
End If
Case 3:
Gosub Offlcd
Start Adc : W = Getadc(0) : Stop Adc : W = W / 2 : A = W / 2
If Fv = 1 Then :
Start Adc : W = Getadc(1) : Stop Adc
S = W / 4 : Fv = 0 : V = Fusing(s , "###.#")
End If
Case 4:
Start Adc : W = Getadc(2) : Stop Adc : S = W / 49.95 : I = Fusing(s , "#.###")
B = 0 : Gosub Onlcd : Toggle Portd.3 : Reset Portd.6 : Reset Portd.7 : Fv = 0
End Select
Locate 2 , 22
Return
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
sal:
F = 2 : Ft = 0
Do
Debounce Pind.0 , 1 , mah
Debounce Pind.1 , 1 , sal1
Debounce Pind.2 , 1 , sal2
Loop
'-------------------------------------------------------------------------------
sal1:
Incr Sal : If Sal > 99 Then Sal = 0
Gosub Showsal
For T = 0 To Tt
If Pind.1 = 0 Then Goto sal
Waitms 4
Next
Ft = 1
Do
Gosub Showsal
For T = 0 To Tt
If Pind.1 = 0 Then Goto sal
Waitms 1
Next
Incr Sal : If Sal > 99 Then Sal = 0
Gosub Showsal
Loop
'-------------------------------------------------------------------------------
sal2:
Decr Sal : If Sal > 99 Then Sal = 99
Gosub Showsal
For T = 0 To Tt
If Pind.2 = 0 Then Goto sal
Waitms 4
Next
Ft = 1
Do
Gosub Showsal
For T = 0 To Tt
If Pind.2 = 0 Then Goto sal
Waitms 1
Next
Decr Sal : If Sal > 99 Then Sal = 99
Gosub Showsal
Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
mah:
F = 3 : Esal = sal : Ft = 0 : Gosub Showsal
Do
Debounce Pind.0 , 1 , roz
Debounce Pind.1 , 1 , mah1
Debounce Pind.2 , 1 , mah2
Loop
'-------------------------------------------------------------------------------
mah1:
Incr mah : If mah > 12 Then mah = 0
Gosub Showmah
For T = 0 To Tt
If Pind.1 = 0 Then Goto mah
Waitms 4
Next
Ft = 1
Do
Gosub Showmah
For T = 0 To Tt
If Pind.1 = 0 Then Goto mah
Waitms 1
Next
Incr mah : If mah > 12 Then mah = 0
Gosub Showmah
Loop
'-------------------------------------------------------------------------------
mah2:
Decr mah : If mah > 12 Then mah = 12
Gosub Showmah
For T = 0 To Tt
If Pind.2 = 0 Then Goto mah
Waitms 4
Next
Ft = 1
Do
Gosub Showmah
For T = 0 To Tt
If Pind.2 = 0 Then Goto mah
Waitms 1
Next
Decr mah : If mah > 12 Then mah = 12
Gosub Showmah
Loop
'-------------------------------------------------------------------------------
roz:
Ft = 0 : F = 4 : Emah = mah : Gosub Showmah : Gosub Showroz
Do
Debounce Pind.0 , 1 , Ended
Debounce Pind.1 , 1 , roz1
Debounce Pind.2 , 1 , roz2
Loop
Ended:
Days = 0 : Goto Star
'-------------------------------------------------------------------------------
Roz1:
Incr Roz
If Mah < 7 Then :
If Roz > 31 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Elseif Mah < 13 Then :
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Else :
Mah = 9
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
End If
Gosub Showroz
For T = 0 To Tt
If Pind.1 = 0 Then Goto roz
Waitms 4
Next
Ft = 1
Do
Gosub Showroz
For T = 0 To Tt
If Pind.1 = 0 Then Goto roz
Waitms 1
Next
Incr Roz
If Mah < 7 Then :
If Roz > 31 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Elseif Mah < 13 Then :
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Else :
Mah = 9
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
End If
Gosub Showroz
Loop
'-------------------------------------------------------------------------------
Roz2:
Decr Roz
If Mah < 7 Then :
If Roz > 31 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Elseif Mah < 13 Then :
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Else :
Mah = 9
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
End If
Gosub Showroz
For T = 0 To Tt
If Pind.2 = 0 Then Goto roz
Waitms 4
Next
Ft = 1
Do
Gosub Showroz
For T = 0 To Tt
If Pind.2 = 0 Then Goto roz
Waitms 1
Next
Decr Roz
If Mah < 7 Then :
If Roz > 31 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Elseif Mah < 13 Then :
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
Else :
Mah = 9
If Roz > 30 Then :
Roz = 1 : Eroz = Roz : Mah = Mah + 1 : Emah = Mah
End If
End If

Gosub Showroz
Loop

'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

Onlcd:
Gosub Showsal : Gosub Showmah : Gosub Showroz : Gosub Showa : Gosub Showi
Return
'-------------------------------------------------------------------------------
Offlcd:
If Ft = 1 Then Return
If F = 0 Then : Return
Else :
If F = 2 Then : Home : Lcd " "
Elseif F = 3 Then : Locate 1 , 4 : Lcd " "
Else :
If F = 4 Then : Locate 1 , 7 : Lcd " "
End If
End If
End If
Return
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Showa:
Locate 1 , 12
If A < 10 Then : Lcd " " ; A ; Chr(0) ; " "
Else : Lcd A ; Chr(0) ; " "
End If
Return
'-------------------------------------------------------------------------------
Showsal:
Home
If sal < 10 Then : Lcd " " ; sal
Else : Lcd sal
End If
Lcd "/"
Return
'-------------------------------------------------------------------------------
Showmah:
Locate 1 , 4
If mah < 10 Then : Lcd "0" ; mah
Else : Lcd mah
End If
Lcd "/"
Return
'-------------------------------------------------------------------------------
Showroz:
Locate 1 , 7
If roz < 10 Then : Lcd "0" ; roz
Else : Lcd roz
End If
Lcd " "
Return
'-------------------------------------------------------------------------------
Showi:
Home L : Lcd V ; "V "
Locate 2 , 10 : Lcd I ; "A "
Return
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

دقت كنيد كه به جاي مقاومت 0.5 اهمي بايد 0.125 اهم هم بذارين .

اينم تست برنامه در پروتئوس به هم اصل برنامه .
مدیر جان واقعا متشکرم..
کاری کردی که حالا حالاها دست از سرت بر ندارم..
شوخی کردم ولی یکم واقعیت هم داره ..
تو این مداری که دادی میشه پتانسیومتر RL رو باز کرد درسته؟ چون هم جریان زیادی روش میفته که تحمل نداره هم الان در حقیقت 0 اهمه که دستگاه 20 آمپر رو نشون میده اگه حرکتش بدیم دستگاه بهم میخوره درسته؟؟؟

خوب اگه برش داریم حالا برای کالیبره کردن میکرو چکار کنیم؟ چون هیچ وقت مقاومت 0.125 اهم دقیق گیر نمیاریم و بالاخره باید کالیبره بشه (من حدود 0.112 اهم رو تونستم تهیه کنم 50 وات)
؟؟؟

یک نظر: شاید بشه این پتانسیومتر رو روی پایه 25 میکرو که ورودی ولتاژ آمپرمتر به میکرو هست گذاشت؟؟
اصلا RL کارش الان چیه؟
نظر شما؟؟
نقل قول: کاری کردی که حالا حالاها دست از سرت بر ندارم
گفتي كلاه چي بخرم ؟


bozonghare نوشته است:تو این مداری که دادی میشه پتانسیومتر RL رو باز کرد درسته .
اصلا RL کارش الان چیه؟
مهندس من مظورم مقاومت بار هستش ، همون مصرف كننده كه مي خواد جريانش تست بشه .( فقط حواستون به زمينش باشه )

شما جريان چي چيزي رو مي خواين اندازه بگيرين . RL همون چيزه هست .


bozonghare نوشته است:هیچ وقت مقاومت 0.125 اهم دقیق گیر نمیاریم
هر مقاومتي دوست داشتين بذارين ، فقط در نظر داشته باشين كه افت ولتاژ مقاومت تو حداكثر جريان مورد نظرتون از 2.5 ولت بيشتر نشه .
براي كاليبراسيون هم تو اين خط برنامه
کد:
Start Adc : W = Getadc(2) : Stop Adc : S = W / 49.95 : I = Fusing(s , "#.###"
با تغيير عدد 49.95 مي تونيد كاليبرسيون رو عوض كنيد .
مثلا در اون پنج آمپريه 200 گذاشته شده بود .

با مقاومت 0.112 اهم مي شه تا جريان حدود 22 آمپر اندازه گرفت و عدد حدود 44.75 را بايد در دستور فوق قرار بدين .


نقل قول: نظر شما؟
نظرم مساعده !
با اینکه برنامه نویسی زیاد بلد نیستم ولی توضیحاتتونو فهمیدم و دارم سخت افزارشو میسازم


اینم از پروگرامر بدون هیچ آیسی و بافری:
http://irapic.com/uploads/1226855562.jpg
http://irapic.com/uploads/1226810331.jpg


این نقششه:http://irapic.com/uploads/1226817582.png
اگه از نظر شما ایرادی داره بگید لطفا (البته مدار بالاییرو میگم) (یو اس بیش هم طرح خودم بود برا تغذیه میکرو)


این هم 5 تا مقاومت 0.56 اهم که باهم موازی میشند 0.112 اهم:

http://irapic.com/uploads/1226980725.jpg

حالا اگر موافقید این مدار رو یکم توسعه بدیم؟؟
آقای مدیر نگفتی حوصله داری مدار رو توسعه بدیم یا نه؟

من منتظرم؟؟؟
اين توسعه چجوري هستش ؟

ببينم اگه وقتم اجازه مي ده ، خوب آره !
خوب حالا میخواهیم 1) وقتی سیستم روشن شد وشروع به کار کرد هر نیم ثانیه سنجش رو انجام بده
2) میخواهیم میکرو دو کمیت اندازه گیری شده را بر هم تقسیم کنه یعنی طبق قانون اهم V/I=R مقاومت بدست میاد
3) حالا دو تاشسی فشاری داریم : ابتدای شروع به کار سیستم ولت و آمپر رو نشون میده با زدن شسی فقط اهم رو با دقت 6 رقم اعشار نشون میده با زدن شسی دیگر دوباره به حالت قبل (ولت وآمپر در میاد)

I

16.861 VOLT
15.542 AMPER

II

1.084942 OHM

در ضمن برای 0 تا 20 ولت وآمپر اگر اندازه گیری تا 3 رقم اعشار باشد بهتر است
نقل قول: وقتی سیستم روشن شد وشروع به کار کرد هر نیم ثانیه سنجش رو انجام بده
خوب اين كاري نداره .
مي شه هر 0.25 هم تنظيمش كرد .
كمتر هم يا يه حد و حدود هاي مي شه . يكم شايد فقط ميكرو رو بگيره !


نقل قول: ابتدای شروع به کار سیستم ولت و آمپر رو نشون میده با زدن شسی فقط اهم رو با دقت 6 رقم اعشار نشون میده با زدن شسی دیگر دوباره به حالت قبل (ولت وآمپر در میاد
مي گم بهتر نيست زمان و گرما رو حذف كنيم و همزمان مقاومت و ولتاژ و آمپر و وات رو نشون بديم .

البته نياز به كليد اضافه نيست اگه بخوايم طبق شما عمل كنيم .
كليد SET و + و - الان در حالت معمول بيكارند . دكمه SET رو هم كه بايد 5 ثانيه فشار بدي تا بري تو تنظيمان پس مي شه دو منظورش كرد . يه فشار كوچولو تبديل از مقاومت به ولتاژو جريان و بالعكس .

مي خواي يه صفحه نمايش 16*4 بگيرم و همزمان ساعت ، تاريخ ، دما ، فركانس ، ولت ، آمپر ، مقاومت ، وات و يا هر چيز ديگه اي رو نشون بديم .


نقل قول: در ضمن برای 0 تا 20 ولت وآمپر اگر اندازه گیری تا 3 رقم اعشار باشد بهتر است
اين دست من نيست . ورودي آنالوگ ميكرو 10 كاناله هستش و بيشتر نمي شه كردش .
با ولتاژ بين 2 تا 20 ولت دقت حدود 25 ميلي ولت هستش .


وقت نكردم و گرنه برنامشو مي ذاشتم .زمان پيدا كردم حتما تغييرات رو اعمال مي كنم .

واسه خودمم هم داره جالب مي شه برنامه . شمارمو تو پيام خاصي دادم تا بيشتر باهم صحبت كنيم .
1) آره اگر هر نیم ثانیه اندازه گیری کنه و نشون بده بهتره
2) خوب خیلی پیشنهاد دادین.... ولی بیاین اول با همین 2*16 درست کنیم بعد... 4*16 و....
3) بله نظر من هم همینه اون برنامه ساعت و تاریخ به جای خودش.. حالا تاریخ رو حذف میکنیم ولی دما باشه چون در اندازه گیریهای حرفه ای دمای محیط رو هم منظور میکنند اینطوری حرفه ای تره
4)من ی تصویر از lcd که پیشنهادمه میزارم شما برنامشو زحمت بکش چطوره:
http://www.savefile.com/files/1895427
برا درجه حرارت دو رقم صحیحش باشه بسته
و مقاومت هم تا 3 رقم صحیح و 6 رقم اعشار جا د اره
یک سوال اگر مدار اندازه گیری آمپر از داخل قطع شود مثلا سر مقاو مت 0.1125 یا زمینش ولتاژ زیاد که از بالا می آید مستقیم میافتد سر پایه ADC 0 آیا این ولتاژ سبب سوختن میکرو نمیشود؟
چون زمین باطری و میکرو باید برای اندازه گیری به هم وصل باشد با توجه به دو مدار اگر وصل نباشد میکرو اندازه گیری نمیکند
؟؟؟؟
اگر میکرو میسوزد برای جلوگیری چکار کنیم؟
http://www.savefile.com/files/1899770
صفحه‌ها: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15