قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-03-2012, 09:54 PM المشاركة 1   
افتراضي تبيسط تقنيات مقياس ومتحكم بدرجة الحررة بثلاثة مداخل تناظرية وأربعة مخارج رقمية 16F876 Twitter FaceBook Google+



تبيسط تقنيات مقياس ومتحكم بدرجة الحررة بثلاثة مداخل تناظرية وأربعة مخارج رقمية قابل للتطوير و PIC16F876A :

الدائرة الكهربية :




خطوات البرنامج :

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-03-2012, 10:02 PM المشاركة 2   
افتراضي


خطوات البرنامج :
1- التعريف بأطراف التوصيل بين وحدة العرض LCD ةالميكروكونترولر :



كود:
// LCD module connections sbit LCD_RS at RC0_bit; sbit LCD_EN at RC1_bit; sbit LCD_D4 at RC4_bit; sbit LCD_D5 at RC5_bit; sbit LCD_D6 at RC6_bit; sbit LCD_D7 at RC7_bit; sbit LCD_RS_Direction at TRISC0_bit; sbit LCD_EN_Direction at TRISC1_bit; sbit LCD_D4_Direction at TRISC4_bit; sbit LCD_D5_Direction at TRISC5_bit; sbit LCD_D6_Direction at TRISC6_bit; sbit LCD_D7_Direction at TRISC7_bit; // End LCD module connections


اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-03-2012, 10:06 PM المشاركة 3   
افتراضي


2- تعريف أطراف المخارج بمسميات تسهل فهم وتتبع البرنامج باستخدام الموجه #define :




كود:
//===============define IO port====== #define fanA RB0_bit #define fanB RB1_bit #define ledA RB2_bit #define ledB RB3_bit #define buzzer RB4_bit //================================



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-03-2012, 10:10 PM المشاركة 4   
افتراضي


3- إعلان المتغيرات :


كود:
//=======Variables Declaration============================== unsigned long adc_resultA; // Hold ADC result A unsigned long adc_resultB; //Hold ADC result B unsigned TEMPA_deg; // Hold conversion result as a number unsigned TEMPB_deg; // Hold conversion result as a number char TEMPA_string[4]; //Hold as string char TEMPB_string[4]; //Hold as string //==========================================================



تتضمن المتغيرات :
  • متغيران باسم adc_resultA و adc_resultB ( لحفظ ومعالجة نتيجة التحويل من تناظرى لرقمى لكل قناة على حدة ) من نوع unsigned long (0 .. 4294967295 = 4 bits) حتى يتسع لنتيجة معالجة نتيجة التحويل (0-1023) بعملية الضرب .
  • متغيرلن باسم TEMPA_deg وTEMPB_deg (لحفظ نتيجة التحويل بعد معالجتها وتحويلها إلى ما يعادلها من الدرجات المئوية وفقا لجهد المرجع Vref المستخدم ) من النوع unsigned
(0 .. 65535= 2 bits) حيث تقل السعة المطلوبة بعد عمليات المعالجة .
  • متغيران باسم TEMPA_string[4] و TEMPB_string[4] ( لحفظ نتيجة تحويل درجات الحرارة السابقة إلى ما يناظرها من سلاسل نصية حتى يمكن عرضها على وحدة العرض LCD ) من نوع مصفوفة سلسلة نصية بها 4 عناصر وهو ما يحدده استخدام دالة التحويل المستخدمة هنا وهى ByteToStr (التحويل من عدد بسعة بايت لسلسلة نصية ) لذلك سوف نشاهد مكان خالى على يسار درجة الحرارة المعروضة لأنها مكونة من 3 أماكن فقط .



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-03-2012, 10:14 PM المشاركة 5   
افتراضي


4- الدالة الرئيسية : وتحتوى على :
أ‌- إعدادات وتهيئة المنافذ :
  • إعداد سجل التحكم فى اختيار أطراف المداخل الثماثلية ADCON1: تقوم الدالة ADC_Read(0) بكل ما هو مطلوب فى عملية التحويل من تناظرى لرقمى نيابة عنا , فقط يجب تحديد الطرف المطلوب قراءته والذى يجب أن يحدد على أنه "دخل تناظرى" والسجل المسؤل عن ذلك هو ADCON1 وعلى الأخص الأربع خانات الأولى منه والمسماه PCFG0 : PCFG3 واختيارها بالقيمة "0101" يعنى اختيار المدخل RA0/AN0 والمدخل RA1/AN1 كمداخل تناظرية علاوة على اختيار المدخل RA3/AN3 كمدخل لجهد المرجع الموجب Vref+ .


  • إعداد باقى المنافذ بالطريقة المعتادة :

