السلام عليكم ورحمة الله وبركاته
----------------------------------
اخى الاستاذ /حس هادى
فكرة رائعة جدا ان تستخدم بيك 16F84A بدلا من ىسنسور المسافة
مبدع فعلا ورائــــــــــــــــــــــــع
توكل على الله واشكر حسن تعاونك الدائم
|
سلام عليكم
أخي كريم كتب كود لكن اريد أضيف اليه بعض الاكواد لغرض حصول على دقة بالقياس ومشكله ان نبضة زمنها قليل حتى لو أستخدمت تايمر0 فانه ستحصل على عدم لذا سحاول ترتيب كود لان تنفيذ البرنامج سريع وهذا يزيد من زمن تايمر0 عموما احمل هذا ملف
http://arabsh.com/files/0c36464262f1...older-rar.html
عمل المحاكاه
----------------
أضغط على سويج سوف يرسل مايكرو نبضه الى سنسر(( هنا يمثل سنسر 16F84a)) عندما يستلم أشاره سوف يعطي نبضه الى مايكرو 16f877a
هذا هو كود البك 16f84a
كود:
sbit Trigger at RA1_bit;
sbit Trigger_dir at TRISA1_bit;
sbit Echo at RA0_bit;
sbit Echo_dir at TRISA0_bit;
char y=0 ;
unsigned int cont=0 , x=10;
char txt[7];
char txt1[4];
void Interrupt()
{
if (TMR0IF_bit)
{
TMR0IF_bit = 0;
TMR0 = 205;
cont++;
}
}
void main()
{
OPTION_REG = 0x88 ;
TMR0 = 205;
INTCON = 0xA0;
Trigger_dir=1;
Echo_dir=0;
Echo=0;
while(1)
{
while(trigger==1)
{
tmr0=205;
cont=0;
y=1;
}
while(y==1)
{
Echo=1;
if(cont==x)
{
Echo=0;
x=x+10;
y=0;
}
}
}
}
في كل مره تضغط على سويج سوف تزداد زمن نبضه يمكنك رؤيتها على أوسلوسكوب قيس زمن هذه النبضه مفروض البرنامح في 16f877a يقيس هذا الزمن وبقسمه على 58 سوف تحصل على مسافه
اي انك تقيس زمن نبضه مرسله من 16f84a وتقسمها على 58 وتقارن النتيجه التي ظهرت على الشاشه انا جربت ذلك وكانت نتائج جيده ولكنني اريد حاول في زياده دقة القياس
الكود موجود في ملف هو كود أولي وان شالله أحاول زياده دقه
ولكن عندي سؤال انا اريد استخدم float اي متغير يقبل الارقام العشريه ولكن مشكله كيف أحدد عدد رقام بعد فارزه عشريه لان مع استخدام float تظهر ارقام كثيرة بعد فارزه عشرية اريد أحددها بمرتبتين فقط يعني مثل 25.66 حاليا تظهر 25.659999 هل لديك فكره في تحديد عدد مراتب وشكرا