ايران ويج

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

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

مشکلی که دارم اینه که در نشان دادن عدد 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 As Byte As Byte As Word
Stop Adc 
Start Adc

Do
temp Getadc(0)
temp temp 2
temp 10
10
temp C


Portd 
Lookup(iran)
Portb.0 0
Waitms 5
Portb.0 
1
Portd 
Lookup(iran)
Portb.1 0
Waitms 5
Portb.1 
1


Loop

iran
:

Data 64 121 36 48 25 18 120 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 As Byte As Byte As Word
[b]Stop Adc :[/bStart Adc

Do
temp Getadc(0)
temp temp 2
temp 10
10
temp C


Portd 
Lookup(iran)
Portb.0 1
Waitms 5
Portb.0 
0
Portd 
Lookup(iran)
Portb.1 1
Waitms 5
Portb.1 
0


Loop

iran
:

Data 64 121 36 48 25 18 120 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 As Byte As Byte As Word As Word
Stop Adc 
Start Adc

Declare Sub Dama

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

Loop

iran
:

Data 64 121 36 48 25 18 120 16

Sub Dama
Temp 
Getadc(0)
temp temp 2
temp 10
10
Temp C
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 As Byte As Byte As Word As Word
Stop Adc 
Start Adc

Declare Sub Dama

Temp 
Getadc(0)
temp temp 2
temp 10
10
Temp C


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

Loop

iran
:

Data 64 121 36 48 25 18 120 16

Sub Dama
Temp 
Getadc(0)
temp temp 2
temp 10
10
Temp C
0
End Sub 
موفق باشید
هادی جون خیلی ممنون ..

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

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

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

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

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

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