สารบัญ:
- ขั้นตอนที่ 1: ADC คืออะไร?
- ขั้นตอนที่ 2: ADC ทำงานอย่างไรใน AVR- ไมโครคอนโทรลเลอร์
- ขั้นตอนที่ 3: สูตรการแปลง ADC
- ขั้นตอนที่ 4: วิธีกำหนดค่า ADC ใน ATmega8
- ขั้นตอนที่ 5: การเลือก ADLAR
- ขั้นตอนที่ 6: การเลือก ADCSRA
- ขั้นตอนที่ 7: หากคุณต้องการรับค่า ADC คุณต้องทำงานให้เสร็จตามรายการด้านล่าง
- ขั้นตอนที่ 8: ตั้งค่า ADC
- ขั้นตอนที่ 9: กำหนดค่าขาออก LED Pin
- ขั้นตอนที่ 10: กำหนดค่าฮาร์ดแวร์ ADC
- ขั้นตอนที่ 11: เปิดใช้งาน ADC
- ขั้นตอนที่ 12: เริ่มการแปลงแอนะล็อกเป็นดิจิทัล
- ขั้นตอนที่ 13: ในขณะที่ตลอดไป
- ขั้นตอนที่ 14: ในตอนท้าย กรอกรหัสให้สมบูรณ์
วีดีโอ: บทนำสู่ ADC ในไมโครคอนโทรลเลอร์ AVR - สำหรับผู้เริ่มต้น: 14 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
ในบทช่วยสอนนี้ คุณจะรู้ทุกอย่างเกี่ยวกับ ADC ในไมโครคอนโทรลเลอร์ avr
ขั้นตอนที่ 1: ADC คืออะไร?
ADC หรือตัวแปลงอนาล็อกเป็นดิจิตอลช่วยให้สามารถแปลงแรงดันไฟฟ้าแอนะล็อกเป็นค่าดิจิทัลที่ไมโครคอนโทรลเลอร์สามารถใช้ได้ มีแหล่งสัญญาณแอนะล็อกมากมายที่อาจต้องการวัด มีเซ็นเซอร์แบบแอนะล็อกที่สามารถวัดอุณหภูมิ ความเข้มแสง ระยะทาง ตำแหน่ง และแรงได้ เป็นต้น
ขั้นตอนที่ 2: ADC ทำงานอย่างไรใน AVR- ไมโครคอนโทรลเลอร์
AVR ADC ช่วยให้ไมโครคอนโทรลเลอร์ AVR สามารถแปลงแรงดันไฟฟ้าแอนะล็อกเป็นค่าดิจิตอลโดยมีชิ้นส่วนภายนอกเพียงเล็กน้อยหรือไม่มีเลย ATmega8 มี ADC ประมาณ 10 บิตต่อเนื่องกัน ATmega8 มี ADC 7 ช่องสัญญาณที่ PortC ADC มีพินการจ่ายแรงดันอนาล็อกแยกต่างหาก AVCC AVCC ต้องไม่แตกต่างจาก VCC มากกว่า ± 0.3V.. แรงดันอ้างอิงอาจถูกแยกจากภายนอกที่พิน AREF AVCC ใช้เป็นข้อมูลอ้างอิงแรงดันไฟฟ้า นอกจากนี้ยังสามารถตั้งค่า ADC ให้ทำงานอย่างต่อเนื่อง (โหมดรันฟรี) หรือทำการแปลงเพียงครั้งเดียว
ขั้นตอนที่ 3: สูตรการแปลง ADC
โดยที่ Vin คือแรงดันไฟฟ้าบนพินอินพุตที่เลือกและ Vref การอ้างอิงแรงดันไฟฟ้าที่เลือก
ขั้นตอนที่ 4: วิธีกำหนดค่า ADC ใน ATmega8
Registers ต่อไปนี้ใช้สำหรับการนำ ADC ไปใช้ใน ATmega8
การเลือก ADC Multiplexer
ขั้นตอนที่ 5: การเลือก ADLAR
ADC Left Adjust Result บิต ADLAR มีผลกับการนำเสนอของผลการแปลง ADC ใน ADC Data Register เขียนหนึ่งไปที่ ADLAR เพื่อปรับผลลัพธ์ทางซ้าย มิฉะนั้นผลลัพธ์จะถูกปรับให้เหมาะสม
เมื่อการแปลง ADC เสร็จสมบูรณ์ จะพบผลลัพธ์ใน ADCH และ ADCL เมื่ออ่าน ADCL แล้ว ADC Data Register จะไม่อัปเดตจนกว่าจะอ่าน ADCH ดังนั้น หากผลลัพธ์ถูกปรับทิ้งไว้และไม่ต้องการความแม่นยำมากกว่า 8 บิต ก็เพียงพอที่จะอ่าน ADCH มิฉะนั้น ต้องอ่าน ADCL ก่อน จากนั้นจึงอ่าน ADCH Analog Channel Selection Bits ค่าของบิตเหล่านี้จะเลือกอินพุตแบบอะนาล็อกที่เชื่อมต่อกับ ADC
ขั้นตอนที่ 6: การเลือก ADCSRA
• บิต 7 – ADEN: ADC เปิดใช้งานการเขียนบิตนี้เป็นหนึ่งเพื่อเปิดใช้งาน ADC โดยการเขียนให้เป็นศูนย์ ADC จะถูกปิด
• บิต 6 – ADSC: ADC เริ่มการแปลง ในโหมด Single Conversion เขียนบิตนี้เป็นหนึ่งเพื่อเริ่มการแปลงแต่ละครั้ง ในโหมด Free Running เขียนบิตนี้เป็นหนึ่งเพื่อเริ่มการแปลงครั้งแรก
• Bit 5 – ADFR: ADC Free Running Select เมื่อบิตนี้ถูกตั้งค่า (หนึ่ง) ADC จะทำงานในโหมด Free Running ในโหมดนี้ ADC จะสุ่มตัวอย่างและอัปเดต Data Registers อย่างต่อเนื่อง การล้างบิตนี้ (ศูนย์) จะเป็นการยุติโหมด Free Running
• บิต 4 – ADIF: ADC Interrupt Flag บิตนี้ถูกตั้งค่าเมื่อการแปลง ADC เสร็จสิ้นและรีจิสเตอร์ข้อมูลได้รับการอัพเดต ADC Conversion Complete Interrupt จะดำเนินการหากมีการตั้งค่าบิต ADIE และ I-bit ใน SREG ADIF ถูกล้างโดยฮาร์ดแวร์เมื่อดำเนินการขัดจังหวะ Handling Vector ที่สอดคล้องกัน อีกทางหนึ่ง ADIF จะถูกล้างโดยการเขียนตรรกะไปที่แฟล็ก
• Bit 3 – ADIE: ADC Interrupt Enable เมื่อบิตนี้ถูกเขียนเป็นหนึ่งและตั้งค่า I-bit ใน SREG แล้ว ADC Conversion Complete Interrupt จะเปิดใช้งาน
• บิต 2:0 – ADPS2:0: ADC Prescaler Select Bits ตามแผ่นข้อมูล จำเป็นต้องตั้งค่าพรีสเกลาร์นี้เพื่อให้ความถี่อินพุต ADC อยู่ระหว่าง 50 KHz ถึง 200 KHz นาฬิกา ADC ได้มาจากนาฬิกาของระบบด้วยความช่วยเหลือของ ADPS2:0 บิตเหล่านี้จะกำหนดปัจจัยการแบ่งระหว่างความถี่ XTAL และนาฬิกาอินพุตไปยัง ADC
ขั้นตอนที่ 7: หากคุณต้องการรับค่า ADC คุณต้องทำงานให้เสร็จตามรายการด้านล่าง
- ตั้งค่า ADC
- กำหนดค่าเอาต์พุต LED pin
- กำหนดค่าฮาร์ดแวร์ ADC
- เปิดใช้งาน ADC
- เริ่มการแปลงแอนะล็อกเป็นดิจิทัล
- ในขณะที่ตลอดไป
ถ้าค่า ADC สูงขึ้น ให้ตั้งค่า เปิด LED ELSE ปิด LED
ขั้นตอนที่ 8: ตั้งค่า ADC
รหัส: uint8_t ADCValue =128;
ขั้นตอนที่ 9: กำหนดค่าขาออก LED Pin
รหัส: DDRB|= (1 << PB1);
ขั้นตอนที่ 10: กำหนดค่าฮาร์ดแวร์ ADC
กำหนดค่าฮาร์ดแวร์ ADC
ทำได้ผ่านการตั้งค่าบิตในรีจิสเตอร์ควบคุมสำหรับ ADC อันดับแรก มาตั้งค่าพรีสเกลาร์สำหรับ ADC กันก่อน ตามแผ่นข้อมูล จำเป็นต้องตั้งค่าพรีสเกลาร์นี้เพื่อให้ความถี่อินพุต ADC อยู่ระหว่าง 50 KHz ถึง 200 KHz นาฬิกา ADC ได้มาจากนาฬิกาของระบบ ด้วยความถี่ของระบบ 1MHz พรีสเกลเลอร์ 8 จะส่งผลให้ความถี่ ADC 125 Khz การปรับสเกลล่วงหน้าถูกกำหนดโดยบิต ADPS ในการลงทะเบียน ADCSRA ตามแผ่นข้อมูล ADPS2:0 บิตทั้งสามต้องตั้งค่าเป็น 011 เพื่อรับ 8 prescaler
รหัส: 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 โดยค่าเริ่มต้น ค่า ADC ที่ต่ำที่สุด 8 บิตจะพบใน 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 ให้ตั้งค่าบิต ADEN ใน ADCSRA:
รหัส: ADCSRA |= (1 << ADEN);
ขั้นตอนที่ 12: เริ่มการแปลงแอนะล็อกเป็นดิจิทัล
ในการเริ่มการวัด ADC จะต้องตั้งค่าบิต ADSC ใน ADCSRA:
รหัส: ADCSRA |= (1 << ADSC);
ณ จุดนี้ ADC จะเริ่มสุ่มตัวอย่างแรงดันไฟฟ้าที่แสดงบน ADC5 อย่างต่อเนื่อง รหัสถึงจุดนี้จะมีลักษณะดังนี้:
ขั้นตอนที่ 13: ในขณะที่ตลอดไป
สิ่งเดียวที่ต้องทำคือทดสอบค่า ADC และตั้งค่า LED ให้แสดงสถานะสูง/ต่ำ เนื่องจากการอ่านค่า ADC ใน ADCH มีค่าสูงสุด 255 ค่าทดสอบของ th จึงถูกเลือกเพื่อพิจารณาว่าแรงดันไฟฟ้าสูงหรือต่ำ คำสั่ง IF/ELSE อย่างง่ายใน FOR loops จะทำให้เราสามารถเปิดไฟ LED ที่ถูกต้องได้:
รหัส
ถ้า(ADCH >ADCValue)
{
PORTB |= (1 << PB0); // เปิด LED
}
อื่น
{
PORTB&= ~(1 << PB0); // ปิด LED
}
ขั้นตอนที่ 14: ในตอนท้าย กรอกรหัสให้สมบูรณ์
รหัส:
#รวม
int หลัก (เป็นโมฆะ)
{
uint8_t ADCValue =128;
DDRB |= (1 << PB0); // ตั้งค่า LED1 เป็นเอาต์พุต
ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ตั้งค่า ADC prescalar เป็น 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 << เอเดน); // เปิดใช้งาน ADC
ADCSRA |= (1 << ADSC); // เริ่มการแปลง A2D ในขณะที่ (1) // วนซ้ำตลอดไป
{
ถ้า (ADCH > ADCValue)
{
PORTB |= (1 << PB0); // เปิด LED1
}
อื่น
{
พอร์ต &= ~(1 << PB1); // ปิด LED1
}
}
กลับ 0;
}
เผยแพร่บทช่วยสอนนี้ก่อน คลิกที่นี่
แนะนำ:
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
บทนำสู่ Python: 9 ขั้นตอน
Intro to Python: Python เป็นภาษาการเขียนโปรแกรมคอมพิวเตอร์ที่มีประโยชน์และยืดหยุ่นมาก ซึ่งสร้างโดย Guido van Rossum Python ยังเป็นแอปพลิเคชั่นบน Raspberry Pi ที่แปลรหัสที่คุณเขียนเป็นสิ่งที่ Raspberry Pi สามารถเข้าใจและนำไปใช้ได้ เมื่อย
บทนำสู่ Unity3D: 27 ขั้นตอน
บทนำสู่ Unity3D: Unity3D Game Engine มอบกรอบการทำงานที่ยอดเยี่ยมสำหรับนักออกแบบเกมที่ต้องการ เช่น ตัวคุณเอง เพื่อสร้างระดับเกมที่น่าทึ่งและมีรายละเอียดโดยไม่ต้องเขียนโปรแกรมใดๆ เลย! คู่มือนี้จะแสดงคำแนะนำทีละขั้นตอนสำหรับการสร้าง
บทนำสู่ CloudX IDE V4.0: 10 ขั้นตอน
ข้อมูลเบื้องต้นเกี่ยวกับ CloudX IDE V4.0: นี่เป็นเวอร์ชันแรกของ CloudX Standalone IDE v4.0 ที่อนุญาตให้ผู้ใช้ทำโปรเจ็กต์ทั้งหมดได้ในสภาพแวดล้อมเดียว ต่างจากเวอร์ชันก่อนหน้าที่ผู้ใช้ยังคงต้องติดตั้งซอฟต์แวร์บุคคลที่สามอื่นๆ เช่น MPLABX IDE เป็นต้น ด้วย n
บทนำสู่ ESP32: 10 ขั้นตอน
บทนำสู่ ESP32: ในบทความนี้ เราจะพูดถึง ESP32 ซึ่งฉันคิดว่าเป็นพี่ชายของ ESP8266 ฉันชอบไมโครคอนโทรลเลอร์ตัวนี้มากเพราะมี WiFi เพื่อให้คุณมีไอเดีย ก่อนที่ ESP จะเกิดขึ้น หากคุณต้องการ Arduino เพื่อให้มี WiFi คุณจะต้อง