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

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 26-04-2015, 01:47 AM المشاركة 25   
افتراضي التحويل من تناظرى إلى رقمى مع المترجم CCS C :



التحويل من تناظرى إلى رقمى مع المترجم CCS C :
للتحكم فى المحول من تناظرى إلى رقمى يوفر المترجم CCS C الدوال التالية :
• الدالة setup_adc(mode) : لتحديد مصدر ساعة المحول .
• الدالة setup_adc_ports(value) : لتحديد أى الأطراف تكون تناظرية .
• الدالة setup_adc_channel(channel) : لتحديد قناة الدخل التناظرى الحالية .
• الدالة read_adc() : تنفيذ التحويل .
كما يوجد أيضا التوجيه #device adc=xx والذى يحدد حجم العودة بالدالة read_adc() حيث xx يمكن أن تكون “8” أو “10” .
مثال :
البرنامج الأساسى :

كود:
/* 
PIC16F877A baic program EX1 
*/ 
#include <16F877a.h> 
#device adc=10    // Set ADC resolution to 10B it
#use delay(clock=4000000)
#include <lcd.c>

Void main()
{
   int16 x;
   float y;
/* ADC Initialization */
   setup_adc(ADC_CLOCK_INTERNAL); // initialize ADC with a sampling rate of Crystal/4 MHz
   setup_adc_ports(RA0_ANALOG);   // set PIN_A0 as analog input channel
   set_adc_channel(0);            // point ADC to channel 0 for ADC reading
   delay_ms(1);                   // ADC module is slow, needs some time to adjust.
   
   /* Peripherals Configurations */ 
   lcd_init();                   // Turn LCD ON, along with other initialization commands
   delay_ms(100);
   
      
   while(true)
{
   x = read_adc(); // x from 0 to 1023 
   y = 5.0 * x / 1024.0; // y from 0v to 5v
   printf(lcd_putc, "\fADC = %4Ld", x);//format % : 4 digits , long integer
   
   printf(lcd_putc, "\nVoltage = %01.2fv",y);//format % : 2digits.2digit float
   delay_ms(500);
   }
}

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 26-04-2015, 01:50 AM المشاركة 26   
افتراضي تدريب : استخدام المحول ADC لقياس درجة الحرارة بالحساس LM35 مع المترجم CCS C :


تدريب : استخدام المحول ADC لقياس درجة الحرارة بالحساس LM35 مع المترجم CCS C :
البرنامج :

كود:
/* 
PIC16F877A and LM35 Based Temperature Monitor 

*/ 

#include <16F877A.h> 
#device adc=10    // Set ADC resolution to 10Bit
#use delay(clock=4000000) 
#include "lcd.c" 

#define  LOAD  PIN_B7 
#define  THRES 30.0     // load switching threshold in Celsius

int16 digital_reading;  // ADC resolution is 10Bit, an 8Bit integer is not enough to hold the reading
float temp; 

void main() 
{ 
   /* 1- ADC Initialization */ 
   setup_adc(ADC_CLOCK_INTERNAL); // initialize ADC with a sampling rate of Crystal/4 MHz
   setup_adc_ports(RA0_ANALOG);   // set PIN_A0 as analog input channel
   set_adc_channel(0);            // point ADC to channel 0 for ADC reading
   delay_ms(1);                   // ADC module is slow, needs some time to adjust. 
    
   /* 2- Peripherals Configurations */ 
   lcd_init();                   // Turn LCD ON, along with other initialization commands
   
   output_low(LOAD);             // the load is initially OFF
   lcd_gotoxy(1,1);              // point LCD cursor to col1 row1
   lcd_putc("Temperature is:");  // print on LCD 
    
   while(TRUE) // infinite loop 
   { 
      digital_reading = read_adc();    // capture current temperature reading
      delay_us(100);                   // 0.1ms delay for ADC stabilization
      
      temp = digital_reading * 0.4883; // convert reading to Celsius
      
      lcd_gotoxy(1,2);                 // point LCD cursor to col1 row2
      printf(lcd_putc,"%2.1f C",temp); // print value on LCD,format % : 2digits.1digit   
       
      if(temp>=THRES)   output_high(LOAD);   // Control Load 
      else  output_low(LOAD); 
       
      delay_ms(1000);   // 1 second delay between readings
   } 
}




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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 26-04-2015, 02:38 AM المشاركة 27   
افتراضي


