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

   

Emad Omar
:: مهندس ::
تاريخ التسجيل: Feb 2012
المشاركات: 9
نشاط [ Emad Omar ]
قوة السمعة:
قديم 21-02-2012, 08:37 PM المشاركة 33   
افتراضي



أخى الكريم

شكرا جزيلا لك

بارك الله فيك

برجاء إرفاق ما كتبته وما رسمته لتحديد المطلوب عمله .

مع تمنياتى بدوام التوفيق
http://upload.qariya.info/images/qariya-8ea389ab6b.png

http://upload.qariya.info/images/qariya-c9da4b8f51.png

شُكراً لتجاوبك ..

اعلانات

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


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

1- البرنامج صح وإليك إعادة له :

كود:
void main( ) { TRISB=0; PORTB=0; start: PORTB=0xFF; Delay_ms(250); PORTB=0; Delay_ms(250); goto start; }
2- بما أن الترجمة تمت بنجاح فهناك احتمالين :
أ- عند إنشاء المشروع حدث خطأ ما فى خيارات الميكروكونترولر وهو الأرجح .
ب- قد يكون السبب عدم توصيل طرف MCLR بالجهد الموجب .

إذا تعذر الحل يمكنك إرفاق الملفات وليس صور

إليك صور لمحاكاة البرنامج :





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

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

Emad Omar
:: مهندس ::
تاريخ التسجيل: Feb 2012
المشاركات: 9
نشاط [ Emad Omar ]
قوة السمعة:
قديم 21-02-2012, 09:40 PM المشاركة 35   
افتراضي


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

1- البرنامج صح وإليك إعادة له :

كود:
void main( ) { TRISB=0; PORTB=0; start: PORTB=0xFF; Delay_ms(250); PORTB=0; Delay_ms(250); goto start; }
2- بما أن الترجمة تمت بنجاح فهناك احتمالين :
أ- عند إنشاء المشروع حدث خطأ ما فى خيارات الميكروكونترولر وهو الأرجح .
ب- قد يكون السبب عدم توصيل طرف MCLR بالجهد الموجب .

إذا تعذر الحل يمكنك إرفاق الملفات وليس صور

إليك صور لمحاكاة البرنامج :





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

أكتشفت أنني أقوم بالربط مع ملف HEX فارغ .. غير الملف اللذي اقُوم بالتطبيق عليه

هذا بالإضافة إلى خطأ عدم توصيل الجهد الموجب في طرف الـ MCLR كما أشرت أنت !

الآن كُل شيء يعمل بشكل صحيح ..


آتمنى أن تتفهم آنني هاوً ولربما أجهل الكثير من الأساسيات ^_^

شُكراً لتعاونك ..


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


Oops ^_^

أكتشفت أنني أقوم بالربط مع ملف HEX فارغ .. غير الملف اللذي اقُوم بالتطبيق عليه

هذا بالإضافة إلى خطأ عدم توصيل الجهد الموجب في طرف الـ MCLR كما أشرت أنت !

الآن كُل شيء يعمل بشكل صحيح ..


آتمنى أن تتفهم آنني هاوً ولربما أجهل الكثير من الأساسيات ^_^

شُكراً لتعاونك ..
أخى الكريم

شكرا جزيلا لك

من تقدم إلى تقدم إن شاء الله

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


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


مشروع مقياس مستوى : الصوت , الضوء , المياه ......الفولت فى شكل عامود من الليدات LEDs Bar
إضاءة سلسلة من الليدات بناء على جهد الدخل :
فى هذا التدريب سوف نستخدم مقاومة متغيرة لقيادة drive دخل المحول ADC حيث يتم توصيله بطرف الدخل التناظرى وتغيير الجهد من 0 إلى VDD (جهد تغذية الميكروكونترولر ) , عند تغذية الميكروكونترولر بجهد 5V فإن جهد الدخل , فى هذه الحالة , يجب أن يتغير فى الحدود من 0 إلى 5V حتى نحصل على ميزات جميع البتات العشرة للتحويل . وفى هذه الحالة فإن كل بت تحتاج لجهد دخل تناظرى قيمته 5V/1024 bit = 0.00488 V/bit = 4.88 mV /bit ( و bit هنا تعنى قسم أو جزء من 1024 جزء وهى من 0 إلى 1023 ) .

