ผลต่างระหว่างรุ่นของ "การวัดสัญญาณแอนะล็อกด้วยไมโครคอนโทรลเลอร์"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 10: แถว 10:
 
  uint16_t read_adc(uint8_t channel)
 
  uint16_t read_adc(uint8_t channel)
 
  {
 
  {
     ADMUX = 0x40;
+
     ADMUX = 0b01000000; // เลือกใช้แรงดันอ้างอิงจากขา AREF
     ADMUX |= channel;
+
     ADMUX |= channel;   // ตั้ง MUX ให้ชี้ไปยัง channel
     ADCSRA = 0xC6;
+
     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

สัญญาณแอนะล็อกและการบันทึกค่า

ตัวอย่างสัญญาณแอนะล็อก
การบันทึกข้อมูลแบบดิจิทัล 2 ระดับ (1 บิต)
การบันทึกข้อมูลแบบดิจิทัล 1024 ระดับ (10 บิต)

การอ่านสัญญาณแอนะล็อก

ใช้ฟังก์ชันต่อไปนี้ในการอ่านสัญญาณแอนะล็อกจากขาของพอร์ท 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) เท่านั้น