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

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 24-02-2012, 01:37 AM المشاركة 41   
افتراضي



شكراا على المعلومات المفيدة يا مهندس عبد العزيز
أود أن أسأل عن ان بامكان الميكروكنترول أن يدخل الأصوات على شكل تناظرية
بالمقارنة مع أصوت محفوظة بداخله في التحكم يعني لوا اقول كلمة افتح بمايك موصول بالمكروكنترول يقارن بين ثماني كلمات بداخله حتى يجد التطابق ثم يعمل output لمنفذ من المنافذ . وشكرا

أخى الكريم

شكرا جزيلا لك

المشكلة ليست فى الميكروكونترولر . طالما أن الدخل التناظرى عبارة عن "جهد تناظرى" فى الحدود المتعارف عليها فلا مشكلة .

المشكلة فى "دوائر الربط والتوافق والمعالجة والتكييف" والتى تقوم بتجهيز الإشارة لتتناسب مع الميكروكونترولر . ربما بعد الانتهاء من من هذه المكتبة يكون لدينا جواب محدد وواضح .

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

اعلانات

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


تدريب للربط بين مكتبة دوال المحول ADC و مكتبة دوال وحدة العرض LCD

عرض نتيجة التحويل ADC على وحدة العرض LCD

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

يؤخذ جهد الدخل التناظرى من مقاومة المتغيرة 5K والمتصلة بين الجهد +5V والأرضى ويوصل طرفها المتحرك إلى الطرف RA0/AN0 للميكروكونترولر .
سوف يتم العمل بالوضع الافتراضى أى اختيار الجهود المرجعية الافتراضية ( Vref+ = Vdd=+5V و Vref- = Vss=0V أى المدى من صفر حتى 5 فولت ) .
نتيجة لذلك فأن المحول ADC ذو السعة 10—bit سوف يقوم بتحويل الجهد التناظرى فى المدى بين 0V و 5V إلى عدد رقمى فى المدى بين 0 و 1023 .هذا العدد هو الذى سوف يتم عرضه على وحدة LCD كما هو فى الوقت الراهن وبعد ذلك سوف يتم تحويله إلى الكميات الفيزيائية المختلفة .






سوف نتدرج فى التدريب على بعض تقنيات عرض نتائج التحويل ADC على وحدة العرض :
البرنامج الأول :
الغرض : التدريب على الدالة IntToStr

تستخدم هذه الدالة فى تحويل دخلها وعدد صحيح بإشارة إلى سلسلة نصية . السلسلة النصية الناتجة لها عرض ثابت بقيمة 7 حروف متضمنة حرف الصفر فى النهاية ( ليدل على إنتهاء النص) . النص الناتج يكون بمحازاة اليمين والأماكن الخاية من الحروف فى اليسار تترك فارغة .

يجب أن لا يقل عرص مقصد النص عن 7 حروف .



الصيغة :









· نكتب اسم الدالة IntToStr (دالة بدون عائد) ثم بين قوسين بارامتران :

· البارامتر الأول input : العدد الصحيح بإشارة والمراد تحويله .

· البارامتر التانى output : النص الناتج عن التحويل .



مثال :

تعريف متغير باسم j نوع int وتخصيص القيم -4220 له .



كود:
int j = -4220;
تعريف متغير باسم txt كمقصد لنص فى شكل مصفوفة ذو 7 عناصر (يجب إلاتقل عن ذلك )


كود:
char txt[7]; ...
تحويل العدد -4220 أى نص فيصبح " -4220" , لاحظ وجود مكان فارغ ليكون الإجمالى 6 حروف والسابع هو صفر النهاية .


كود:
 
IntToStr(j, txt); // txt is " -4220" (one blank here)

البرنامج :

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

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


البرنامج :







كود:
/*1-Comments
ADC &LCD
PIC16F877A 
 Oscillator * 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF
 */
//2- LCD module connections
 sbit LCD_RS at RD0_bit;
 sbit LCD_EN at RD1_bit;
 sbit LCD_D4 at RD4_bit;
 sbit LCD_D5 at RD5_bit;
 sbit LCD_D6 at RD6_bit;
 sbit LCD_D7 at RD7_bit;
 sbit LCD_RS_Direction at TRISD0_bit;
 sbit LCD_EN_Direction at TRISD1_bit;
 sbit LCD_D4_Direction at TRISD4_bit;
 sbit LCD_D5_Direction at TRISD5_bit;
 sbit LCD_D6_Direction at TRISD6_bit;
 sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections
//3- Define Messages and variables
 char var_string[7];
 
 unsigned int adc_Value;
//4- main
 void main() {
  
 TRISD = 0;    // PORTD All Outputs
    
  Lcd_Init();                        // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);              // CLEAR display
  Lcd_Cmd(_LCD_CURSOR_OFF);         // Cursor off
   
while(1) {
      adc_value = ADC_Read(0);
      IntToStr(adc_value,var_string);
      Lcd_Out(1,1,var_string);   // Print text to LCD, row 1
      Delay_ms(500);
   
   
                 } 
 }


