ايران ويج

نسخه‌ی کامل: راهنمایی در مورد پروژه دماسنج AVR
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3
سلام دوستان
من میخوام یک دماسنج با سون سگمنت بسازم.
برنامه نویسیش انجام شده و فایل پروتئوسش هم موجود هست.
اما من میخوام برای این دماسنج یه برنامه ای بریزم که وقتی دما از یه حدی پایین تر رفت یه LED و وقتی به یه دمای دیگه رسید یه LED دیگه رو روشن کنه.
شرمنده ! شاید این مساله ساده ای از نظر شما باشه ولی چه کنیم که تازه کاریم !

کد:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Config Portd.4 = Output
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Internal

Dim A As Word , B As Word , C As Single , W As Word , D As Byte , S As Byte

Start Adc
Declare Sub Comm
Declare Sub Temp
Declare Sub Refresh
'=================================================================
Do
Call Refresh
Call Temp
Call Comm
Loop
'==================================================================
Sub Temp
A = Getadc(0)
B = Getadc(1)
C = A - B
C = C / 4
If C > 26 Then Goto Ehsan
If C > 0 Then
S = 12
W = C
Cls : Lcd W
End If
If C < 0 Then
S = 11
C = C / -1
W = C
Cls : Lcd W
End If
End Sub

Ehsan :
Set Portd.5 End Sub
'===================================================================
Sub Comm
Portd = &B0111 : D = 10 : Call Refresh
Portd = &B1011 : D = W Mod 10 : Call Refresh
Portd = &B1101 : D = W / 10 : Call Refresh
Portd = &B1110 : D = S : Call Refresh
Portd = &B1111 : D = 0
End Sub
'=======================================================================
Sub Refresh
Portb = Lookup(d , 7seg)
Waitms 4
End Sub
'=============================================================================
7seg:
Data &H3F , &H6 , &H5B , &H4F , &H66 , &H6D , &H7D , &H7
Data &H7F , &H6F , &H63 , &H40 , &H00


فایل پروتئوس هم ضمیمه شده است.

در ضمن من تا حدودی باهاش ور رفتم ولی متاسفانه توی شروطی که میزارم تداخل بوجود میاد و این شد که اینجا پرسیدم.



ممنون
به موضوع مشکل مبتدیانه برنامه نویسی که sinohe ارسال کرده توجه کن مشکلش همینه یه سورس هم داره.
حاجی من مبتدیم
واضح خواهشا توضیح بدید .
4 خط کد که بیشتر نیست

ممنون
دوست عزیز کافیه اون ارسال صفحه اول فروم AVR :
http://www.iranled.com/forum/thread-22585.html
ببینی همینه مشکلش. به مبتدی ربط نداره.کد هم داره.
(۱۰-دى-۱۳۹۰, ۱۸:۳۵:۴۸)parviz2012 نوشته است: [ -> ]دوست عزیز کافیه اون ارسال صفحه اول فروم AVR :
http://www.iranled.com/forum/thread-22585.html
ببینی همینه مشکلش. به مبتدی ربط نداره.کد هم داره.
مرسی
ولی حاجی من مشکلم اینه که خودم برنامه رو تقریبا درست کردم ولی اون خاموش و روشن شدن ال ای دی تو حلقه گیر کرده و دائم چشمک میزنند.

راه حلی هست برای این ؟

ممنونم میشم پاسخ بدید
oخب چه موقع باید چشمک زدن تموم بشه؟
(۱۰-دى-۱۳۹۰, ۱۸:۵۰:۱۸)parviz2012 نوشته است: [ -> ]oخب چه موقع باید چشمک زدن تموم بشه؟


من که نمیخوام چشمک بزنه
ولی چون میفته تو حلقه شروع میکنه به چشمک زدن :

کد:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Internal

Dim A As Word , B As Word , C As Single , W As Word , D As Byte , S As Byte

Start Adc
Declare Sub Comm
Declare Sub Temp
Declare Sub Refresh
'=================================================================
Do
Call Refresh
Call Temp
Call Comm
Loop
'==================================================================
Sub Temp
A = Getadc(0)
B = Getadc(1)
C = A - B
C = C / 4
If C > 26 Then
Set Portd.5
Waitms 20
End If
If C < 26 Then
Set Portd.6
Waitms 20
End If
If C > 0 Then
S = 12
W = C
Cls : Lcd W
End If
If C < 0 Then
S = 11
C = C / -1
W = C
Cls : Lcd W
End If
End Sub

'===================================================================
Sub Comm
Portd = &B0111 : D = 10 : Call Refresh
Portd = &B1011 : D = W Mod 10 : Call Refresh
Portd = &B1101 : D = W / 10 : Call Refresh
Portd = &B1110 : D = S : Call Refresh

Portd = &B1111 : D = 0
End Sub
'=======================================================================
Sub Refresh
Portb = Lookup(d , 7seg)
Waitms 4
End Sub
'=============================================================================
7seg:
Data &H3F , &H6 , &H5B , &H4F , &H66 , &H6D , &H7D , &H7
Data &H7F , &H6F , &H63 , &H40 , &H00

البته من تو اینجا دستور wait رو برای امتحان کردن وارد کردم . گفتم شاید اینجوری قضیه حل بشه !

خیلی آقایی که سریع جواب میدی Heart
ببین جایی که برنامه میفته تو حلقه دقیقا کجاست؟
همونجا باید از یه if شرطی برای جلوگیری تکرار اضافی جلوگیری کنی.
(۱۰-دى-۱۳۹۰, ۱۹:۰۳:۵۳)parviz2012 نوشته است: [ -> ]ببین جایی که برنامه میفته تو حلقه دقیقا کجاست؟
همونجا باید از یه if شرطی برای جلوگیری تکرار اضافی جلوگیری کنی.

حاجی من کد رو که گذاشته ام
اونجا که شرط میزاریم : If C > 26 Then Set PortD.5 و If C < 26 Then Set PortD.6

فکر کنم اینجاست که دائم این دستور اجرا میشه و باعث میشه که پورت 5 و 6 مرتب ست بشند !

حالا اون if که شما میگید رو باید کجا بزارم ؟
یه فلگ بزار . اگه یکبار ال ای دی روشن شد یک بشه.دوباره توی حالت غیر از اینها 0 بشه.
الان هر چی فکر میکنم کدت همیشه داره یا پورت 6 یا 5 رو 1 میکنه خودت بگو منظورت چیه بالاخره یه محدو ده ای برای اینا تعریف نکردی معلومه هی چشمک میزنه.
(۱۰-دى-۱۳۹۰, ۱۹:۲۲:۵۱)parviz2012 نوشته است: [ -> ]یه فلگ بزار . اگه یکبار ال ای دی روشن شد یک بشه.دوباره توی حالت غیر از اینها 0 بشه.
الان هر چی فکر میکنم کدت همیشه داره یا پورت 6 یا 5 رو 1 میکنه خودت بگو منظورت چیه بالاخره یه محدو ده ای برای اینا تعریف نکردی معلومه هی چشمک میزنه.

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

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

حالا منطق برنامه نویسی من مشکل داره ؟
صفحه‌ها: 1 2 3