תוכן עניינים:

היכרות עם ADC במיקרו -בקר AVR - למתחילים: 14 שלבים
היכרות עם ADC במיקרו -בקר AVR - למתחילים: 14 שלבים

וִידֵאוֹ: היכרות עם ADC במיקרו -בקר AVR - למתחילים: 14 שלבים

וִידֵאוֹ: היכרות עם ADC במיקרו -בקר AVR - למתחילים: 14 שלבים
וִידֵאוֹ: כלכלה שיעור 1 חלק א 2024, נוֹבֶמבֶּר
Anonim
היכרות עם ADC במיקרו -בקר AVR | למתחילים
היכרות עם ADC במיקרו -בקר AVR | למתחילים

במדריך זה תדעו הכל ADC במיקרו -בקר AVR

שלב 1: מהו ADC?

ממיר ADC, או אנלוגי לדיגיטל, מאפשר להמיר מתח אנלוגי לערך דיגיטלי שניתן להשתמש בו על ידי מיקרו. ישנם מקורות רבים לאותות אנלוגיים שאולי תרצה למדוד. ישנם חיישנים אנלוגיים הזמינים למדידת טמפרטורה, עוצמת אור, מרחק, מיקום וכוח, רק כדי לציין כמה.

שלב 2: כיצד פועל ADC ב- AVR-Microcontroller

ה- AVR ADC מאפשר לבקר ה- AVR להמיר מתחים אנלוגיים לערכים דיגיטליים ללא מעט חלקים חיצוניים. ATmega8 כולל ADC קירוב רצוף של 10 סיביות. ATmega8 כולל ADC של 7 ערוצים ב- PortC. ל- ADC יש סיכת מתח אספקה אנלוגית נפרדת, AVCC. אסור ש- AVCC יבדל יותר מ- ± 0.3V מ- VCC. ניתן להפנות את התייחסות המתח חיצונית לפין AREF. AVCC משמש כהפניה למתח. ניתן להגדיר את ה- ADC לפעול באופן רציף (מצב הפעלה חופשית) או לבצע המרה אחת בלבד.

שלב 3: נוסחת המרת ADC

נוסחת המרת ADC
נוסחת המרת ADC

כאשר Vin הוא המתח על פין הקלט הנבחר ו- Vref הפניה למתח שנבחר

שלב 4: כיצד להגדיר את ADC ב- ATmega8?

כיצד להגדיר את ADC ב- ATmega8?
כיצד להגדיר את ADC ב- ATmega8?

הרשמים הבאים משמשים ליישום ADC ב- ATmega8

בחירת מרבב ADC

שלב 5: בחירת ADLAR

בחירת ADLAR
בחירת ADLAR
בחירת ADLAR
בחירת ADLAR

ADC שמאל התוצאה התוצאה ביט ה- ADLAR משפיע על הצגת תוצאת ההמרה של ADC ברשם הנתונים של ADC. כתוב אחד ל- ADLAR לשמאל התאם את התוצאה. אחרת, התוצאה מותאמת נכון

כאשר המרת ADC הושלמה, התוצאה נמצאת ב- ADCH ו- ADCL כאשר קוראים ADCL, רשם הנתונים של ADC אינו מתעדכן עד קריאת ADCH. כתוצאה מכך, אם התוצאה נשארת מותאמת ונדרשת לא יותר מ 8 סיביות דיוק, די לקרוא ADCH. אחרת, יש לקרוא את ADCL תחילה ולאחר מכן ADCH. ביטים לבחירת ערוצים אנלוגיים הערך של סיביות אלה בוחר אילו כניסות אנלוגיות מחוברות ל- ADC.

שלב 6: בחירת ADCSRA

בחירת ADCSRA
בחירת ADCSRA
בחירת ADCSRA
בחירת ADCSRA

• ביט 7 - ADEN: אפשר ADC כתיבת ביט זה לאחד מאפשרת את ה- ADC. על ידי כתיבתו לאפס, ה- ADC כבוי

