Очень странное поведение АЦП. Задача -- считывать показания нескольких потенциометров и пересылать их в другую плату (FPGA). Начал с повторения примера
www.arduino.cc/en/Tutorial/AnalogInOutSerial
Однако возникли сложности -- диод все время мигает с частотой примерно 3Гц, ровно как и на последовательный порт приходят значения, изменяющиеся от нуля до 1023 и обратно
Показания консоли COM-порта
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 52. output = 12
sensor = 51. output = 12
sensor = 99. output = 24
sensor = 193. output = 48
sensor = 322. output = 80
sensor = 467. output = 116
sensor = 576. output = 143
sensor = 684. output = 170
sensor = 814. output = 202
sensor = 916. output = 228
sensor = 1023. output = 255
sensor = 1023. output = 255
sensor = 1023. output = 255
sensor = 1023. output = 255
sensor = 929. output = 231
sensor = 778. output = 193
sensor = 603. output = 150
sensor = 295. output = 73
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
Замечу, что потенциометр при этом не вращаю.
Попробовал повторить эксперимент с другими портами -- одно и то же. Решил подключить порт к земле -- к моему удивлению картина повторилась. Подключение к питанию через 220Ом резистор дал такой же результат.
Однако, если на вход АЦП ничего не подключать -- выводится какой-то шум (примерно sensor = 300 ± 100). Подскажите, в чем может быть проблема, пока я не начал изгонять демонов из платы.
P.S. Года два назад ровно этот же пример работал как и ожидается, т.е. корректно.
Кодconst int analogInPin = A4; // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
int a2 = 0;
int a3 = 0;
int a4 = 0;
int a5 = 0;
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
}
void loop() {
// read the analog in value:
sensorValue = analogRead(A1);
a2 = analogRead(A2);
a3 = analogRead(A3);
a4 = analogRead(A4);
a5 = analogRead(A5);
outputValue = map(sensorValue, 0, 1023, 0, 255);
analogWrite(analogOutPin, outputValue);
// print the results to the serial monitor:
Serial.print("a2 = " );
Serial.print(a2);
Serial.print("\t a3 = ");
Serial.print(a3);
Serial.print("\t a4 = ");
Serial.print(a4);
Serial.print("\t a5 = ");
Serial.println(a5);
delay(100);
}
Выход консоли (табы съехали)a2 = 160. a3 = 0. a4 = 0. a5 = 0
a2 = 92. a3 = 0. a4 = 0. a5 = 0
a2 = 64. a3 = 0. a4 = 0. a5 = 0
a2 = 55. a3 = 0. a4 = 0. a5 = 0
a2 = 90. a3 = 75. a4 = 90. a5 = 99
a2 = 207. a3 = 340. a4 = 381. a5 = 425
a2 = 550. a3 = 934. a4 = 983. a5 = 1023
a2 = 766. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 877. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 928. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 919. a3 = 953. a4 = 935. a5 = 920
a2 = 797. a3 = 696. a4 = 665. a5 = 631
a2 = 490. a3 = 179. a4 = 132. a5 = 85
a2 = 247. a3 = 6. a4 = 0. a5 = 0
a2 = 135. a3 = 0. a4 = 0. a5 = 0
a2 = 84. a3 = 0. a4 = 0. a5 = 0
a2 = 63. a3 = 0. a4 = 0. a5 = 0
a2 = 59. a3 = 0. a4 = 9. a5 = 25
a2 = 114. a3 = 129. a4 = 143. a5 = 158
a2 = 306. a3 = 519. a4 = 564. a5 = 610
a2 = 664. a3 = 1001. a4 = 1023. a5 = 1023
a2 = 823. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 904. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 936. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 884. a3 = 874. a4 = 854. a5 = 834
a2 = 727. a3 = 560. a4 = 539. a5 = 498
a2 = 406. a3 = 74. a4 = 33. a5 = 0
a2 = 212. a3 = 0. a4 = 0. a5 = 0
a2 = 120. a3 = 0. a4 = 0. a5 = 0
a2 = 79. a3 = 0. a4 = 0. a5 = 0
a2 = 68. a3 = 0. a4 = 0. a5 = 0