我有一个使用 1.1Vref (ATTINY44 IC) 的代码。我已将一个传感器连接到它,现在我想读取传感器的值。请检查下面的代码。
#include <SoftwareSerial.h>
int led = 7;
#define rx 1
#define tx 0
SoftwareSerial serial (rx,tx);
void setup() {
pinMode (rx, INPUT);
pinMode (tx, OUTPUT);
serial.begin (9600);
pinMode (led, OUTPUT);
analogReference (INTERNAL);
}
void loop() {
float voltage = (analogRead(2)/1023*(1.1)*(5.7));
ADCSRB = (0<<ADLAR);
int ADC_value = ADCL | (ADCH<<8);
serial.print ("solar panel voltage");
serial.println(ADC_value);
delay(1000);
if (ADC_value>=1023){
digitalWrite (led, HIGH);
}
else{
digitalWrite (led, LOW);
}
}
此代码与 arduino 完美配合,我在室外阳光下进行了测试,结果还不错。问题是,当我将此代码传输到 attiny IC 时,它不起作用或通过向其添加以下代码以相反的方式工作:
ADCSRB = (1<<ADLAR);
int ADC_value = ADCL | (ADCH<<8);
将 8 位数据移至 ADCH,其余两位移至 ADCL 寄存器。
当 IC 读数为“0v”时,LED 亮起。
我认为问题可能出在 analogRead 函数上,所以,我尝试创建另一个代码。
#include <avr/io.h>
#include <SoftwareSerial.h>
int led = 7;
#define rx 1
#define tx 0
int analogDATA;
SoftwareSerial serial (rx,tx);
void setup() {
pinMode (rx, INPUT);
pinMode (tx, OUTPUT);
serial.begin (9600);
pinMode (led, OUTPUT);
//analogReference (INTERNAL);
ADMUX|= (1<<REFS1); // setting 1.1 IRV
ADMUX|=(1<<MUX1); //setting ADC2 input
ADMUX|=(1<<ADLAR);
ADCSRA|=(1<<ADEN);
}
void loop() {
ADCSRA|= (1<<ADSC);
float voltage = (analogRead(PA2)/1023*(1.1)*(5.7));
//ADCSRB = (1<<ADLAR);
//int ADC_value = ADCL | (ADCH<<8);
analogDATA = ADCH;
serial.print ("solar panel voltage");
serial.println(ADCH);
delay(1000);
if (ADCH>=1023){
digitalWrite (led, HIGH);
}
else{
digitalWrite (led, LOW);
}
}
我不知道如何读取mux寄存器。我知道命令 analogRead(1<