2021/04/21 (2021年04月 のアーカイブ)
Arduino Nano Every のADC入力を増やす
Arduino Nano の後継として Arduino Nano Every が発表されてからもう2年くらいですね。MCUが ATMega328P から ATMega4809 に変わり、安くなって性能も上がっているのですが、それほど使われてないですかね? レジスタ直叩きとかし始めると 328P との互換性が無いのがネックかも知れません。 でも ATMega4809 だから出来る事もあります。
と言う事で、ADC入力ピンを増やす例です。
注 : ATMega4809 ではなくピン数の少ない ATMega4808 を搭載した Arduino Nano Every の廉価版互換機も存在するようです。この手法は ATMega4809 でしか使用できません。
Arduino Nano では A0~A7 の 8本のピンをADC入力として使えますが、ATMega4809 では本来 16 本のピンを ADC 入力として使う事ができます。ただしその内の 1 本はピンとして引き出されていませんので、トータル 15 本のピンをA0~A14として使う事が可能です。
なお、A9 (D13) ピンは Arduino 内部で LED に繋がっているのでちゃんとは使えないかも知れません。
ソースは下の通り。A8~A14 に対して pinMode を入力にして、analogRead4809() を呼べば A0~A7 に対する analogRead() と同様にアナログ値を読む事ができます。括弧内の (AIN7) 等は 4809 のピン機能の名前です。
Arduino Nano ベースで作っていて ADC 入力の本数が足りない、と言う場合には便利かも知れないのでメモ。
/* ARDUINO-NANO-EVERY ADC Pins
*
* ___________________
* (AIN10) A9 |D13 |____| D12| A10 (AIN9)
* |3V3 D11| A11 (AIN8)
* (AIN7) A8 |AREF(D39) D10|
* (AIN3) |A0 (D14) D9|
* (AIN2) |A1 (D15) D8| A12 (AIN11)
* (AIN1) |A2 (D16) D7|
* (AIN0) |A3 (D17) D6| A13 (AIN14)
* (AIN12) |A4 (D18) D5|
* (AIN13) |A5 (D19) D4|
* (AIN4) |A6 (D20) D3| A14 (AIN15)
* (AIN5) |A7 (D21) D2|
* |5V GND|
* |RES RES|
* |GND RX|
* |VIN TX|
* ~~~~~~~~~~~~~~~~~~~
*/
#define A8 (39)
#define A9 (13)
#define A10 (12)
#define A11 (11)
#define A12 (8)
#define A13 (6)
#define A14 (3)
int analogRead4809(int pin){
static uint8_t aintab[] = {15,0,0,14,0,11,0,0,8,9,10,3,2,1,0,12,13,4,5};
int ain = 0;
if(pin==39) ain = 7;
else if(pin>=3 && pin<22)
ain = aintab[pin-3];
if(ain==0)
return 0;
ADC0.MUXPOS = ain;
ADC0.COMMAND = 1;
while(!(ADC0.INTFLAGS & ADC_RESRDY_bm))
;
return ADC0.RES;
}
void setup() {
Serial.begin(9600);
pinMode(A8,INPUT);
pinMode(A9,INPUT);
pinMode(A10,INPUT);
}
void loop() {
int a8val = analogRead4809(A8);
Serial.print("A8 :");
Serial.println(a8val, DEC);
int a9val = analogRead4809(A9);
Serial.print("A9 :");
Serial.println(a9val, DEC);
int a10val = analogRead4809(A10);
Serial.print("A10 :");
Serial.println(a10val, DEC);
delay(1000);
}
Posted by g200kg : 2021/04/21 08:29:37