为什么我的 arduino 代码不能与 ATTINY44 一起工作

问题描述 投票:0回答:0

我有一个使用 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<

c avr adc attiny
© www.soinside.com 2019 - 2024. All rights reserved.