القرية الإلكترونية - الكترونيات - كمبيوتر - هاردوير - خدمات المواقع - كهرباء - فضائيات - جوال - اتصالات - تكييف وتبريد - اجهزة الانتاج الزراعي - كهرباء السيارات

كود تفعيل العضوية - الابلاغ عن روابط لاتعمل - صيانة التلفزيون - الحاسبة - الأعضاء المتميزين - البرامج و المخططات - بث مباشر للقنوات الفضائية - إذاعة - تردد القنوات - بحث


لوحة مفاتيح عربية

العودة   منتدى القرية الإلكترونية > القسم الالكتروني > منتدى الإلكترونيات
التسجيل       اجعل كافة المشاركات مقروءة

منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics

رد
 
أدوات الموضوع
قديم 25-04-2016, 07:25 PM   #1
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي المشاريع المتوسطة : 1- مشروع عداد السرعة "التاكوميتر" Tachometer باستخدام الميكروكونت

المشاريع المتوسطة : 1- مشروع عداد السرعة "التاكوميتر" Tachometer باستخدام الميكروكونترولر PIC
التاكوميتر هو جهاز لقياس السرعة الدورانية لأى عامود أو قرص . وحدة القياس عادة تكون بعدد اللفات فى الدقيقة الواحدة RPM .
سوف يتم إنشاء تاكوميتر بالميكروكونترولر PIC16F877A والعرض على شاشة LCD ، بالإضافة إلى دائرة تحكم عند وصول السرعة الدورانية إلى قيمة محددة سلفا :

استعراض النتائج :









من خلال برنامج هذا المشروع سوف تتعرف على :
1- كيفية التعامل مع وحدة العرض LCD والمترجم ميكروسى ، من حيث تعريف توصيلات أطراف LCD ، ثم تهيئتها للتشغيل ، وعرض الرسائل .
2- التعرف على استخدام المؤقت TMR0 فى وضع العداد لعد نبضات تطبق خارجيا ، وكيفية تهيئة السجلات المرتبطة به ، وحساب عدد النبضات كل دقيقة .
3- معرفة كيف يتم استخراج القيمة العددية لأرقام خانات عدد مكون من أكثر من رقم (الآحاد ، والعشرات ، ....) ، ثم تحويل هذه الأرقام إلى ما يناظرها من كود أسكى حتى يمكن عرضها على وحدة العرض LCD .

البرنامج :



كود:
/*
  Project: Contactless digital tachometer
  Description:
    MCU: PIC16F877A
    4MHz clock
    TIMER0 module is used as a 8-bit counter to count external
    pulses arriving at RA4/T0CKI input

    Eng.F.ABDELAZIZ
*/
// Define LCD module connections.
 sbit LCD_RS at RB2_bit;
 sbit LCD_EN at RB3_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;
 sbit LCD_RS_Direction at TRISB2_bit;
 sbit LCD_EN_Direction at TRISB3_bit;
 sbit LCD_D4_Direction at TRISB4_bit;
 sbit LCD_D5_Direction at TRISB5_bit;
 sbit LCD_D6_Direction at TRISB6_bit;
 sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connection definition
//unsigned long RPM_Value;// 4  bytes ,0 .. 4294967295
unsigned int RPM_Value;// OR unsigned only ,  2  bytes ,0 .. 65535
#define RPM_SWITCH PORTD.B0
#define ON  1
#define OFF 0

char RPM[] = "00000 RPM";

 void Display_RPM(unsigned long num){
  RPM[0] = num/10000 + 48;//get ONE THOU. number and convert it as ASCII for LCD
  RPM[1] = (num/1000)%10 + 48;//get THOU. number and convert it as ASCII for LCD
  RPM[2] = (num/100)%10 + 48;//get HANDS. number and convert it as ASCII for LCD
  RPM[3] = (num/10)%10 + 48;//get TENS number and convert it as ASCII for LCD 
  RPM[4] = num%10 + 48;//get ONES number and convert it as ASCII for LCD 
  Lcd_Out(2,4,RPM);
 }

 void main() {
 TRISA.B4 = 1; //  Inut at RA4/T0CKI
 PORTA.B4=0;
 TRISD.B0=0; //RPM Switch Output
 PORTD.B0=0;
 OPTION_REG=0b00101000; // Bit5:T0CKI=1 for counter mode, <bit3 =1 Prescaler is assigned to the WDT ,<bit2:bit0> =000 for Prescaler(1:1) , 
 Lcd_Init();        // Initialize LCD
 Lcd_Cmd(_LCD_CLEAR);             // CLEAR display
 Lcd_Cmd(_LCD_CURSOR_OFF);        // Cursor off
 Lcd_Out(1,4,"Tachometer");            // Write message1 in 1st row
  while(1){

/* The counter will be active for 1 sec and
the number of pulses arrived during this interval will be recorded,
and multiplied by 60 to get the RPM . */
   TMR0=0;              //start with "0" value
   Delay_ms(1000);      // Wait for 1 sec ,the counter TMR0 will be active for 1 sec,
   RPM_Value = TMR0*60;
   Display_RPM(RPM_Value);
   if(RPM_Value > 600) RPM_SWITCH = ON ; else RPM_SWITCH = OFF;

  }              // Infinite Loop
 }
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً s.sultan ( شكر العضو على هذه المشاركة )
اعلانات
قديم 28-04-2016, 01:51 PM   #2
Rwad_Abujazia
مهندس متواجد
 
الصورة الرمزية Rwad_Abujazia

الدولة: Libya
المشاركات: 62
أحصائية الترشيح

عدد النقاط : 19


النشاط

معدل تقييم المستوى: 0
افتراضي

مشكور اخي F.Abdelaziz على المجهود الرائع في هذا المنتدي

لدي سؤال عن timr0 الا يوجد امر لتفعيل هذا المؤقت
وتصفيره حتى لا يحصل overflow

و شكرا
Rwad_Abujazia غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  
قديم 28-04-2016, 07:26 PM   #3
F.Abdelaziz
استاذ و مشرف قسم الالكترونيات
 
الصورة الرمزية F.Abdelaziz

المشاركات: 6,894
أحصائية الترشيح

عدد النقاط : 6483


النشاط

معدل تقييم المستوى: 332
افتراضي

اقتباس:
المشاركة الأصلية كتبت بواسطة Rwad_Abujazia مشاهدة المشاركة
مشكور اخي F.Abdelaziz على المجهود الرائع في هذا المنتدي

لدي سؤال عن timr0 الا يوجد امر لتفعيل هذا المؤقت
وتصفيره حتى لا يحصل overflow

و شكرا
أخى الكريم
شكرا جزيلا لك
اقتباس:
الا يوجد امر لتفعيل هذا المؤقت
وتصفيره حتى لا يحصل overflow
إذا كنت تقصد حتى لا تحدث مقاطعة نتيجة OVERFLOW ، فلا يحتاج إلى أمر فقط تأكد من عدم تمكين بت المقاطعة بالمؤقت TMR0 .
مع تمنياتى بدوام التوفيق
F.Abdelaziz غير متواجد حالياً   رد مع اقتباس مشاركة محذوفة
رد

العلامات المرجعية

أدوات الموضوع

تعليمات المشاركة
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع إلى

الساعة الآن: 10:54 PM


Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025
Feedback Buttons provided by Advanced Post Thanks / Like (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
القرية الإلكترونية