ايران ويج

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

من یه برنامه دماسنج نوشتم برای سونسگمنت دوتایی آند مشترک ..

مشکلی که دارم اینه که در نشان دادن عدد 21 مشکل داره .. یعنی شماره یکش رو درست نشون نمیده

مشکل دیگه اینه که این برنامه با مگا8 بدون پسوند دما رو درست نشون میده اما درمدلهای مگا8 A و L دما رو کمتر نشون میده!! Amaze

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

به نظرتون این مدلها چرا این مشکل رو دارن و برای رفعش چیکار کنم؟


و مشکل آخر هم اینکه نور عدد سون شماره 2 در شماره 1 هم میوفته یعنی وقتی مثلا دما 28 هستش بصورت 88 دیده میشه البته اون قسمتها کمرنگن اما باز مشکل ایجاد میکنن!!


اینم برنامه :


کد php:
$regfile = "m8def.dat"
$crystal = 1000000
Config Adc 
= Single , Prescaler = Auto
Config Portd 
= Output
Config Portb.0 
= Output : Config Portb.1 = Output
Dim temp 
As Word , a As Byte , b As Byte , C As Word
Stop Adc 
: Start Adc

Do
temp = Getadc(0)
temp = temp / 2
a 
= temp / 10
C 
= a * 10
b 
= temp - C


Portd 
= Lookup(a , iran)
Portb.0 = 0
Waitms 5
Portb.0 
= 1
Portd 
= Lookup(b , iran)
Portb.1 = 0
Waitms 5
Portb.1 
= 1


Loop

iran
:

Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 
سلام
رسول جان زحمت شبیه سازشم بکشی

نقل قول: مشکل دیگه اینه که این برنامه با مگا8 بدون پسوند دما رو درست نشون میده اما درمدلهای مگا8 A و L دما رو کمتر نشون میده!!

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

به نظرتون این مدلها چرا این مشکل رو دارن و برای رفعش چیکار کنم؟

پایه رفرنس رو با یه خازن زمین کن ببین درست میشه

نقل قول: و مشکل آخر هم اینکه نور عدد سون شماره 2 در شماره 1 هم میوفته یعنی وقتی مثلا دما 28 هستش بصورت 88 دیده میشه البته اون قسمتها کمرنگن اما باز مشکل ایجاد میکنن!!

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

اون پایه رفرنس رو هم + پایه aref به مثبت وصلش کردم .

خازن عدسی میگی؟

کریستال هم 8 مگاهرتز داخلی انتخاب کردم از قسمت فیوز بیت ها

مقاومت هم همه پایه ها دارن (220 اهم) بغیر از فعال سازها

مشکل اینه که pcb شو زدم و دیگه نمیشه تغییرات سخت افزاری روش ایجاد کنم و باید نرم افزاری باشه Biggrin

حالا عکس PCB شو + خود مدار مونتاژ شده رو میذارم ببین میشه کاری کرد یا نه ...

یه سوال کوچولوی دیگه هم داشتم .. آیا میشه یه آرمی رو از بیرون وارد محیط شبیه ساز PCB کرد؟ یعنی مثل Insert عکس در محیط word باشه؟!
(۲۵-آذر-۱۳۹۲, ۲۳:۲۰:۲۸)رسول نوشته است: [ -> ]
خازن عدسی میگی؟
آره
خازن 103 یا 104

(۲۵-آذر-۱۳۹۲, ۲۳:۲۰:۲۸)رسول نوشته است: [ -> ]
مقاومت هم همه پایه ها دارن (220 اهم) بغیر از فعال سازها

مشکل اینه که pcb شو زدم و دیگه نمیشه تغییرات سخت افزاری روش ایجاد کنم و باید نرم افزاری باشه Biggrin

حالا عکس PCB شو + خود مدار مونتاژ شده رو میذارم ببین میشه کاری کرد یا نه ...

با نرم افزار که کار خاصی نمیشه کرد
چون مطابقا باید رو سخت افزار هم تغییراتی ایجاد بشه
شما یه کاری کن
اون مقاومت های 220 و بردار بجاش 10کیلو بذار ببین مشکلش حل میشه

