- ما هو ADC؟
- ADC في ARM7-LPC2148
- دبابيس ADC في ARM7-LPC2148
- ADC يسجل في ARM7-LPC2148
- سجل ADxCR في LPC2148
- ADxGDR: سجل البيانات العالمي لشركة ADC
- المكونات مطلوبة
- مخطط الرسم البياني
- برمجة ARM7-LPC2148 لـ ADC
في عالم الإلكترونيات ، هناك العديد من أنواع المستشعرات التناظرية في السوق والتي تُستخدم لقياس درجة الحرارة والسرعة والإزاحة والضغط وما إلى ذلك. تُستخدم المستشعرات التناظرية لإنتاج مخرجات تتغير باستمرار بمرور الوقت. تميل هذه الإشارات من أجهزة الاستشعار التناظرية إلى أن تكون صغيرة جدًا من حيث القيمة من بضعة ميكرو فولت (uV) إلى عدة ملي فولت (mV) ، لذلك يلزم وجود شكل من أشكال التضخيم. لاستخدام هذه الإشارات التناظرية في وحدة التحكم الدقيقة ، نحتاج إلى تحويل الإشارة التناظرية إلى إشارة رقمية حيث يفهم المتحكم الدقيق ويعالج الإشارات الرقمية فقط. لذا فإن معظم المتحكم الدقيق يحتوي على ميزة مهمة تحمل في ثناياه عوامل تسمى ADC (محول تناظري إلى رقمي). يحتوي المتحكم الدقيق ARM7-LPC2148 أيضًا على ميزة ADC.
سنرى في هذا البرنامج التعليمي كيفية استخدام ADC في ARM7-LPC2148 من خلال توفير جهد متغير لدبوس تناظري وعرضه على شاشة LCD 16 × 2 بعد التحويل من التناظرية إلى الرقمية. لنبدأ بمقدمة قصيرة عن ADC.
ما هو ADC؟
كما ذكرنا سابقًا ، فإن ADC تعني التحويل التناظري إلى الرقمي ويتم استخدامه لتحويل القيم التناظرية من العالم الحقيقي إلى قيم رقمية مثل 1 و 0. إذن ما هي هذه القيم التناظرية؟ هذه هي تلك التي نراها في حياتنا اليومية مثل درجة الحرارة والسرعة والسطوع وما إلى ذلك. يتم قياس هذه المعلمات كجهد تناظري بواسطة المستشعرات المعنية ثم يتم تحويل هذه القيم التناظرية إلى قيم رقمية للميكروكونترولر.
لنفترض أن نطاق ADC الخاص بنا يتراوح من 0V إلى 3.3V ولدينا ADC 10 بت وهذا يعني أن جهد الدخل 0-3.3 فولت الخاص بنا سيتم تقسيمه إلى 1024 مستوى من القيم التناظرية المنفصلة (2 10 = 1024). المعنى 1024 هو دقة ADC 10 بت ، وبالمثل بالنسبة لقرار ADC 8 بت سيكون 512 (28) ولقرار ADC 16 بت سيكون 65.536 (216). LPC2148 لديه دقة 10 بت ADC.
مع هذا إذا كان جهد الإدخال الفعلي هو 0 فولت ، فإن ADC الخاص بـ MCU سيقرأه على أنه 0 وإذا كان 3.3 فولت ، فستقرأ MCU 1024 وإذا كان في مكان ما بين مثل 1.65 فولت ، فستقرأ MCU 512. يمكننا استخدام أدناه صيغ لحساب القيمة الرقمية التي ستقرأها MCU بناءً على قرار ADC والجهد التشغيلي.
(دقة ADC / جهد التشغيل) = (القيمة الرقمية ADC / قيمة الجهد الفعلي)
مثل على سبيل المثال إذا كان الجهد المرجعي 3 فولت:
شرحنا ADC بالتفصيل في المقالة السابقة.
ADC في ARM7-LPC2148
- يحتوي LPC2148 على اثنين من المحولات التناظرية إلى الرقمية.
- هذه المحولات عبارة عن محولات تقريبية متتالية أحادية 10 بت تناظرية إلى محولات رقمية
- بينما يحتوي ADC0 على ست قنوات ، يحتوي ADC1 على ثماني قنوات.
- لذلك ، إجمالي عدد إدخالات ADC المتاحة لـ LPC2148 هو 14.
- يقوم بتحويل جهد الدخل في نطاق (0 إلى 3.3 فولت) فقط. يجب ألا يتجاوز الجهد المرجعي 3.3 فولت. لأنه سيضر IC ويوفر أيضًا قيمًا غير مؤكدة.
بعض الميزات المهمة لـ ADC في LPC2148
- كل محول قادر على أداء أكثر من 400000 عينة 10 بت في الثانية.
- يحتوي كل إدخال تناظري على سجل نتائج مخصص لتقليل عبء المقاطعة.
- وضع تحويل الاندفاع لمدخلات مفردة أو متعددة.
- تحويل اختياري عند الانتقال على دبوس الإدخال أو إشارة مطابقة الموقت.
- أمر بدء عام لكلا المحولين.
تحقق أيضًا من كيفية استخدام ADC في ميكروكنترولر أخرى:
- كيفية استخدام ADC في Arduino Uno؟
- ربط ADC0808 مع متحكم 8051
- استخدام وحدة ADC لوحدة التحكم الدقيقة PIC
- دروس Raspberry Pi ADC
- كيفية استخدام ADC في MSP430G2 - قياس الجهد التناظري
- كيفية استخدام ADC في STM32F103C8
دبابيس ADC في ARM7-LPC2148
كما قيل سابقًا ، يوجد في ARM7-LPC2148 قناتان ADC0 مع 6 دبابيس إدخال تناظرية و ADC1 مع 8 دبابيس إدخال تناظرية. لذلك هناك 14 دبابيس للمدخلات التناظرية. يوضح الرسم البياني أدناه المسامير المتوفرة للإدخال التناظري.
نظرًا لأن دبابيس إدخال ADC تتضاعف مع دبابيس GPIO الأخرى. نحن بحاجة إلى تمكينهم من خلال تكوين سجل PINSEL لتحديد وظيفة ADC.
يوضح الجدول أدناه دبابيس ADC وقناة ADC المحترمة رقم في LPC2148. AD0 هي القناة 0 و AD1 هي القناة 1
LPC2148 دبوس |
رقم قناة ADC |
ص 0.28 |
م 0.1 |
ص 29 |
م 0.2 |
ص 0.30 |
م 0.3 |
ص 0.25 |
م 0.4 |
ص 0.4 |
م 0.6 |
ص 0.5 |
م 0.7 |
P0.6 |
م 1.0 |
P0.8 |
م 1.1 |
ص0.10 |
م 1.2 |
ص 0.12 |
م 1.3 |
ص 0.13 |
م 1.4 |
ص 0.15 |
م 1.5 |
ص 0.21 |
م 1.6 |
ص 0.22 |
م 1.7 |
ADC يسجل في ARM7-LPC2148
تُستخدم السجلات في البرمجة لاستخدام ميزة تحويل A / D في LPC2148.
فيما يلي قائمة بالسجلات المستخدمة في LPC2148 لتحويل A / D
1. ADCR: التناظرية لتسجيل التحكم الرقمي
الاستخدام: يُستخدم هذا السجل لتكوين محول A / D في LPC2148
2. ADGDR: سجل البيانات العالمية التناظرية إلى الرقمية
الاستخدام: يحتوي هذا السجل على بت DONE لمحول A / D ويتم تخزين نتيجة التحويل هنا.
3. ADINTERN: المقاطعة التناظرية إلى الرقمية قم بتمكين التسجيل
الاستخدام: هذا سجل تمكين المقاطعة.
4. ADDR0 - ADDR7: تسجيل بيانات القناة التناظرية إلى الرقمية
الاستخدام: يحتوي هذا السجل على قيمة A / D للقنوات المعنية.
5. ADSTAT: التناظرية لتسجيل الحالة الرقمية.
الاستخدام: يحتوي هذا السجل على علامة DONE لقناة ADC المعنية وأيضًا علامة OVERRUN لقناة ADC المعنية.
في هذا البرنامج التعليمي ، سنستخدم فقط سجلات ADCR و ADGDR فقط. دعونا نرى عنهم بالتفصيل
سجل ADxCR في LPC2148
AD0CR و AD1CR للقناة 0 والقناة 1 على التوالي. إنه سجل 32 بت. الجدول أدناه يشير إلى حقول البت لتسجيل ADCR.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
محجوز |
حافة |
بداية |
محجوز |
PDN |
محجوز |
CLKS |
انفجار |
CLCKDIV |
SEL |
دعونا نرى كيفية تكوين السجلات الفردية
1. SEL: يتم استخدام البتات من (0 إلى 7) لتحديد القناة لتحويل ADC. يتم تخصيص بت واحد لكل قناة. على سبيل المثال ، يؤدي تعيين Bit-0 إلى جعل ADC عينة AD0.1 للتحويل. وإعداد البت -1 سيجعل AD0.1 ؛ وبالمثل ، فإن تعيين bit-7 سيؤدي إلى التحويل لـ AD0.7. خطوة مهمة هي أن لدينا PINSEL وفقًا للمنفذ الذي نستخدمه على سبيل المثال PINSEL0 لـ PORT0 في PLC2148.
2. CLCKDIV: البتات من (8 إلى 15) مخصصة لمقسوم الساعة. هنا يتم تقسيم ساعة APB (ساعة ناقل الحركة الطرفية ARM) على هذه القيمة بالإضافة إلى واحدة لإنتاج الساعة المطلوبة لمحول A / D ، والتي يجب أن تكون أقل من أو تساوي 4.5 ميجاهرتز لأننا نستخدم طريقة التقريب المتتالية في LPC2148.
3. BURST: يتم استخدام البت 16 لأسلوب التحويل BURST.
الإعداد 1: ستقوم ADC بالتحويل لجميع القنوات التي تم تحديدها في بتات SEL.
الإعداد 0: سيتم تعطيل وضع التحويل BURST.
4. CLCKS: يتم استخدام البتات من (17 إلى 19) ثلاث بتات لاختيار الدقة وعدد الساعات لتحويل A / D في وضع الاندفاع لأنه وضع تحويل A / D مستمر.
قيمة البتات (17 إلى 19) |
بت (دقة) |
لا من الساعة |
000 |
10 |
11 |
001 |
9 |
10 |
010 |
8 |
9 |
011 |
7 |
8 |
100 |
6 |
7 |
101 |
5 |
6 |
110 |
4 |
5 |
111 |
3 |
4 |
5. PDN: البتة 21 مخصصة لتحديد Power down Mode لـ ADC في LPC2148.
- A / D في وضع PDN.
- A / D في وضع التشغيل
6. START: البتات من (24 إلى 26) مخصصة لـ START. عندما يكون وضع التحويل BURST في وضع إيقاف التشغيل عن طريق ضبط 0 ، تكون وحدات بت START هذه مفيدة عند بدء تحويل A / D. يتم استخدام START للتحويل المتحكم فيه أيضًا. هذا عندما يكون هناك إدخال في CAP أو MAT pin من LPC2148 يبدأ A / D في التحويل. دعنا نتحقق من الجدول أدناه
قيمة البتات (24 إلى 26) |
دبوس من LPC2148 |
وظيفة ADC |
000 |
يستخدم لضبط ADC في وضع PDN لا ابدأ |
|
001 |
بدء تحويل A / D |
|
010 |
CAP0.2 / MAT0.2 |
بدء تحويل A / D على EDGE المحدد على السن 27 (صعود أو هبوط) على دبابيس CAP / MAT في LPC2148 |
011 |
CAP0.0 / MAT0.0 |
|
100 |
مات 0.1 |
|
101 |
مات 0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: إن 27 عشر بت لEDGE يستخدم فقط عندما يحتوي بت START 010-111. يبدأ التحويل عندما يكون هناك إدخال CAP أو MAT يمكنك رؤيته في الجدول أعلاه لذلك.
الإعداد : 0 - على حافة السقوط
1 - على حافة مرتفعة
ADxGDR: سجل البيانات العالمي لشركة ADC
AD0GDR & AD1GDR لقناة ADC 0 وقناة ADC 1 على التوالي.
وهو سجل 32 بت يحتوي على نتيجة تحويل A / D وأيضًا بت DONE الذي يشير إلى أن تحويل A / D قد تم. يشير الجدول أدناه إلى حقول البت لتسجيل ADGDR.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
منجز |
تجاوز |
محجوز |
CHN |
محجوز |
نتيجة |
محجوز |
1. النتيجة: تحتوي هذه البتات (6 إلى 15) على نتيجة تحويل A / D للقناة المحددة في سجل ADCR SEL. تتم قراءة القيمة فقط بعد اكتمال تحويل A / D ويتم الإشارة إلى ذلك بواسطة بت DONE.
مثال: بالنسبة لنتيجة ADC 10 بت ، تختلف القيمة المخزنة من (0 إلى 1023).
2. القناة: تحتوي هذه البتات من 24 إلى 26 على رقم القناة التي يتم من أجلها تحويل A / D. القيمة الرقمية المحولة موجودة في بت RESULT.
مثال: 000 لقناة ADC 0 و 001 لقناة ADC 1 ، إلخ
3. التجاوز: إن 30 ال يستخدم بعض الشيء لتجاوز في وضع الاندفاع. عند تعيين 1 ، يتم استبدال قيمة ADC المحولة السابقة بقيمة ADC المحولة حديثًا. عندما يتم قراءة السجل فإنه يمسح بت OVERRUN.
4. تم : البتة 31 للبت DONE.
مجموعة 1: عند اكتمال تحويل A / D.
ضبط 0: عندما تتم قراءة السجل وكتابة ADCR.
لقد رأينا عن السجلات الهامة التي يتم استخدامها في ADC في LPC2148. لنبدأ الآن في استخدام ADC في ARM7.
المكونات مطلوبة
المعدات
- متحكم ARM7-LPC2148
- 3.3V الجهد المنظم IC
- 5V منظم الجهد IC
- مقياس جهد 10 كيلو - عدد 2
- LED (أي لون)
- شاشة LCD (16X2)
- بطارية 9 فولت
- اللوح
- توصيل الأسلاك
البرمجيات
- Keil uVision5
- أداة ماجيك فلاش
مخطط الرسم البياني
يوضح الجدول أدناه توصيلات الدائرة بين LCD و ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16 × 2) |
ص 0.4 |
RS (اختيار التسجيل) |
P0.6 |
E (تمكين) |
ص 0.12 |
D4 (دبوس البيانات 4) |
ص 0.13 |
D5 (دبوس البيانات 5) |
ص 0.14 |
D6 (دبوس البيانات 6) |
ص 0.15 |
D7 (دبوس البيانات 7) |
تعرف على المزيد حول استخدام شاشة LCD مع ARM 7 - LPC2148.
هام: نحن هنا نستخدم مرحلتين منظمتين للجهد أحدهما لشاشة 5V LCD و 3.3 فولت آخر للإدخال التناظري والذي يمكن أن يتنوع بواسطة مقياس الجهد.
التوصيلات بين منظم جهد 5 فولت مع شاشة LCD و ARM7 Stick
5V منظم الجهد IC |
وظيفة الدبوس |
LCD و ARM-7 LPC2148 |
1. اليسار دبوس |
+ Ve من مدخلات البطارية 9 فولت |
NC |
2-مركز الدبوس |
- Ve من البطارية |
VSS ، R / W ، K لشاشات الكريستال السائل GND من ARM7 |
3. الدبوس الأيمن |
منظم + خرج 5 فولت |
VDD ، A من شاشات الكريستال السائل + 5V من ARM7 |
الجهد مع LCD
يستخدم مقياس الجهد لتغيير تباين شاشة LCD. وعاء به ثلاثة دبابيس ، الدبوس الأيسر (1) متصل بـ + 5 فولت والمركز (2) إلى VEE أو V0 من وحدة LCD والدبوس الأيمن (3) متصل بـ GND. يمكننا ضبط التباين عن طريق تدوير المقبض.
اتصال بين LPC2148 ومقياس جهد مع منظم جهد 3.3 فولت
3.3 فولت الجهد المنظم IC |
وظيفة الدبوس |
ARM-7 LPC2148 |
1. اليسار دبوس |
- Ve من البطارية |
دبوس GND |
2-مركز الدبوس |
منظم + خرج 3.3 فولت |
لإدخال مقياس الجهد وإخراج مقياس الجهد إلى P0.28 |
3. الدبوس الأيمن |
+ Ve من مدخلات البطارية 9 فولت |
NC |
برمجة ARM7-LPC2148 لـ ADC
لبرمجة ARM7-LPC2148 نحتاج إلى أداة keil uVision & Flash Magic. نحن نستخدم كابل USB لبرمجة ARM7 Stick عبر منفذ micro USB. نكتب رمزًا باستخدام Keil وننشئ ملفًا سداسيًا ثم يتم وميض ملف HEX إلى ARM7 باستخدام Flash Magic. لمعرفة المزيد حول تثبيت keil uVision و Flash Magic وكيفية استخدامهما ، اتبع الرابط Getting Started with ARM7 LPC2148 Microcontroller وبرمجته باستخدام Keil uVision.
في هذا البرنامج التعليمي ، نقوم بتحويل جهد الإدخال التناظري (0 إلى 3.3 فولت) إلى قيمة رقمية باستخدام ADC في LPC2148 وعرض الجهد التناظري على شاشة LCD (16 × 2). سيتم استخدام مقياس الجهد لتغيير الجهد التناظري للإدخال.
لمعرفة المزيد حول توصيل شاشة LCD بالوضع 4 بت ARM7-LPC2148 ، اتبع هذا الرابط.
يتم تقديم الكود الكامل لاستخدام ADC مع ARM 7 في نهاية هذا البرنامج التعليمي ، وهنا نوضح أجزاء قليلة منه.
الخطوات المتبعة في برمجة LPC2148-ADC
1. يُستخدم سجل PINSEL لتحديد دبوس المنفذ الخاص بـ LPC2148 ووظيفة ADC كمدخل تناظري.
PINSEL1 = 0x01000000 ؛ // حدد P0.28 كـ AD0.1
2. حدد دقة الساعة والبت للتحويل عن طريق كتابة القيمة إلى ADxCR (سجل التحكم ADC).
AD0CR = 0x00200402 ؛ // يعين عملية ADC على أنها 10 بت / 11 CLK للتحويل (000)
3. ابدأ التحويل بكتابة القيمة إلى وحدات بت START في ADxCR.
هنا كنت قد كتبت إلى 24 تشرين قليلا من AD0CR السجل.
AD0CR = AD0CR - (1 << 24) ؛
4. الآن علينا أن نتحقق من بت DONE (31) من ADxDRy المقابل (سجل بيانات ADC) حيث يتغير من 0 إلى 1. لذلك نستخدم حلقة while للتحقق باستمرار مما إذا كان التحويل قد تم على البت 31 من سجل البيانات.
بينما (! (AD0DR1 & 0x80000000)) ؛
5. بعد ضبط البت المنجز على 1 ، يكون التحويل ناجحًا ، ثم نقرأ النتيجة من نفس سجل بيانات ADC AD0DR1 ونخزن القيمة في متغير.
adcvalue = AD0DR1 ،
بعد ذلك ، نستخدم صيغة لتحويل القيمة الرقمية إلى جهد وتخزينها في جهد متغير يسمى.
الجهد = ((adcvalue / 1023.0) * 3.3) ؛
5. تُستخدم الأسطر التالية لعرض القيم الرقمية (من 0 إلى 1023) بعد التحويل من التناظرية إلى الرقمية.
adc = adcvalue ؛ sprintf (displayadc، "adcvalue =٪ f"، adc) ؛ LCD_DISPLAY (شاشة العرض) ؛ // عرض قيمة ADC (0 إلى 1023)
6. يتم استخدام الأسطر التالية لعرض الجهد التناظري للإدخال (من 0 إلى 3.3 فولت) بعد التحويل التناظري إلى الرقمي وبعد الخطوة 5.
LCD_SEND (0xC0) ، sprintf (voltvalue ، "الجهد =٪. 2f V" ، الجهد) ؛ LCD_DISPLAY (voltvalue) ؛ // العرض (إدخال الجهد التناظري)
7. الآن علينا أن نعرض جهد الدخل والقيم الرقمية على شاشة LCD. قبل ذلك ، يتعين علينا تهيئة شاشة LCD واستخدام الأوامر المناسبة لإرسال رسالة لعرضها.
يستخدم الرمز أدناه لتهيئة شاشة LCD
LCD_INITILIZE باطل (باطل) // وظيفة لتجهيز شاشة LCD { IO0DIR = 0x0000FFF0 ؛ // يعين الدبوس P0.12 ، P0.13 ، P0.14 ، P0.15 ، P0.4 ، P0.6 كـ OUTPUT delay_ms (20) ؛ LCD_SEND (0x02) ، // تهيئة شاشة LCD في وضع التشغيل ذي 4 بتات LCD_SEND (0x28) ؛ // 2 خطوط (16X2) LCD_SEND (0x0C) ؛ // العرض على المؤشر خارج LCD_SEND (0x06) ؛ // مؤشر الزيادة التلقائية LCD_SEND (0x01) ؛ // عرض واضح LCD_SEND (0x80) ؛ // الموضع الأول في السطر الأول }
يستخدم الرمز أدناه لعرض القيم على شاشة LCD
LCD_DISPLAY باطل (تشار * جي اس) وظيفة // لطباعة الأحرف أرسل واحدا تلو الآخر { uint8_t ط = 0؛ while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)) ؛ // يرسل IO0SET العلوي nibble = 0x00000050 ؛ // RS HIGH & ENABLE HIGH لطباعة البيانات IO0CLR = 0x00000020 ؛ // RW LOW كتابة الوضع delay_ms (2) ؛ IO0CLR = 0x00000040 ؛ // EN = 0 ، RS و RW دون تغيير (أي RS = 1 ، RW = 0) delay_ms (5) ؛ IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)) ؛ // يرسل IO0SET السفلي nibble = 0x00000050 ؛ // RS & EN HIGH IO0CLR = 0x00000020 ؛ delay_ms (2) ؛ IO0CLR = 0x00000040 ؛ delay_ms (5) ؛ أنا ++ ؛ } }
يتم استخدام الوظيفة أدناه لإنشاء تأخير
void delay_ms (uint16_t j) // وظيفة للتأخير بالميلي ثانية { uint16_t x، i؛ لـ (أنا = 0 ؛ أنا
كود كامل مع الفيديو التوضيحي أدناه.