الآن نفترض أننا نريد تمثيل قيمنا على شكل مرئى بتوصيلها بسلسلة مكونة من 8 ليد , كما يتم فى مقياس شدة الصوت
Vu-Meterأو فى أحد حساسات المستوى الكثيرة level sensors .
لتحقيق مقياس خطى فإن كل الليدات يجب أن تضىء فى خطوات , يمكن حساب الخطوة كما يلى :
5V/8LED = 0.625 V / LED = 625 mV / LED
أى أن الليد الأول سوف يضىء إذا كان الجهد فى المدى 0-625mV, والليد الثانى سوف يضىء إذا كان الجهد فى المدى
626-1250mVوهكذا حتى 5V هتى تصبح جميع الليدات مضيئة .

خرج المحول ADC ليس بالملى فولت ولكنه "عدد صحيح يقع بين 0 و 1023" والذى يمثل جهد الدخل التناظرى .
فى حالتنا هذه , نحن نعلم " أنه بتغذية الميكروكونترولر PIC بجهد تغذية 5V , وباستخدام مصدر الجهد هذا داخليا كجهد مرجعى فإن كل قسم أو جزء سوف يعادل 4.88mV " لهذا السبب فإن خطوات إضاءة الليدات يمكن التعبير عنها بدلالة عدد الأجزاء كما يلى :
625mv / 4.88 mv / bit = 128bit
لذلك فإن الليد الأول سوف يضىء فى المدى 0-128 والثانى فى المدى 129-256 وهكذا .

الآن لنرى طريقة تنفيذ ذلك :
الدائرة الكهربية :




البرنامج :




كود:
 
/* ADC example bar,dot, level meter 
PIC16F877A *4MHz
Eng,F.Abdelaziz
http://www.eeecb.com/vb/index.php */
unsigned temp; // 0 .. 65535
void main( )
{
TRISA=0xFF;
TRISD=0;
PORTD=0;
 while(1) 
    {
        temp = ADC_Read(0);  // Read analog value from channel 0
 if(temp<=128) PORTD=1;// 00000001
 else
 if(temp<=256) PORTD=3;//00000011
 else
 if(temp<=384) PORTD=7;//00000111
 else
 if(temp<=512) PORTD=15;//00001111
 else
 if(temp<=640) PORTD=31;//00011111
 else
 if(temp<=768) PORTD=63;//00111111
 else
 if(temp<=896) PORTD=127;//01111111
 else
 if(temp<=1024)  PORTD=255;//11111111
 else
 PORTD=0;
    } 
}  


ملاحظات :
  • يجب تهيئة طرف توصيل المقاومة المتغيرة كمدخل تناظرى عن طريق إعدادات سجلات التحكم فى الأطراف TRIS. فى الميكروكونترولر PIC16F877, توجد المداخل التناظرية بالمنفذ A والمنفذ E . مع ملاحظة أنه "ليس كل أطراف المنفذ A تناظرية" حيث أن الطرف RA4 لا يسخدم كمدخل تناظرى وأن الأطراف RA6,RA7 غير موجودة , كذلك الأطراف, RE3, 4,5,6,7 غير موجودة .ولذلك يمكن أن يتم الإعداد كما يلى :
TRISA = 0b00101111 ; / / RA4 is not analog, RA6 and RA7 does not exist
TRISE = 0b00000111 , / / Pins RE3, 4,5,6,7 does not exist
  • الأوضاع الافتراضية للسجلات ADCON0 و ADCON1ودالة قراءة الدخل التناظرى بالميكروسى برو كافية للقيام بباقى الإعدادات فى هذا التدريب .
  • نتيجة التحويل (10 بت) يتم حفظها فى السجلات ADRESL (الثمانى بتات الأدنى) وADRESH( البتان الأعلى ) حيث يتم نسخها إلى متغير نوع "عدد صحيح بدون إشارة" أى بسعة 16-bit. فى الميكروسى برو عند الإعلان عن مثل هذا المتغير يكتفى بذكر الاختصار unsigned يليه اسم المتغير unsigned tmp.
  • الآن تبعا للقيمة التى حصلنا عليها يتم توصيل الليدات :