(۲۵-آذر-۱۳۹۲, ۲۳:۲۰:۲۸)رسول نوشته است: [ -> ]
یه سوال کوچولوی دیگه هم داشتم .. آیا میشه یه آرمی رو از بیرون وارد محیط شبیه ساز PCB کرد؟ یعنی مثل Insert عکس در محیط word باشه؟!

آره شدنیه
هر لوگو و آرمی که دوست داری اول با نرم افزار های ساخت فونت ،طراحی و داخل فونت های سیستم کپی کن
بعد تو محیط طراحی pcb(آلتیوم یا پروتل99 یا...) add text(گزینه مربوط به درج متن دلخواه) رو بزن و فونت پیشفرض رو روی فونتی که طراحی کردی بذار و لوگو رو فراخوانی کن
حالا مشکلات سخت افزاری به کنار ..

تعجبم از این عدد 21 هستش که شماره 1 به شکل عجیبی نشون داده میشه!!

البته دمای 1 درجه و یا مثلا 31 و 41 و 51 درجه و ... رو بخوبی نشون میده .. فقط با 21 درجه مشکل داره؟

این که دیگه حتما باید مشکل نرم افزاری باشه !!

به نظرتون در جدول لوک آپ مشکلی وجود داره؟

اینم عکس دمای 21 درجه :
سلام
من کیج شدمConfused
سون سگمنت های شما آند مشترک هستن یا کاتد مشترک؟
این جدوله لوک آپه
01000000
01111001
00100100
00110000
00011001
00010010
00000010
01111000
00000000
00010000
که برای سگمنت آند مشترک نوشته شده
و این طریقه ی رفرش کردن برنامه
Portb.0 = 0
Waitms 5
Portb.0 = 1
که برای سگمنت کاتد مشترک نوشته شده
اینطوری میکرو برای نمایش قاطی می کنه
یعنی وقتی که میگین یکان رو نمایش بده دهگان نمایش میده و موقع نمایش دهگان یکان نمایش میده
این برنامه رو امتحان کنین
کد php:
$regfile = "m8def.dat"
$crystal = 1000000
Config Adc 
= Single , Prescaler = Auto
Config Portd 
= Output
Config Portb.0 
= Output : Config Portb.1 = Output
Dim temp 
As Word , a As Byte , b As Byte , C As Word
[b]Stop Adc :[/b] Start Adc

Do
temp = Getadc(0)
temp = temp / 2
a 
= temp / 10
C 
= a * 10
b 
= temp - C


Portd 
= Lookup(a , iran)
Portb.0 = 1
Waitms 5
Portb.0 
= 0
Portd 
= Lookup(b , iran)
Portb.1 = 1
Waitms 5
Portb.1 
= 0


Loop

iran
:

Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 
راستی دستور stop adc برای چی گذاشتین؟(البته مشکلی تو برنامه ایجاد نمی کنه)
ممنون هادی جون

آند مشترکه

الان با برنامه شما هم مشکل نور اضافی حل شد و هم اون شماره 21 و هم مشکل نوع پسوندهای میکرو Happy

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

با تغییر به اینصورت کلا همه مشکلات حل شدن Happy یعنی فقط جای a و b رو در برنامه شما تغییر دادم:

[attachment=10718]


آخرش مشکلمون نرم افزاری بودا هیچ نیازی به تغییر در سخت افزار نداشت Biggrin

فقط اگه ممکنه این جدول لوک آپ رو بصورت شیوا وشیرین Biggrin برام توضیح بده .. البته نه فقط برای این برنامه بلکه کلا میخوام درباره این جدول بدونم
آقا رسول هرچی فکر کردم هیچی بهتر از کتاب آقای یک نفر ندیدم ایشون واقعا خوب توضیح دادن
http://www.iranled.com/forum/thread-10869.html
صفحه ی 272
دو سه بار هم نوشتم ولی دیدم خوب نشد پاکش کردم شرمندهShy
ممنون

