ايران ويج

نسخه‌ی کامل: راهنمایی برای برنامه دماسنج با lm35
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام خدمت دوستان
من بالاخره تونستم مدار یه دماسنج رو ببندم
من با استفاده از 7segment چهارتایی کاتد مشترک و atmega16 و lm35 این مدار رو درست کردم
اما یه مشکل داره
مشکل اینه که سون سگمنت هر ثانیه رفرش میشه و عدد دوم دما ( مثلا اگه دما 25 درجه باشه شماره ی 5 ) خیلی پرش داره و تند تند بین مثلا 6 و 7 و 8 میگرده و عوض میشه
میخواستم به کدم یه قسمتی اضافه کنم که هر 10 ثانیه عددا به روز بشه که اینقدر چشمک نزنه و چشمو اذیت نکنه
اینم کدم
البته کد رو خودم ننوشتم از یه وبلاگ که اسمش اول کد هست دانلود کردم و یخورده تغییرش دادم
سوال دومم اینه که من برای اتصال 7segment به میکروکنترلر باید از مقاومت استفاده کنم ؟
ممنون میشم دوستان راهنمایی کنند
با تشکر
کد:
'www.micro-avr.blogfa.com'
$regfile = "m16def.dat"
$crystal = 1000000
Config Portd = Output
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc

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

Dim T As Word




Start Adc
Declare Sub Comm
Declare Sub Temp
Declare Sub Refresh
'=================================================================
Do

Call Refresh

Call Temp

Call Comm



Loop
'==================================================================
Sub Temp

B = Getadc(0)
T = B / 2
W = T


End Sub
'===================================================================
Sub Comm

Portd = &B0111 : D = 13 : Call Refresh

Portd = &B1011 : D = 10 : Call Refresh

Portd = &B1101 : D = W Mod 10 : Call Refresh

Portd = &B1110 : D = W / 10 : 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 , &H39
سلام
من فکر میکنم جواب سوال اول شما در پاسخ با سوال دوم حل بشه !
جواب سوال دوم :
حتما باید از مقاومت استفاده کنی ( برای هر سگمنت) مقاومت 100 یا نهایت 330
پایه های مشترک هر 4 تا 7سگمنت را باید با مقامت 100 تا 330 به میکرو وصل کنی!
که البته میتونی از ترانزیستور هم استفاده کنی
سلام.

اگر بخواين هر 10 ثانيه مقادير جديد اعمال بشن ، بايد با تايمر اين زمان رو بسازي و وقتي به 10 ثانيه رسيد ، مقادر جديد رو لحاظ مي كني.
لازمه با تايمرها و وقفه هاي تايمر آشنايي داشته باشيد.

در مورد سوال دوم ، اگر مقاومت نذاري ، با روشن شدن هر سگمنت از 7seg ، تاثير روي نور كل سگمنت ها مي ذارهه ...
براي اينكه اينطور نشه ، از مقاومت يكسان براي هر پايه استفاده كني ،‌چون جريان رو محدود مي كنه ، اين مشكل شدت نور هاي مختلف حل مي شه ...
سلام مجدد خدمت دوستان گرامی
من مقاومت گذاشتم و نورش نرمال شده
و پرش هم کمتر شده
اما یه مشکل اساسی هست
led های سگمنت اونایی که خاموشه به طور کامل خاموش نمیشه و یه نور ضعیفی داره
حتی سگمنت سوم و چهارم که چراغاش ثابته و هیچ تغییری نمیکنه چراغهای خاموشش کاملا خاموش نیست و یه نور ضعیفی داره
تو عکسی که گرفتم کاملا مشخصه
آدرس عکس : http://www.up.vatandownload.com/images/r...2yae32.jpg
فکر کنم ایراد از برنامه باشه
ممنون میشم دوستان راهنمایی کنند
با تشکر
اینم کدم
کد:
$regfile = "m16def.dat"
$crystal = 1000000
Config Portc = Output
Config Portb = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc

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

Dim T As Word

Dim Sum As Word , N As Byte

Dim Yekan As Integer , Dahgan As Integer



Start Adc
Declare Sub Comm
Declare Sub Temp
Declare Sub Refresh
'=================================================================
Do

Call Refresh

Call Temp

Call Comm



Loop
'==================================================================
Sub Temp


A = Getadc(0)

C = A / 2

Yekan = C / 10

Dahgan = C Mod 10


End Sub
'===================================================================
Sub Comm

Portc = &B0111 : D = 13 : Call Refresh

Portc = &B1011 : D = 10 : Call Refresh

Portc = &B1101 : D = Dahgan : Call Refresh

Portc = &B1110 : D = Yekan : Call Refresh

Portc = &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 , &H39
دوستان کسی نیست راهنمایی کنه ما رو ؟
برنامه رو چك نكردم ، اما اگر از سخت افزار مطمئني ، پس حتما اشكال در مقدار دهي و رفرش داري. احتمالا مقاديري وجود دارن كه در رفرش كمتر از مقدار هاي مورد نظر روشن هستن ، چك كن.
خاموشي كامل فقط در همين قسمت دومي هست ، يا جاهاي ديگه هم اتفاق مي افته ؟
با يه برنامه ي ديگه ، سعي كن يه عدد ثابت رو نشون بدي ، ببين بازم مشكل داره و ...
در تست هاي مختلف اشكال كار در مي ياد .

موفق باشي.
سلام
کد Call Refresh رو از داخل loop حذف کن
کد Portc = &B1111 : D = 0 همینطور
عدد ثابت هم میدم بازم مشکل داره
مدار هم چند بار باز کردم و دوباره بستمش اما بازم مشکل داره
کد رو ویرایش کردم مواردی گفته شده رو حذف کردم بازم نشد

یکی از دوستان همین مشکل من رو داشت با کدی که پیوست کردم مشکلش حل شد اما من این کد رو میزارم کار نمیکنه برای من
یادآوری کنم که من از سون سگمنت کاتد مشترک استفاده میکنم
البته من یخورده کد رو تغییر دادم ولی بازم کار نمیکنه
من کد و مدارم رو پیوست کردم لطفا دوستان بررسی کنند مشکل منو حل کنند
با تشکر

اینم آدرس تاپیک و کدی که مشکل اون دوستمون رو حل کرد
http://www.eca.ir/forum2/index.php?topic=52007.0

تمام پایه های دیتای میکرو رو تک تک با یه مقاومت 10کیلو زمین کن !
مقاومت های بین میکرو و 7seg رو دست نزن


تمام پایه های دیتای میکرو رو تک تک با یه مقاومت 10کیلو زمین کن !
مقاومت های بین میکرو و 7seg رو دست نزن

سلام
شما باید تو هر مرحله که یه سون سکمنت رو روشن می کنی،حتما قبلش بقیه رو خاموش کنی،کلا در عرض 4 میلی ثانیه!!!