# إضأة الليد الأول :
عندما يكون جهد الدخل التناظرى فى المدى 0-625mV تكون نتيجة التحويل ADC فى المدى 0-128 عندئذ نضع القيمة 1 على المنفذ PORTD (المعد مسبقا كمخارج) فسوف يضىء الليد المتصل بالطرف RD0 ( البت bit0 بالمنفذ – هذه القيمة) .

# إضاءة الليد الثانى :
عندما يكون جهد الدخل التناظرى فى المدى 626-1250mV تكون نتيجة التحويل ADC فى المدى
129-256 عندئذ نضع القيمة 3 على المنفذ PORTD (المعد مسبقا كمخارج) وسوف يضىء الليدان المتصلان بالأطراف RD0 و RD1 , وهكذا . ومن ثم يعطى تأثير "عامود" العرض "bar" .
  • أما إذا أردنا تمثيل القيم على شكل نقط point وليس عامود فكل ما علينا عمله هو إعطاء القيم 1,2,4,8,16,32,64,128 للمنقذ PORTD.
  • كما رأينا التدريب بسيط للغاية وبالطبع يمكن استبدال المقاومة المتغيرة بحساس مستوى .
  • عند استخدام حساس المستوى أو عند توصيل إشارة تناظرية إلى مدخل الميكروكونترولر PIC , إذا زادت إشارة الدخل التناظرى عن 5 فولت , نحتاج لتخفيضها باستخدام مقسمات الجهد , أما إذا كان مستواها غير كافى ( الدخل فى حدود عدة ملى فولت) , نحتاج إلى مكبر عمليات .


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


تدريب بسيط للتعرف على طريقة التعامل مع دوال وحدة العرض LCD
وميض رسائل نصية على وحدة العرض :

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



البرنامج مع التعليق عليه :













كود:
 

/*1- Comments Intruduction-Blink Character Message on LCD PIC16F877A Clock * 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF */
//2- Define 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 connection definition
//3- Define Messages
char message1[] = "Welcome to"; char message2[] = "ENG.F.ABDELAZIZ";
//4- Main function
void main() { //4-a- set up ports TRISD = 0; // PORTD All Outputs PORTD=0; // clear
//4-b- set up LCD Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // CLEAR display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
// 4-c- Infinite Loop
while(1) {
//4-c-1-send strings Lcd_Out(1,4,message1); // Write message1 in 1st row,begin from Column 4 Lcd_Out(2,1,message2); // Write message2 in 2nd row,begin from Column 1 //4-c-2--delay 1 sec. Delay_ms(1000); // Wait for 1 sec //4-c-3--clear LCD Lcd_Cmd(_LCD_CLEAR); // Clear display //4-c-4-delay 1 sec. Delay_ms(1000); // Wait for 1 sec } // Infinite Loop }


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


تدريب بسيط لعرض نص إفتتاحى "Hello World!" على وحدة العرض LCD

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



مجرد مثال بسيط لاستخدام الميكروسى فى عمل عرض لنص إفتتاحى "Hello World!" بالميكروكونترولر PIC16F877A ووحدة العرض LCD .
يتم عرض النص "Hello World!" فى السطر الأول وعرض عداد لرقم فى السطر الثانى .

البرنامج :

كود:
/* Mikroc pro LCD simple example : fixed string and variable string. PIC16F877A * 4MHz Eng.F.Abdelaziz http://www.eeecb.com/vb/index.php */
// 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
char fixed_string[] = "Hello World!";
char var_string[7];
int i;
void main() { TRISD = 0; // PORTD is output i=0;
Lcd_Init(); // Initialize LCD connected to PORTD Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 1, fixed_string); // Print text to LCD, row 1
while(1){
for(i=0;i<200;i++) { IntToStr(i,var_string); Lcd_Out(2,1,var_string); // Print text to LCD, row 2 Delay_ms(500); } i=0; }
}


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


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



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