ผลต่างระหว่างรุ่นของ "การวัดสัญญาณแอนะล็อกด้วยไมโครคอนโทรลเลอร์"
ไปยังการนำทาง
ไปยังการค้นหา
Chaiporn (คุย | มีส่วนร่วม) |
Chaiporn (คุย | มีส่วนร่วม) |
||
| แถว 10: | แถว 10: | ||
uint16_t read_adc(uint8_t channel) | uint16_t read_adc(uint8_t channel) | ||
{ | { | ||
| − | ADMUX = | + | ADMUX = 0b01000000; // เลือกใช้แรงดันอ้างอิงจากขา AREF |
| − | ADMUX |= channel; | + | ADMUX |= channel; // ตั้ง MUX ให้ชี้ไปยัง channel |
| − | ADCSRA = | + | ADCSRA = 0b11000110; |
| − | while ((ADCSRA & (1<<ADSC))) | + | // || -+- |
| + | // || | | ||
| + | // || +-> ปรับคล็อกของ ADC ให้เป็น 1/64 ของคล็อกระบบ | ||
| + | // |+->เริ่มแปลงค่าแอนะล็อกเป็นดิจิทัล | ||
| + | // | | ||
| + | // +-> Enable ADC | ||
| + | |||
| + | while ((ADCSRA & (1<<ADSC))) // รอจนบิต ADSC (บิต 6) กลายเป็น 0 | ||
; | ; | ||
| − | return ADCL + ADCH*256; | + | return ADCL + ADCH*256; // ผลลัพธ์ถูกเก็บอยู่ในรีจีสเตอร์ ADCL และ ADCH |
} | } | ||
ไมโครคอนโทรลเลอร์เบอร์ ATMega168 รุ่นที่เป็นขา DIP 28 ขานั้นสามารถประมวลผลอินพุทที่เป็นสัญญาณแอนะล็อกผ่านทางขา ADC0 ถึง ADC5 (ซึ่งคือขา PC0 ถึง PC5) เท่านั้น | ไมโครคอนโทรลเลอร์เบอร์ ATMega168 รุ่นที่เป็นขา DIP 28 ขานั้นสามารถประมวลผลอินพุทที่เป็นสัญญาณแอนะล็อกผ่านทางขา ADC0 ถึง ADC5 (ซึ่งคือขา PC0 ถึง PC5) เท่านั้น | ||
รุ่นแก้ไขเมื่อ 15:21, 16 สิงหาคม 2552
สัญญาณแอนะล็อกและการบันทึกค่า
การอ่านสัญญาณแอนะล็อก
ใช้ฟังก์ชันต่อไปนี้ในการอ่านสัญญาณแอนะล็อกจากขาของพอร์ท C โดยระบุหมายเลขขาเป็นพารามิเตอร์ของฟังก์ชัน
uint16_t read_adc(uint8_t channel)
{
ADMUX = 0b01000000; // เลือกใช้แรงดันอ้างอิงจากขา AREF
ADMUX |= channel; // ตั้ง MUX ให้ชี้ไปยัง channel
ADCSRA = 0b11000110;
// || -+- // || | // || +-> ปรับคล็อกของ ADC ให้เป็น 1/64 ของคล็อกระบบ // |+->เริ่มแปลงค่าแอนะล็อกเป็นดิจิทัล // | // +-> Enable ADC
while ((ADCSRA & (1<<ADSC))) // รอจนบิต ADSC (บิต 6) กลายเป็น 0
;
return ADCL + ADCH*256; // ผลลัพธ์ถูกเก็บอยู่ในรีจีสเตอร์ ADCL และ ADCH
}
ไมโครคอนโทรลเลอร์เบอร์ ATMega168 รุ่นที่เป็นขา DIP 28 ขานั้นสามารถประมวลผลอินพุทที่เป็นสัญญาณแอนะล็อกผ่านทางขา ADC0 ถึง ADC5 (ซึ่งคือขา PC0 ถึง PC5) เท่านั้น


