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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 03-06-2015, 11:13 PM المشاركة 1   
افتراضي جهاز قياس الجهد باستخدام الميكروكونترولر PIC12F675 ومسجل الإزاحة 74595 والعرض على 4 و Twitter FaceBook Google+



جهاز قياس الجهد باستخدام الميكروكونترولر PIC12F675 ومسجل الإزاحة 74595 والعرض على 4 وحدات سفن سيجمنت مع المترجم CCS C  :



البرنامج :

كود:
#include <12F675.h>
#device adc=10
#FUSES NOWDT, INTRC_IO, NOMCLR, NOBROWNOUT
#use delay(clock=4000000)
#use FIXED_IO( A_outputs=PIN_A5,PIN_A4,PIN_A2 )
#define EXP_OUT_ENABLE  PIN_A2
#define EXP_OUT_CLOCK   PIN_A5
#define EXP_OUT_DO      PIN_A4
#define NUMBER_OF_74595 4
#include <74595.c>

// Data values for Common cathode display 
int digit[14]={63,6,91,79,102,109,125,7,127,111,99,88,64,80};
//            [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 ,o ,c ,- ,r ]

void main() {
   setup_comparator(NC_NC_NC_NC);
   setup_adc_ports(sAN0);// As defined in header file
   setup_adc(ADC_CLOCK_DIV_2);
   setup_vref(FALSE);
   int mask[4];//mask
   int data[4];//send array //
   int16 ADC;
   delay_ms(250);

   while(TRUE)
   {
     set_adc_channel(0);
     delay_ms(10);
     ADC = (read_adc())*(3);
    
   if(ADC<3010)
   {
   mask[0]=(ADC/1000)%10; // ones
   mask[1]=(ADC/100)%10;  // tens
   mask[2]=(ADC/10)%10;   // hundreds
   mask[3]= ADC %10;     // thousands
   } 
   else
   {
   mask[0]=12;
   mask[1]=12;  
   mask[2]=12;  
   mask[3]=12;  
   }
   
   data[0] = digit[mask[0]];
   data[1] = digit[mask[1]];
   data[2] = digit[mask[2]];
   data[3] = digit[mask[3]];
   
   write_expanded_outputs(data);
   delay_ms(100);
   }

}
شرح البرنامج :

كود:
شرح البرنامج :
أولا رأس (مقدمة) البرنامج :
•	تضمين ملف الرأس الخاص بالميكروكونترولر المستخدم وهو PIC12F765 ذات الثمانية أطراف :
#include <12F675.h>
•	تحديد دقة التحويل من تناظرى إلى رقمى بعشرة بتات :  
#device adc=10
•	تحديد مصهرات (بتات) التكوين configuration وخاصة استخدام الساعة الداخلية :
#FUSES NOWDT, INTRC_IO, NOMCLR, NOBROWNOUT
•	تحديد تردد المذبذب المستخدم والذى يدخل فى حسابات دالة التأخير delay :
#use delay(clock=4000000)
•	إخبار المترجم بكيفية التعامل مع المداخل / المخارج ، هنا تم تحديد الأطراف A2,A4,A5 كمخارج :
#use FIXED_IO( A_outputs=PIN_A5,PIN_A4,PIN_A2 )
•	تعريف الأطراف المستخدم مع مسجلات الإزاحة بأسماء تسهل فهم تنفيذ البرنامج :
#define EXP_OUT_ENABLE  PIN_A2
#define EXP_OUT_CLOCK   PIN_A5
#define EXP_OUT_DO      PIN_A4
•	تحديد عدد مسجلات الإزاحة 74595 المستخدم فى توصيل البيانات إلى وحدات السفن سيجمنت : 
#define NUMBER_OF_74595 4
•	تضمين الملف الذى يحتوى على الدالة التى تستخدم مسجلات الإزاحة 74595 فى توسعة المخارج : 
#include <74595.c>
•	إعلان مصفوفة تحتوى على 14 عنصر كل عنصر عبارة عن بيانات عرض حرف محدد على وحدة عرض سفن سيجمنت ذات كاثود مشترك : 
// Data values for Common cathode display 
int digit[14]={63,6,91,79,102,109,125,7,127,111,99,88,64,80};
//                     [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 ,o ,c ,- ,r ]
ثانيا : الدالة الرئيسية :

