draco

не работают аналоговые входы

16 сообщений в этой теме

draco    0

помогите, пожалуйста, решить мою проблему:

имеется arduino mega2560 (китайская)

после приобретения я работал только с цифровыми входами

 

сегодня решил сделать dc вольтметр, пришлось задействовать аналоговый вход

в процессе отладки выяснил, что на всех входах (проверял в цикле) постоянно значение 1023 (или 5v в зависимости от интерпретации кода) и при подаче напряжения и без

тестовое напряжение никогда не превышало 5в

 

что с платой, или что я делаю не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 436

А ты вход с общим проводом (GND) соедини. Если получишь ноль - значит, вход работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
draco    0

вариантов много...

вот из самого простого, кажется..

int analogPin = A0;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
}
void loop() {
  int rawReading = analogRead(analogPin);
  float volts = rawReading / 204.6;
  Serial.println(volts);
  delay(1000);
}

в экране монитора: 5.0 5.0 ...

подключал с ардуино на A0: 5v, 3.3v, gnd, все равно 5.0 5.0 ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 436

А измерьте-ка напряжение на AREF. 

И для полноты картины сделайте вывод просто полученных с АЦП данных, без пересчёта в вольты. То есть Serial.println(rawReading);

PS нашёл ошибку в скетче: 
int analogPin = A0; НЕПРАВИЛЬНО!
Правильно: int analogPin = 0;

PPS и хорошим тоном будет использовать для обзывания пина не переменную (памяти в ардуинке и так мало), а #define.

Изменено пользователем oldmao

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Загрузка...
draco    0

со всех входов данные выводил без пересчета в цикле - все постоянно 1023

напряжение в ближайшее время проверю

P.S. мультиметр не со мной еще дней 10 ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3d_killer    4

на сколько я пробовал аналоговые пины объявлять не нужно (по крайней мере в ардуино), без вот этого pinMode(A0, INPUT); должно работать, сталкивался с подобным, после объявления такая же ситуация была

#define in A0
void setup() {
  Serial.begin(9600);
}
void loop() {
  int rawReading = analogRead(in);
  float volts = rawReading / 204.6;
  Serial.println(volts);
  delay(1000);
}

 

Изменено пользователем 3d_killer

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
draco    0
В 15.12.2017 в 15:18, oldmao сказал:

А измерьте-ка напряжение на AREF. 

 

измерил между AREF и GND - 0v

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
draco    0

и?

11 минуту назад, oldmao сказал:

Вот и причина. 

что это означает, и возможно ли решение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 436

Разумеется! Смотрим, что там висит на AREF, затем читаем даташит на МК, как там включается внутренний образцовый источник или сколько можно подать от внешнего (обычно допускается до напряжения питания).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
draco    0

то есть, предлагаете подать внешнее опорное?

указание в коде параметров analogReference() не дает никакой разницы, ни при считывании analogRead(A0) (всегда 1023), ни при замере напр-я м/д aref / gnd (всегда 0)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
oldmao    1 436

