|
一、关于测量电压的问题
我想用来监控12V电池的电压值,监控显示的值应该是在arduinor的读取值范围内(0-1023)。 目前看到二种方案:
1、使用电阻分压方法测量的话。查了一些资料,应该是按这个电阻分压理论R1:R2=U1:U2来用。根据网上资料,知道Arduino的大多数板子,各脚引入电流极限值100ma,同时测量电压在0-5V,用analogRead(pin),读取值0-1023。那,我测量12V的电池,应该配置电阻分压的R1,R2为多少呢?
2、另外一种方案是想参照国外论坛上找到的一段代码(如下)。使用ADC7引脚(arduino定义脚名,atmel 328p是pin22)接330K的电阻后连接电池(二颗AAA电池,3V)的VCC。那,我测量12V电池,我配了电阻1.5M,读取的值为啥一直是1023呢?这个电阻应该是多少? 国外的这段代码如下:
void checkBattery() {
ADCSRA |= (1<<ADEN); // enable ADC
an_battery = analogRead(A7);
ADCSRA &= ~(1<<ADEN); // disable ADC
Serial.print("Battery: ");
Serial.println(an_battery);
}
二、在于timer2的设置
学习到这一段代码,见如下。请问我自己搭的板子用了atmel mega 328p 用了16mhz晶振,也就是做成了5V的arduino兼容板,已经成功写入bootloader。那么,如果我在程序中需要用到时钟2进行计数的话,这里的OCR2A=125,需要改为多少? 网上查询了一些资料,感觉还是没有完全懂,需要改吗?改多少?
// configure timer 2
TIMSK2 = 0; // Reset Timer/Counter2 Interrupt Mask Register
TCCR2A = 0; // Reset control registers
TCCR2B = 0;
TCCR2A |= (1 << WGM21); // Clear Timer on Compare Match (CTC) Mode
TCCR2B |= (1 << CS22); // Prescaler x64
OCR2A = 125; // roll over every 125/125,000 = 1 millisecond (with 8Mhz oscillator)
ASSR &= ~(1 << AS2); // Use system clock for Timer/Counter2
希望能得到高手的指点。谢谢! |
|