مفاهيم استخدام الميكروكونترولر PIC والحساس LM35 لقياس درجة الحرارة :
المحول من تناظرى إلى رقمى ADC هو وحدة (موديول) داخلى يستخدم لقراءة الجهود التناظرية وتحويلها إلى تمثيل رقمى ، وسوف نستخدم الميكروكونترولر PIC16F877A والذى يمتلك وحدة تحويل ADC بدقة 10 بت . هذا المحول له 8 قنوات هى AN0-AN7 وهو ما يسمح للمحول بالعمل بالانتخاب مع أى من هذه القنوات فى لحظة ما .
أحد البارامترات الهامة للمحول ADC هى جهد المرجع له Vref ، وهو أقصى جهد يمكن أن يقوم المحول ADC بقراءته ، فى حالتنا سوف يكون Vref = 5V وهو جهد مصدر التغذية .
بارامتر هام آخر وهو دقة المحول ADC ، والتى تحدد أدنى قيمة من الجهد التناظرى يمكن أن تقرأ ( حجم خطوة المحول ADC) .
على سبيل المثال ، عند استخدام محول ADC بدقة 10 بت مع جهد مرجع 5V ، فإن مدى الجهود يبدأ من 0V وينتهى عند 5V ويتم تقسيمه إلى خطوات متساوية تبدأ من 000 وتنتهى عند 1023 ، بمعنى إنه إذا كان جهد الدخل 5V ، وهو أقصى قيمة ، فإن المحول ADC سوف يقرأ ه 1023 ، وإذا كان الدخل 2.5V ، فإن القراءة سوف تكون 512 وهكذا .
يمكن ببساطة حساب خطوة المحول ADC باستخدام المعادلة Step = Vref/1024 ، وفى حالتنا تكون الخوة 4.883 mV ، وهو أدنى جهد يمكن أن يقرأه المحول ADC ، ومن ثم فإن :
• دخل مقداره 4.883Mv يجب أن يعطى قراءة 001 .
• دخل مقداره 9.766mV يجب أن يعطى قراءة 002 ، وهكذا .
حساس درجة الحرارة LM35 :
ها الحساس له ثلاثة أطراف Vcc,Output,GND) ، وهو حساس لدرجة الحرارة مرتفع الدقة ، حيث تبلغ دقته 10mV/C وتبدأ من الصفر ( بمعنى أن خرج بالقيمة 0V يمثل درجة حرارة 0C) ، وبالتالى فأن :

10mV ---> 1C
20mV ---> 2C
370mV ---> 37.0C
…………………
تحويل قراءة المحول ADC إلى درجات مئوية :
بمعلومية أن المحول ADC له حجم خطوة بالقيمة 4.883mV ، فإن تحويل القراءة الرقمية التى حصلنا عليها مرة أخرى إلى جهد تتم ببساطة عن طريق ضرب القراءة الرقمية فى حجم الخطوة كما يلى :
Vin (in Volts) = DigitalReading * 0.004883
والآن ، بمعلومية حساسية الحساس وهى 10mV/C ، يتم تحويل هذا الجهد ببساطة إلى درجات مئوية عن طريق قسمة جهد الدخل على 0.01 لنحصل على :
Temperature (C) = Vin/0.01 = DigitalReading * 0.4883

http://fathallaabdelaziz.forumarabia.com/


الصورة الرمزية Omar Mekkawy
Omar Mekkawy
:: مهندس متميز ::
تاريخ التسجيل: Sep 2011
الدولة: مصر
المشاركات: 1,449
نشاط [ Omar Mekkawy ]
قوة السمعة:
قديم 26-04-2015, 05:38 AM المشاركة 28   
افتراضي


جزاك الله كل خير أستاذي

بارك الله لك في صحتك وعلمك

إستمر ..


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 28-04-2015, 05:05 PM المشاركة 29   
افتراضي


جزاك الله كل خير أستاذي

بارك الله لك في صحتك وعلمك

إستمر ..
أخى الكريم شكرا جزيلا لك
بارك الله فيك

مع تمنياتى بدوام التوفيق


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 29-04-2015, 02:21 AM المشاركة 30   
افتراضي المؤقت / العداد Timer0 مع المترجم CCS C : أولا : الاستخدام كعداد


المؤقت / العداد Timer0 مع المترجم CCS C : أولا : الاستخدام كعداد

الشكل التالى يبين مخطط عمل المؤقت Timer0 :






تطبيق على استخدام المؤقت timer0 كعداد :






البرنامج :


كود:

#include <16F877A.h>
#use delay(clock=20000000)
#include<lcd.c>

void main(){
int count;
//set_tris_b(0x01); /* Set I/O pins of Port B */
lcd_init();

/* Set up 8-bit RTCC */
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
set_timer0(0); /* TMR0 = 0 */

   while(TRUE)
   {
      count = get_timer0(); /* Read counter0 */
      printf(lcd_putc ,"\fCounter0 = %u",count); /* ... send it out! */
      delay_ms(200);           /* Wait 200 ms to debounce */


الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 515
نشاط [ Sallam ]
قوة السمعة:
قديم 30-04-2015, 12:39 AM المشاركة 31   
افتراضي


موضوع رائع ومتميز استاذ F.Abdelaziz

أتمنى لك كل التوفيق والنجاح

لدي استفسار لحضرتك

ما الفرق بين استعمال برنامج الميروسي وبين هذا البرنامج CCS Compiler
مع الشكر والتقدير


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-04-2015, 03:17 PM المشاركة 32   
افتراضي


موضوع رائع ومتميز استاذ F.Abdelaziz

أتمنى لك كل التوفيق والنجاح

لدي استفسار لحضرتك

ما الفرق بين استعمال برنامج الميروسي وبين هذا البرنامج CCS Compiler
مع الشكر والتقدير
أخى الكريم شكرا جزيلا لك
تابع وفى النهاية سوف تجد الإجابة
فى رأى لا مانع من استخدام كل من المترجمين



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