• ביט 6 - ADSC: התחלת המרה ב- ADC במצב המרה בודדת, כתוב ביט זה לאחד כדי להתחיל כל המרה. במצב הפעלה חופשית, כתוב ביט זה לאחד כדי להתחיל את ההמרה הראשונה.

• ביט 5 - ADFR: ריצה חופשית ADC בחר כאשר ביט זה מוגדר (אחד) ה- ADC פועל במצב הפעלה חופשית. במצב זה, ה- ADC מדגם ומעדכן את רשימות הנתונים באופן רציף. ניקוי ביט זה (אפס) יסתיים מצב הפעלה חופשית.

• ביט 4 - ADIF: ADC Interrupt Flag ביט זה נקבע בעת השלמת המרת ADC ורשימות הנתונים מתעדכנות. הפרעה מלאה להמרת ADC מתבצעת אם מוגדרים סיבי ה- ADIE ו- I-bit ב- SREG. ADIF מוסר על ידי חומרה בעת ביצוע וקטור הטיפול בהפסקה המתאים. לחלופין, ADIF מוסר על ידי כתיבה של הגיון לדגל.

• ביט 3-ADIE: הפסק ADC הפסק כאשר ביט זה נכתב לאחד וה- I-bit ב- SREG מוגדר, הפרעת ADC המרה מלאה מופעלת.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Select Bits בהתאם לגליון הנתונים, יש להגדיר את מדד זה כך שתדר הכניסה של ADC יהיה בין 50 KHz ל- 200 KHz. שעון ה- ADC נגזר משעון המערכת בעזרת ADPS2: 0 סיביות אלה קובעות את גורם החלוקה בין תדר XTAL לבין שעון הקלט ל- ADC.

שלב 7: אם אתה רוצה לקחת ערך ADC אתה צריך עבודה כלשהי המפורטת להלן

  • הגדר ערך ADC
  • הגדר את סיכת LED הפלט
  • הגדר את חומרת ה- ADC
  • אפשר ADC
  • התחל המרות אנלוגיות לדיגיטליות
  • WILE לנצח

אם ערך ADC גבוה יותר ואז הגדר ערך, הפעל נורית LED אחרת כיבוי נורית

שלב 8: הגדר ערך ADC

קוד: uint8_t ADCValue = 128;

שלב 9: הגדר את סיכת LED הפלט

קוד: DDRB | = (1 << PB1);

שלב 10: הגדר את חומרת ה- ADC

הגדר את חומרת ה- ADC

זה נעשה באמצעות הגדרת סיביות ברשמי הבקרה של ה- ADC. ראשית, בואו נקבע את הערך הקדם -תווני ל- ADC. על פי גיליון הנתונים, יש להגדיר את הסדרן הזה כך שתדר הכניסה של ADC יהיה בין 50 KHz ל- 200 KHz. שעון ה- ADC נגזר משעון המערכת. עם תדר מערכת של 1 מגה -הרץ, מסדרון של 8 יוביל לתדר ADC של 125 קילו -הרץ. הגודל המוגדר מראש נקבע על ידי סיביות ADPS ברשם ADCSRA. על פי גליון הנתונים, כל שלושת הביטים של ADPS2: 0 חייבים להיות מוגדרים ל -011 כדי לקבל את 8 המקלחות.

קוד: ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

לאחר מכן, בוא נקבע את מתח ההתייחסות ל- ADC. זה נשלט על ידי סיביות REFS ברשם ADMUX. להלן קובע את מתח ההתייחסות ל- AVCC.

קוד: ADMUX | = (1 << REFS0);

כדי להגדיר את הערוץ המועבר דרך המרבב ל- ADC, יש להגדיר את סיביות ה- MUX ברשם ADMUX בהתאם. מכיוון שאנו משתמשים ב- ADC5 כאן

קוד: ADMUX & = 0xF0; ADMUX | = 5;