كود:
//========================================================== void main(void) { ADCON1=0b00000101;//Select : AN0 & AN1 & AN3 as Vref = 1Volt TRISA=0xFF; //configure PORTA as Input direction TRISB=0; //configure PORTB as Output dire//Select : AN0 & AN1 & AN3 as Vref = 1Volt TRISC=0; //configure PORTC as Output direction PORTA=0; //Clear PORTB=0; PORTC=0; //===============================================



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-03-2012, 10:18 PM المشاركة 6   
افتراضي


ب- إعداد وحدة العرض LCD للبدء وكتابة الرسائل النصية الثابتة على الشاشة :
كود:
//===============================================
  Lcd_Init();                          // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                // CLEAR display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
  
  Lcd_Out(1,1,"TEMP.A=");              // Write "TEMP.A=" in 1st row
  Lcd_Out(2,1,"TEMP.B=");              // Write "TEMP.B=" in 2nd row
//====================================================================






SmartElectronic
:: مهندس ::
تاريخ التسجيل: Jan 2011
الدولة: Tenth of Ramadan
المشاركات: 30
نشاط [ SmartElectronic ]
قوة السمعة:0
قديم 10-03-2012, 10:20 PM المشاركة 7   
افتراضي


كثر الحديث والشرح عن قياس درجة الحرارة باستخدام lm35 و DS18B20
بسب انه Linear ولا يحتاج اي مجهود اوفكر برمجي ولا يوجد اي شرح عن استحدام PT00 او NTC بسبب المعادلات الرياضية (المعادلات الاسيه) فياريت استخدام هذه الحساسات ليكون المشروع اكثر واقعية


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-03-2012, 10:23 PM المشاركة 8   
افتراضي


ت- الدخول إلى الحلقة الغير منتهية وفيها يتم :
1- الحساس الأول Sensor A :

كود:
while(1)    //infinity loop
{
// Sensor A at AN0 with AN3 as Vref
adc_resultA = ADC_Read(0);
TEMPA_deg =(adc_resultA *98)/1000;// 1000/1024 (mv/div) / 10(mv/C)= 98/1000
ByteToStr(TEMPA_deg,TEMPA_string);// Change TEMPA_deg to string
Lcd_Out(1,9,TEMPA_string); // Display on LCD
Lcd_Chr(1, 12, 223);//Send 233 which is "degree"  ASCII symbol
Lcd_Chr(1, 13, 'C');// Send C character




  • قراءة الجهد التناظرى للحساس الأول المتصل بالطرف AR0 وتحويله إلى رقم مناظر (يقع بين 0 – 1023 ) بالدالة ADC_Read(0) ونسخ النتيجة للمتغير adc_resultA .
  • تحويل محتويات المتغير adc_resultA من رقم يقع بين (0-1023) إلى رقم مناظر يدل على درجة الحرارة المئوية بضرب محتوياته فى 98 وقسمة ناتج الضرب على 1000(adc_resultA *98)/1000 ونسخ النتيجة إلى المتغير TEMPA_deg .
  • تحويل الرقم الموجود بالمتغير TEMPA_deg إلى سلسلة نصية مناظرة TEMPA_string لنتمكن من عرضع على وحدة العرض باستخدام دالة التحويل ByteToStr .
  • عرض السلسلة النصية الناتجة على وحدة العرض LCDLcd_Out(1,9,TEMPA_string) بالسطر الأول بدءا من العامود التاسع حتى نحصل على عرض متناسق على الشاشة حيث تأخذ أربعة أماكن كما ذكر سابقا .
  • عرض رمز أو علامة الدرجة المئوية والتى تساوى العدد 233 بكود أسكى بالسطر الأول عند العامود الثانى عشر أى بعد النص السابق مباشرة باستخدام دالة إرسال حرف Lcd_Chr.
  • وأخيرا عرض الحرف "C" ليدل على أن الدرجة مئوية , بعد رمز الدرجة مباشرة باستخدام دالة إرسال حرف Lcd_Chr .

2- الحساس الثانى Sensor B :
نكرر نفس الخطوات :

كود:
// Sensor B at AN1 with AN3 as Vref
adc_resultB= ADC_Read(1);
TEMPB_deg =(adc_resultB*98)/1000;
ByteToStr(TEMPB_deg,TEMPB_string);
Lcd_Out(2,9,TEMPB_string);
Lcd_Chr(2, 12, 223);
Lcd_Chr(2, 13, 'C');
//=============================================







إضافة رد

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

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

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


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:27 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025