Arduino: ไขปัญหาการแปลงค่า analogRead() ไปเป็น voltage ว่าจะใช้ 1023 หรือ 1024

Post Reply
tong
Site Admin
Posts: 2386
Joined: Fri 01 May 2009 8:55 pm

Arduino: ไขปัญหาการแปลงค่า analogRead() ไปเป็น voltage ว่าจะใช้ 1023 หรือ 1024

Post by tong »

จาก datasheet ATmega328P
http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf
snap2997.png จากคำสั่ง analogRead() จะได้ค่า ADC อยู่ระหว่าง 0 - 1023 โดยที่

• 0x000 คือ Ground จะไม่นับเป็น 1 step
• 0x3FF คือค่าสูงสุดที่วัดได้ ซึ่งจะน้อยกว่า Vref อยู่ 1 step


จึงสรุปได้ดังนี้

1. การแปลงค่า ADC กลับไปเป็น Voltage จะต้องหารด้วย 1024 (ไม่ใช่ 1023)

Code: Select all

int level = analogRead(A1);
float voltage = level * (5.0 / 1024.0);
2. ค่าสูงสุดที่วัดได้จาก ADC จะเท่ากับ 1023 ซึ่งแปลงแล้วจะได้เท่ากับ 4.9951171875 volt

3. จำง่ายๆว่า Vref = 1024 = 5.0 volt เพียงแต่ ADC จะให้ค่าสูงสุดได้แค่ 1023 เพราะไบต์ไม่พอ
Post Reply