void main() {
•	تحديد إعدادات أجهزة الميكروكونترولر وخاصة المحول من تناظرى لرقمى  :  
   setup_comparator(NC_NC_NC_NC);
   setup_adc_ports(sAN0); // As defined in header file
   setup_adc(ADC_CLOCK_DIV_2);
   setup_vref(FALSE);
•	إعلان المتغيرات المستخدمة فى البرنامج 
   int mask[4];//mask
   int data[4];//send array //
   int16 ADC;
•	تأخير لاستقرار الإعدادات 
   delay_ms(250);
ثالثا : الحلقة الغير منتهية :

   while(TRUE)
   {
•	تحديد قناة التحويل المستخدمة مع تأخير قصير لضمان استقرار المحول  :
     set_adc_channel(0);
     delay_ms(10);
•	قراءة نتيجة ( عدد من 0 إلى 1024 ) ، التحويل وضرب هذه النتيجة فى 3 لتصبح 3072  لكى تتناسب مع الجهد المقاس وهو 30 فولت ولتسهيل عملية المقارنة ، وحفظ النتيجة فى المتغير المحجوز لهذا الغرض وهو باسم ADC  :  
     ADC = (read_adc())*(3);
•	اختبار النتيجة بعملية مقارنة ، فإذا كانت النتيجة أقل من أقصى مدى يتم تنفيذ عبارات عرض النتيجة على السفن سيجمنت . 
   if(ADC<3010)
   {
•	استنباط قيمة خانات الآحاد ، والعشرات ، والمئات , والآلاف وتخزينها فى المصفوفة mask[] فى شكل عناصر مرتبة indexed :  
   mask[0]=(ADC/1000)%10; // ones
   mask[1]=(ADC/100)%10;  // tens
   mask[2]=(ADC/10)%10;   // hundreds
   mask[3]= ADC %10;     // thousands
   }
•	أما إذا كانت النتيجة خارج أقصى مدى فيتم إعطاء إشارة للدلالة على تعدى المدى  
   else
   {
   mask[0]=12;
   mask[1]=12;  
   mask[2]=12;  
   mask[3]=12;  
   }
•	تحويل كل قيمة لخانة إلى ما يناظرها باستخدام المصفوفة digit[] ، ثم نسخ النتيجة إلى مصفوفة البيانات data[] فى شكل مرتب :
   data[0] = digit[mask[0]];
   data[1] = digit[mask[1]];
   data[2] = digit[mask[2]];
   data[3] = digit[mask[3]];
 وأخيرا : استخدام الدالة المخصصة للإخراج عن طريق الزحزحة للبايتات الأربعة من خلال مسجلات الإزاحة 74595 إلى وحدات العرض السفن سيجمنت ، والتأخير للحصول على دخل مستقر :   
   write_expanded_outputs(data);
   delay_ms(100);
   }

}

اعلانات

الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 518
نشاط [ Sallam ]
قوة السمعة:0
قديم 04-06-2015, 05:23 PM المشاركة 2   
افتراضي


أشكرك استاذ فتح الله عبد العزيز على مجهودك الرائع

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

كيف نستطيع تأمين تغذية مشتركة واحدة للدارة وللقياس المطلوب؟

أرجو تكبير الصورة مع الدقة لتظهر الدارة بشكل أفضل

أشكرك من كل قلبي لتعبك

بالتوفيق أستاذي الكريم

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

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


أشكرك استاذ فتح الله عبد العزيز على مجهودك الرائع

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

كيف نستطيع تأمين تغذية مشتركة واحدة للدارة وللقياس المطلوب؟

أرجو تكبير الصورة مع الدقة لتظهر الدارة بشكل أفضل

أشكرك من كل قلبي لتعبك

بالتوفيق أستاذي الكريم



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

إليك ملف المشروع :




الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 518
نشاط [ Sallam ]
قوة السمعة:0
قديم 05-06-2015, 02:43 PM المشاركة 4   
افتراضي


أشكرك من أجل الشروع المرفق ولكن لم ترد علي بخصوص

التغذية المشتركة للدارة

فمشروعك يعتمد على تغذية من بطارية 9 فولت وتخفض بواسطة منظمي جهد 5 فولت واحدة تغذية للبيك والأخر تغذية للشاشات

هل يمكن الحصول على تغذية 9 فولت بواسطة الدارات بدون محول عن طريق مكثفة وجسر تقويم ومنظمات جهد

كم كمية التيار التي تستهلكها الدارة بالكامل؟

أرجو أن تعذرني لكثرة التساؤلات ولكن من أجل المعرفة والأفضل

لذلك أتمنى لك الأفضل دائما.


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


أشكرك من أجل الشروع المرفق ولكن لم ترد علي بخصوص

التغذية المشتركة للدارة

فمشروعك يعتمد على تغذية من بطارية 9 فولت وتخفض بواسطة منظمي جهد 5 فولت واحدة تغذية للبيك والأخر تغذية للشاشات

هل يمكن الحصول على تغذية 9 فولت بواسطة الدارات بدون محول عن طريق مكثفة وجسر تقويم ومنظمات جهد

كم كمية التيار التي تستهلكها الدارة بالكامل؟

أرجو أن تعذرني لكثرة التساؤلات ولكن من أجل المعرفة والأفضل

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


الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 518
نشاط [ Sallam ]
قوة السمعة:0
قديم 06-06-2015, 06:21 PM المشاركة 6   
افتراضي


أسعد الله أوقاتك أستاذي الكريم

طبعا أنا اتفق معك بما قلته عن التغذية وسبب سؤالي لوجود ساعات صنع الصين تقرأ جهود مستمرة بدءا من 7.5 فولت وحتى 30 فولت وهذا عائد لكون تغذية هذه الساعة مرتبط بمدخل قراءة الجهد بحيث عندما يكون أقل من 7.5 فولت تكون تغذية الدارة قد انخفضت جدا بحيث اصبحت خارج مجال عملها.

اشكرك مجددا

إضافة رد

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

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

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


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

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