 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: 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 فولت , نحتاج لتخفيضها باستخدام مقسمات الجهد , أما إذا كان مستواها غير كافى ( الدخل فى حدود عدة ملى فولت) , نحتاج إلى مكبر عمليات .
|