Так приведите решение, чтобы другие на эти же грабли не наступали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Гость izakom
      Автор: Гость izakom
      Добрый день,
      Никак не могу, подключить АЦП к микроконтроллеру. Будет здраво, если кто-нибудь сможет подсказать где моя ошибка или хотя бы где ее искать.
      Я подключаю ADS1240 к arduino UNO. Описание АЦП слишком тяжелое, поэтому прикрепляю ссылку
      http://www.ti.com/lit/ds/sbas173f/sbas173f.pdf
      Также во вложении прикрепил 2 схемы подключения, которые побывал.
      Контроллер общается с АЦП по SPI, где D10 -SS, D11 - MOSI, D12 - MISO, D13 - SCLK.

      Сейчас моя задача, измерять напряжение на потенциометре с достаточной точностью. 
      К сожалению внутренний АЦП arduino 10 разрядный, поэтому пытаюсь подключить внешний.

      Также прикрепляю программу, при помощи которой пытаюсь снимать показания. Но к сожалению на контроллер приходит только "0".
      Схема_2.pdf
      Схема_1.pdf
      Тестова программа.txt
      Схема_2.pdf
      Схема_1.pdf
      Тестова программа.txt
    • Гость Роман
      Автор: Гость Роман
      Собираю диммер с использованием микроконтроллера ардуино по следующей схеме:

      Оптрон использую МОС3020. Диммер не заработал. Начал проверять мультиметром:
      1. На J1 входе напряжение 220В
      2. На t1 и t2 ножках симистора напряжение 220В
      3. С PC814 с ножек 3 - 4 напряжение есть (1.2В - 1.8В), это уходит в ардуино
      4. С ардуино на МОС3020 на ножки 1 - 2 тоже напряжение подается (1.2В - 1.8В). А вот уже с 4 - 6 ножки оптрона МОС3020 напряжение снять не могу

      Схема должна быть рабочей, потому что другие люди по ней вроде как собирают устройство. Пайку проверил, вроде все нормально припаял.
      Собственно у меня ряд вопросов:
      1. Можно ли как-то проверить оптрон без выпайки? Или нужно выпаивать и проверять?
      2. Правильно ли я локализировал проблему или мой ход мыслей вообще неправильный?
      3. Как вообще правильно проверять такие схемы, если что-то не работает?
    • Автор: St.Vicarius
      Сил моих нет!
      Идея: нажимаю кнопку - сервопривод поворачивается и зажигаются 4 светодиода.
      Реализация: Arduino mini pro прошито скетчем и оно работает так как задумано, т.е. когда нажимаю кнопочку, то крутится сервопривод, но диоды не зажигаются, хотя скетч рабочий. Проблема скорее всего в светодиодной конструкции.
      Подозрения: Сама светодиодная конструкция собрана так 
      <img src="http://cxem.net/calc_img/ledcalc/3229b2097055972050d15a8ab2b30433.png?1522782146"><br><a href="http://cxem.net/calc/ledcalc.php">Расчёт резистора светодиода</a> И ко всему этому я подключил транзистор кт815г. На базу транзистора идет сигнал от Ардуино. Я думал, что этот сигнал заставит транзистор "открыться" и пропустить ток от кроны к которой эти диоды подключены. Но нет, светодиоды не горят почему то.
      Сама схема из светодиодов без транзистора рабочая.
      Вопрос: Что же я неправильно сделал? Первый раз имею дело с транзистором. 
    • Автор: Alex_fish
      Здравствуйте.
      Захотел я посмотреть как на Arduino Uno (mega328P С кварцем на 16МГц) можно сделать простой генератор меандра, библиотечными digitalWrite() и delay() она начала привирать частоту гдето от 1-2кГц, решил написать на обычном Си.
      Взял таймер TIM1 с тактировкой от 16МГц с прерыванием по совпадению, и в прерывании обнулял счетчик и просто переключал ножку.
      interrupt [TIM1_COMPA] void timer1_compa_isr(void) { static unsigned char flag=0;//флаг лог. уровня пина TCNT1H=0x00;//обнуляем счетчик таймера TCNT1L=0x00; // Place your code here if (flag==0){ PORTB = 0x01;//лог 1 flag=1; } else { PORTB = 0x00;//лог 0 flag=0; } } Ожидал что работа с таймером и прерываниями отъест тактов 30-50, на отработку прерывания, заход и выход из него, один if и т.п. И будет у меня максимум килогерц 300 а дальше пойдет врать частоту.  Но был удивлен тем что такая система начала привирать частоту уже на 10кГц, где давала 9.7кГц, а на 20кГц уже показывала 19кГц. (проверял точность осцилом).
      Вот и вопрос неужели таймер с прерыванием настолько медленные ? или я что-то делаю не так ?
      Полный код на Си если нужно прикреплен.
       
      boroda.c
    • Автор: Вениамин Раков
      Здравствуйте, решил для себя написать библиотеку для создания меню. Иерархическое, с любой вложенностью и возможностью изменять переменные. В инете видел различные меню, но они меня не устроили, поэтому пишу сам. Здесь исходники на гитхабе. Пока разрабатываю без привязки к ардуино и конкретному дисплею поэтому все типы данных и т.д. нужно будет переделывать, но это уже потом, главное сейчас сделать само меню более или менее. Хочу услышать критику и пожелания, может я вообще не так делаю.