حالا یه سوال دیگه ..

الان وقتی مثلا میخواد دماش تغییر کنه در موقع رفتن به عدد دیگه نوسان میکنه (پرت پرت ) میکنه ..

برای رفع این مشکل چیکار کنم؟

بعبارت دیگه میخوام دما که مثلا از 23 میره به 24 مستقیم بره و نوسان نوری نداشته باشه!!

میانگین گرفتن از دما حلش می کنه؟

اگه آره چطوری ..
قبلا با این مشکل برخورد داشتم
سرعت بالای میکرو تو خواندن و نمایش عدد رو سگمنت این مشکل به وجود میاره
برای رفع این مشکل باید هر چند ثانیه یک باردما رو خواند مثلا هر 5 ثانیه یک بار دما به روز رسانی میشه این برنامه رو ببینید
کد php:
$regfile = "m8def.dat"
$crystal = 1000000
Config Adc 
= Single , Prescaler = Auto
Config Portd 
= Output
Config Portb.0 
= Output : Config Portb.1 = Output
Dim Temp 
As Word , A As Byte , B As Byte , C As Word , D As Word
Stop Adc 
: Start Adc

Declare Sub Dama

Do
Incr D
Portd 
= Lookup(a , iran)
Portb.0 = 1
Waitms 5
Portb.0 
= 0
Portd 
= Lookup(b , iran)
Portb.1 = 1
Waitms 5
Portb.1 
= 0
If D = 500 Then Gosub Dama

Loop

iran
:

Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16

Sub Dama
Temp 
= Getadc(0)
temp = temp / 2
a 
= temp / 10
C 
= a * 10
B 
= Temp - C
D 
= 0
End Sub 
متغیر d در هر بار اجاری برنامه یکی زیاد میشه
یه زیر برنامه به اسم dama تعریف کردم که هر وقت متغیر d مقدارش به 500 برسه(با آزمون خطا پیداش کردم البته ممکنه در واقعیت درست جواب نده خودتون مقدارشه تنظیم کنید) به اون زیر برنامه پرش می کنه و مقدار دما رو به روز می کنه
فقط یه مشکلی هست اولین باری که دستگاه روشن میشه تا 5 ثانیه ی اول دما رو صفر نشون میده برای حل این مشکل
Temp = Getadc(0)
temp = temp / 2
a = temp / 10
C = a * 10
B = Temp - C
رو به قبل از do برنامه اضافه کنین

این میشه برنامه ی نهایی
کد php:
$regfile = "m8def.dat"
$crystal = 1000000
Config Adc 
= Single , Prescaler = Auto
Config Portd 
= Output
Config Portb.0 
= Output : Config Portb.1 = Output
Dim Temp 
As Word , A As Byte , B As Byte , C As Word , D As Word
Stop Adc 
: Start Adc

Declare Sub Dama

Temp 
= Getadc(0)
temp = temp / 2
a 
= temp / 10
C 
= a * 10
B 
= Temp - C


Do
Incr D
Portd 
= Lookup(a , iran)
Portb.0 = 1
Waitms 5
Portb.0 
= 0
Portd 
= Lookup(b , iran)
Portb.1 = 1
Waitms 5
Portb.1 
= 0
If D = 500 Then Gosub Dama

Loop

iran
:

Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16

Sub Dama
Temp 
= Getadc(0)
temp = temp / 2
a 
= temp / 10
C 
= a * 10
B 
= Temp - C
D 
= 0
End Sub 
موفق باشید
هادی جون خیلی ممنون ..

راستش در مورد لوک آپ چند تا منبع رو مطالعه کردم اما این قسمت از برنامه رو نفهمیدم چطوری بدست میاد :

کد php:
Data 64 , 121 , 36 , 48 , 25 , 18 , 2 , 120 , 0 , 16 

به نظرم باینری رو به اعشاری یا همون دهدهی تبدیل کرده ..

اما روال کارشو نفهمیدم

این اعداد چطوری بدست میاد؟

یا مثلا فرمولش برای آند و کاتد مشترک چطوریه؟