النتائج :



لاحظ وجود 2 مكان فارغ فى البداية ( عند اليسار) لتكمل النص إلى 6 حروف والحرف السابع هو صفر الانتهاء.


سعد الجسري
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2005
الدولة: UAE
المشاركات: 144
نشاط [ سعد الجسري ]
قوة السمعة:
قديم 24-02-2012, 07:50 PM المشاركة 44   
افتراضي


أعتذر عن المداخلة المزعجة والتي لا أحبها وخصوصا بشرحك
ولكني أريد أن أقولك لك

الله يعطيك العافية

والله ينور طريقك


شكرا


khamed tabet
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 311
نشاط [ khamed tabet ]
قوة السمعة:
قديم 24-02-2012, 08:03 PM المشاركة 45   
افتراضي


البرنامج :







كود:
/*1-Comments
ADC &LCD
PIC16F877A 
 Oscillator * 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF
 */
//2- LCD module connections
 sbit LCD_RS at RD0_bit;
 sbit LCD_EN at RD1_bit;
 sbit LCD_D4 at RD4_bit;
 sbit LCD_D5 at RD5_bit;
 sbit LCD_D6 at RD6_bit;
 sbit LCD_D7 at RD7_bit;
 sbit LCD_RS_Direction at TRISD0_bit;
 sbit LCD_EN_Direction at TRISD1_bit;
 sbit LCD_D4_Direction at TRISD4_bit;
 sbit LCD_D5_Direction at TRISD5_bit;
 sbit LCD_D6_Direction at TRISD6_bit;
 sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections
//3- Define Messages and variables
 char var_string[7];
 
 unsigned int adc_Value;
//4- main
 void main() {
  
 TRISD = 0;    // PORTD All Outputs
    
  Lcd_Init();                        // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);              // CLEAR display
  Lcd_Cmd(_LCD_CURSOR_OFF);         // Cursor off
   
while(1) {
      adc_value = ADC_Read(0);
      IntToStr(adc_value,var_string);
      Lcd_Out(1,1,var_string);   // Print text to LCD, row 1
      Delay_ms(500);
   
   
                 } 
 }


النتائج :



لاحظ وجود 2 مكان فارغ فى البداية ( عند اليسار) لتكمل النص إلى 6 حروف والحرف السابع هو صفر الانتهاء.
شكرا لك يامهندسنا الفاضل على شرح الواضح
لاكن كيف يعلم أن PORTA0 كدخل ؟ وشكرا


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 24-02-2012, 08:54 PM المشاركة 46   
افتراضي


أعتذر عن المداخلة المزعجة والتي لا أحبها وخصوصا بشرحك
ولكني أريد أن أقولك لك

الله يعطيك العافية

والله ينور طريقك

شكرا
أخى الكريم

شكرا جزيلا لك

بارك الله فيك

تقدير أعتز به

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


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 24-02-2012, 08:59 PM المشاركة 47   
افتراضي


شكرا لك يامهندسنا الفاضل على شرح الواضح
لاكن كيف يعلم أن PORTA0 كدخل ؟ وشكرا
عفوا أخى الكريم :

الوضع الافتراضى ( عند يدء التشغيل إو عند الإعادة reset ) لإعدادات جميع أطراف المنفذ PORTA هو كمداخل تناظرية ومن ثم لا حاجة لتدخلنا طالما أن الوضع الافتراضى يحقق خياراتنا , ومع ذلك فلا مانع من ذكر الأعدادات مرة أخرى
حسب خياراتنا كأن نقول TRISA=0xFF لاختيار جميع الأطراف كمداخل على سبيل المثال .


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


البرنامج الثانى :
هو نفسه البرنامج الأول مع إضافة "سلاسل نصية" ثابتة وتنسيق عرض نتيجة التحويل على الشاشة :
النتيجة :





البرنامج :










كود:
/*1-Comments ADC &LCD PIC16F877A Oscillator * 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF */
//2- LCD module connections sbit LCD_RS at RD0_bit; sbit LCD_EN at RD1_bit; sbit LCD_D4 at RD4_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD0_bit; sbit LCD_EN_Direction at TRISD1_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; // End LCD module connections
//3- Define Messages and variables char var_string[7]; char fixed_string[] = "ADC Value= ";
unsigned int adc_Value;
//4- main void main() {
TRISD = 0; // PORTD All Outputs
Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // CLEAR display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1,1,fixed_string); // Write message1 in 1st row Lcd_Out(2,1,"Eng.F.ABDELAZIZ"); while(1) { adc_value = ADC_Read(0);
IntToStr(adc_value,var_string);
Lcd_Out(1,11,var_string); // Print text to LCD, row 1 Delay_ms(500);
} }



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