Задать вопрос
@kahi4

Почему АЦП возвращает синусоиду?

Очень странное поведение АЦП. Задача -- считывать показания нескольких потенциометров и пересылать их в другую плату (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. Года два назад ровно этот же пример работал как и ожидается, т.е. корректно.

Схема
3a359f396944454ab30e622c680973e1.png
В железе
33e2d08c34d8421cad675f4408a019c2.jpg
Код
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

  • Вопрос задан
  • 452 просмотра
Подписаться 2 Комментировать
Подписчики вопроса 2 К ответам на вопрос (2)