על מנת להכניס את ה- ADC למצב הפעלה חופשית, הגדר את ביט ה- ADFR בשם הראוי ברשם ADCSRA:

קוד: ADCSRA | = (1 << ADFR);

שינוי אחרון בהגדרות ייעשה כדי להפוך את קריאת ערך ה- ADC לפשוטה יותר. למרות של- ADC יש רזולוציה של 10 סיביות, מידע רב זה לרוב אינו נחוץ. ערך זה של 10 סיביות מפוצל על פני שני רגיסטרים של 8 סיביות, ADCH ו- ADCL. כברירת מחדל, 8 הסיביות הנמוכות מערך ADC נמצאות ב- ADCL, כאשר השניים העליונים הם שני הביטים הנמוכים ביותר של ADCH. על ידי הגדרת ביט ADLAR ברשם ADMUX, נוכל ליישר את הערך ADC שמאלה. זה מכניס את 8 הסיביות הגבוהות ביותר של המדידה לרשום ADCH, והיתר במרשם ה- ADCL. אם לאחר מכן נקרא את רשם ADCH, נקבל ערך של 8 סיביות המייצג את מדידת 0 עד 5 וולט שלנו כמספר מ -0 עד 255. אנחנו בעצם הופכים את מדידת ה- ADC של 10 סיביות לאחת של 8 ביט. להלן הקוד להגדרת ביט ה- ADLAR:

קוד:

ADMUX | = (1 << ADLAR); זה משלים את ההתקנה של חומרת ADC עבור דוגמה זו. יש להגדיר עוד שני סיביות לפני שה- ADC יתחיל לבצע מדידות.

שלב 11: אפשר ADC

כדי להפעיל את ה- ADC, הגדר את bit ADEN ב- ADCSRA:

קוד: ADCSRA | = (1 << ADEN);

שלב 12: התחל המרות אנלוגיות לדיגיטליות

כדי להתחיל את מדידות ה- ADC, יש להגדיר את ביט ה- ADSC ב- ADCSRA:

קוד: ADCSRA | = (1 << ADSC);

בשלב זה, ה- ADC יתחיל לדגום ברציפות את המתח המוצג ב- ADC5. הקוד עד לנקודה זו ייראה כך:

שלב 13: WHILE לנצח

הדבר היחיד שנותר לעשות הוא לבדוק את ערך ה- ADC ולהגדיר את נוריות ה- LED שיציגו אינדיקציה גבוהה / נמוכה. מכיוון שלקריאת ADC ב- ADCH יש ערך מרבי של 255, ערך הבדיקה של th נבחר כדי לקבוע אם המתח גבוה או נמוך. הצהרת IF/ELSE פשוטה בלולאות FOR תאפשר לנו להדליק את הנורית הנכונה:

קוד

אם (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // הדלק LED

}

אַחֵר

{

PORTB & = ~ (1 << PB0); // כבה את ה- LED

}

שלב 14: בסוף קוד מלא

קוד:

#לִכלוֹל

int main (void)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // הגדר את LED1 כפלט

ADCSRA | = (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // הגדר ADC טרום -מדד ל- 8 - // 125KHz קצב דגימה 1MHz

ADMUX | = (1 << REFS0); // הגדר הפניה ל- ADC ל- AVCC

ADMUX | = (1 << ADLAR); // שמאל את התוצאה של ADC כדי לאפשר קריאה קלה של 8 סיביות

ADMUX & = 0xF0;

ADMUX | = 5; // יש לשנות ערכי MUX לשימוש ADC0

ADCSRA | = (1 << ADFR); // הגדר ADC למצב ריצה חופשית

ADCSRA | = (1 << ADEN); // אפשר ADC

ADCSRA | = (1 << ADSC); // התחל המרות A2D תוך (1) // לולאה לנצח

{

אם (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // הפעל את LED1

}

אַחֵר

{

פורט & = ~ (1 << PB1); // כבה את LED1

}

}

החזר 0;

}

פרסם תחילה הדרכה זו לחץ כאן

מוּמלָץ: