- מה זה 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 בגודל 16x2 לאחר המרה אנלוגית לדיגיטלית. אז נתחיל בהקדמה קצרה על ADC.
מה זה ADC?
כאמור קודם ADC מייצג המרה אנלוגית לדיגיטלית והוא משמש להמרת ערכים אנלוגיים מהעולם האמיתי לערכים דיגיטליים כמו 1 ו 0. אז מהם הערכים האנלוגיים האלה? אלה הם אלה שאנו רואים בחיי היום יום שלנו כמו טמפרטורה, מהירות, בהירות וכו '. פרמטרים אלה נמדדים כמתחים אנלוגיים על ידי חיישנים בהתאמה ואז ערכים אנלוגיים אלה מומרים לערכים דיגיטליים עבור מיקרו-בקרים.
נניח כי טווח ה- ADC שלנו הוא בין 0 וולט ל -3.3 וולט ויש לנו ADC של 10 סיביות פירוש הדבר שמתח הכניסה שלנו 0-3.3 וולט יחולק ל -1024 רמות של ערכים אנלוגיים נפרדים (2 10 = 1024). המשמעות 1024 היא הרזולוציה עבור ADC של 10 סיביות, בדומה לרזולוציית ADC של 8 סיביות תהיה 512 (28) ולרזולוציית ADC של 16 סיביות תהיה 65,536 (216). ל- LPC2148 יש את ADC ברזולוציית 10 סיביות.
עם זאת, אם מתח הכניסה בפועל הוא 0V אז ה- ADC של ה- MCU יקרא אותו כ- 0 ואם הוא 3.3V ה- MCU יקרא 1024 ואם זה נמצא בין לבין כמו 1.65v אז ה- MCU יקרא 512. נוכל להשתמש בהמשך נוסחאות לחישוב הערך הדיגיטלי שיקרא ה- MCU בהתבסס על רזולוציית ה- ADC ומתח ההפעלה.
(רזולוציית ADC / מתח הפעלה) = (ערך דיגיטלי של ADC / ערך מתח בפועל)
כמו למשל אם מתח ייחוס הוא 3v:
הסברנו את ADC בפירוט במאמר הקודם.
ADC ב- ARM7-LPC2148
- ה- LPC2148 מכיל שני ממירים אנלוגיים לדיגיטליים.
- ממירים אלה הם אנלוגי קירוב יחיד ברציף של 10 סיביות לממירים דיגיטליים.
- בעוד ש- ADC0 כולל שישה ערוצים, ל- ADC1 שמונה ערוצים.
- לכן המספר הכולל של תשומות ADC הזמינות עבור LPC2148 הוא 14.
- הוא ממיר מתח כניסה בטווח של (0 עד 3.3V) בלבד. אסור שהוא יעלה על 3.3 וולט של התייחסות המתח. מכיוון שהוא יפגע ב- IC וגם יספק ערכים לא בטוחים.
תכונה חשובה כלשהי של ADC ב- LPC2148
- כל ממיר המסוגל לבצע יותר מ -400,000 דגימות של 10 סיביות בשנייה.
- לכל קלט אנלוגי יש רישום תוצאה ייעודי להפחתת תקורה של הפרעות.
- מצב המרת פרץ לכניסות בודדות או מרובות.
- המרה אופציונאלית במעבר על סיכת קלט או אות התאמה לטיימר.
- פקודה התחל גלובלית לשני הממירים.
בדוק גם כיצד להשתמש ב- ADC במיקרו-בקרים אחרים:
- כיצד להשתמש ב- ADC ב- Arduino Uno?
- ממשק ADC0808 עם מיקרו-בקר 8051
- באמצעות מודול ADC של מיקרו-בקר PIC
- מדריך ADC לפטל פטל
- כיצד להשתמש ב- ADC ב- MSP430G2 - מדידת מתח אנלוגי
- כיצד להשתמש ב- ADC ב- STM32F103C8
סיכות ADC ב- ARM7-LPC2148
כאמור earliar, ב- ARM7-LPC2148 ישנם שני ערוצים ADC0 עם 6 סיכות כניסה אנלוגיות ו- ADC1 עם 8 סיכות כניסה אנלוגיות. אז לגמרי יש 14 פינים לכניסות אנלוגיות. התרשים שלהלן מציג את הפינים הזמינים לקלט אנלוגי.
מכיוון שסיכות הכניסה של ADC מרובות עם פינים אחרים של GPIO. עלינו לאפשר אותם על ידי הגדרת התצורה של PINSEL לבחירת פונקציית ADC.
הטבלה שלהלן מציגה סיכות של ADC וערוץ ADC מכובד ב- LPC2148. AD0 הוא ערוץ 0 ו- AD1 הוא ערוץ 1
LPC2148 פין |
ערוץ ADC לא |
P0.28 |
AD0.1 |
P0.29 |
AD0.2 |
P0.30 |
AD0.3 |
P0.25 |
AD0.4 |
P0.4 |
AD0.6 |
P0.5 |
AD0.7 |
P0.6 |
AD1.0 |
P0.8 |
AD1.1 |
P0.10 |
AD1.2 |
P0.12 |
AD1.3 |
P0.13 |
AD1.4 |
P0.15 |
AD1.5 |
P0.21 |
AD1.6 |
P0.22 |
AD1.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 Peripheral Bus) מחולק לערך זה בתוספת אחד כדי לייצר את השעון הנדרש עבור ממיר ה- 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 נועדה לבחירת מצב כיבוי של ADC ב- LPC2148.
- A / D נמצא במצב PDN.
- A / D נמצא במצב תפעולי
6. START: הביטים מ (24 עד 26) מיועדים ל- START. כאשר מצב ההמרה BURST כבוי על ידי הגדרת 0, סיביות START אלה שימושיות למועד התחלת ההמרה A / D. START משמש גם להמרה מבוקרת בקצה. זה כאשר יש קלט בסיכה CAP או MAT של 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 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111 |
MAT1.1 |
7. EDGE: הסיבית ה -27 מיועדת ל- EDGE משמשת רק כאשר סיבית ה- START מכילה 010-111. זה מתחיל להמרה כשיש קלט CAP או MAT, אתה יכול לראות את הטבלה לעיל לשם כך.
הגדרה : 0 - On Falling Edge
1 - בקצה העולה
ADxGDR: רישום הנתונים הגלובלי של ADC
AD0GDR ו- AD1GDR עבור ערוץ ADC 0 וערוץ 1 ADC בהתאמה.
זהו רישום של 32 סיביות המכיל את התוצאה של המרת A / D וגם את ה- DONE ביט שמעיד על ביצוע המרת A / D. הטבלה שלהלן מציינת את שדות הסיביות לרישום ADGDR.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
בוצע |
OUNRUN |
שמורות |
CHN |
שמורות |
תוֹצָאָה |
שמורות |
1. תוצאה: ביטים אלה (6 עד 15) מכילים את התוצאה של המרת A / D עבור הערוץ שנבחר במרשם ה- ADCR SEL. הערך נקרא רק לאחר השלמת ההמרה A / D וזה מצוין על ידי סיבית DONE.
דוגמא: לתוצאה של 10 סיביות ADC הערך המאוחסן משתנה בין (0 ל -1023).
2. ערוץ: סיביות 24 עד 26 אלה מכילות את מספר הערוץ שבגינו מתבצעת המרת A / D. הערך הדיגיטלי המומר קיים ב- RESULT ביט.
דוגמה: 000 מיועד לערוץ ADC 0 ו- 001 הוא לערוץ ADC 1 וכו '
3. OVERRUN: ביט ה -30 עבור OVERRUN משמש במצב BURST. כאשר הוא מוגדר 1, ערך ה- ADC הקודם המומר מוחלף על ידי ערך ה- ADC שהומר לאחרונה. כשקוראים את הרישום הוא מנקה את ביט ה- OVERRUN.
4. DONE: הביט ה -31 מיועד לסיבית DONE.
סט 1: לאחר סיום המרת A / D.
סט 0: כאשר הקריאה נקראת וכתיבת ADCR.
ראינו אודות הרשמים החשובים המשמשים ב- ADC ב- LPC2148. עכשיו נתחיל להשתמש ב- ADC ב- ARM7.
רכיבים נדרשים
חוּמרָה
- מיקרו-בקר ARM7-LPC2148
- ויסות מתח 3.3V IC
- ויסות מתח 5V IC
- פוטנציומטר 10K - 2 מס '
- LED (בכל צבע)
- תצוגת LCD (16X2)
- סוללה 9V
- קרש לחם
- חוטי חיבור
תוֹכנָה
- Keil uVision5
- כלי פלאש קסם
תרשים מעגל
הטבלה שלהלן מציגה את חיבורי המעגל בין LCD ו- ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (בחר הרשמה) |
P0.6 |
E (אפשר) |
P0.12 |
D4 (סיכת נתונים 4) |
P0.13 |
D5 (סיכת נתונים 5) |
P0.14 |
D6 (סיכת נתונים 6) |
P0.15 |
D7 (סיכת נתונים 7) |
למידע נוסף על שימוש ב- LCD עם ARM 7 - LPC2148.
חשוב: כאן אנו משתמשים בשני מעגלי ויסות מתח אחד עבור תצוגת LCD 5V ועוד 3.3V עבור קלט אנלוגי אשר ניתן לגוון באמצעות פוטנציומטר.
חיבורים בין וסת מתח 5V עם LCD & ARM7 מקל
ויסות מתח 5V IC |
פונקציית סיכה |
LCD & ARM-7 LPC2148 |
1. סיכה שמאלית |
+ Ve מהסוללה 9V קלט |
NC |
2. מרכז סיכה |
- Ve מהסוללה |
VSS, R / W, K של LCD GND של ARM7 |
3. סיכה ימנית |
פלט מוסדר + 5 וולט |
VDD, A של LCD + 5V של ARM7 |
פוטנציומטר עם LCD
פוטנציומטר משמש לשינוי הניגודיות של תצוגת LCD. לסיר שלושה פינים, סיכה שמאלית (1) מחוברת ל + 5 V ומרכז (2) ל- VEE או V0 של מודול LCD וסיכה ימנית (3) מחוברת ל- GND. אנו יכולים להתאים את הניגודיות על ידי סיבוב הכפתור.
חיבור בין LPC2148 לפוטנציומטר עם ויסות מתח 3.3V
ויסות מתח 3.3V IC |
פונקציית סיכה |
ARM-7 LPC2148 |
1. סיכה שמאלית |
- Ve מהסוללה |
סיכה של GND |
2. מרכז סיכה |
תפוקה מוסדרת + 3.3 וולט |
לפוטנציומטר קלט ופלט פוטנציומטר ל- P0.28 |
3. סיכה ימנית |
+ Ve מהסוללה 9V קלט |
NC |
תכנות ARM7-LPC2148 עבור ADC
כדי לתכנת ARM7-LPC2148 אנו זקוקים לכלי uVision & Flash Magic. אנו משתמשים בכבל USB לתכנות ARM7 Stick באמצעות יציאת מיקרו USB. אנו כותבים קוד באמצעות Keil ויוצרים קובץ hex ואז קובץ HEX מהבהב למקל ARM7 באמצעות Flash Magic. למידע נוסף אודות התקנת keil uVision ו- Flash Magic וכיצד להשתמש בהן עקבו אחר הקישור תחילת העבודה עם ARM7 LPC2148 Microcontroller ותכנתו באמצעות Keil uVision.
במדריך זה אנו ממירים את מתח הכניסה האנלוגי (0 עד 3.3V) לערך דיגיטלי באמצעות ADC ב- LPC2148 ומציגים את המתח האנלוגי בתצוגת LCD (16x2). פוטנציומטר ישמש כדי לשנות את מתח האנלוגי הקלט.
למידע נוסף על ממשק 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 th קצת קופת AD0CR.
AD0CR = AD0CR - (1 << 24);
4. כעת עלינו לבדוק את ה- DONE ביט (31) של ADxDRy המתאים (רישום נתוני ADC) כשהוא משתנה מ- 0 ל -1. לכן אנו משתמשים תוך כדי לולאה כדי לבדוק כל הזמן אם ההמרה מתבצעת בסיבית ה- 31 של רישום הנתונים.
בעוד (! (AD0DR1 & 0x80000000));
5. לאחר שה Bit done מוגדר ל- 1, ההמרה מצליחה, לאחר מכן אנו קוראים את התוצאה מאותו רישום נתוני ADC AD0DR1 ושומרים את הערך במשתנה.
adcvalue = AD0DR1;
בשלב הבא אנו משתמשים בנוסחה להמרת הערך הדיגיטלי למתח ואחסון במשתנה בשם מתח .
מתח = ((adcvalue / 1023.0) * 3.3);
5. השורות הבאות משמשות להצגת ערכים דיגיטליים (0 עד 1023) לאחר המרה אנלוגית לדיגיטלית.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // הצג ערך ADC (0 עד 1023)
6. השורות הבאות משמשות להצגת מתח אנלוגי קלט (0 עד 3.3 וולט) לאחר המרה אנלוגית לדיגיטלית ולאחר שלב 5.
LCD_SEND (0xC0); sprintf (מתח מתח, "מתח =%. 2f V", מתח); LCD_DISPLAY (מתח מתח); // תצוגה (מתח אנלוגי קלט)
7. כעת עלינו להציג את מתח הכניסה ואת הערכים הדיגיטליים בתצוגת ה- LCD. לפני כן עלינו לאתחל את תצוגת ה- LCD ולהשתמש בפקודות מתאימות לשליחת הודעה לתצוגה.
הקוד שלמטה משמש לאתחול ה- LCD
בטל LCD_INITILIZE (בטל) // פונקציה להכנת LCD { IO0DIR = 0x0000FFF0; // מגדיר את הסיכה P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 כעכב OUTPUT עיכוב_מס (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 ומבוטל (char * msg) // פונקציה להדפיס את הדמויות שלחה אחד אחד { uint8_t i = 0; בעוד (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // שולח את הנשנוש העליון IO0SET = 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 = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; עיכוב_מס (2); IO0CLR = 0x00000040; עיכוב_מס (5); i ++; } }
הפונקציה שלמטה משמשת ליצירת עיכוב
חלל עיכוב_מס (uint16_t j) // פונקציה לביצוע עיכוב באלפיות שנייה { uint16_t x, i; עבור (i = 0; i
הקוד השלם עם סרטון הדגמה מופיע להלן.