Глюк с функцией analogRead.

apix05
Offline
Зарегистрирован: 16.01.2015

Всем добрый день/вечер/ночь/утро.

Проектирую малюсенькое устройство на базе  Arduino Pro Mini 5V. Для ввода настроек и навигации использую "клавиатуру" - +5V как общая шина - на кнопки, с кнопок через резистры на аналоговый вход A0. Использую подтяжку к земле через 10kOm.

Далее смотрю какое значение прочитала функция analogRead с пина A0 и определяю какая кнопка нажата.

При программировании и отладке (девайс подключен к буку через усбасп) - все работало отлично. Когда настал черед запихивать все в коробочку - был подсоединен зарядник от телефона (5В, 500 мА) к пинам GND и VCC. После подачи питания - ничего не заработало - дисплейчик начал периодически моргать.

замерил питание - оказалось 6 Вольт - переподключил с VCC на RAW.

все равно не завелось - методом исключения определил что как программа доходит до строки :

int raw = analogRead(A0);

и происходит ребут.

 

Кто нибудь может объяснить происходящее и как исправить ?

Спасибо.

prepodavatel
Offline
Зарегистрирован: 07.02.2014

А, не может возникать проблема из-за опорного напряжения для AnalogRead? Посмотрите пожалуйста функцию AnalogReference()? Мне с таким не приходилось сталкиваться. Я с Pro Mini не сталкивался, но на других у меня такого не бывало.

apix05
Offline
Зарегистрирован: 16.01.2015

у меня вся схема разработана на +5В, и опорное тоже +5В (это DEFAULT у AnalogReference).

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

6 для VCC - много , для RAW - мало.....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

+ зарядника через 4...5  диодов 1N4001 на VCC....

зарядник и должен выдавать больше :) , в отличие от блока питания

prepodavatel
Offline
Зарегистрирован: 07.02.2014

А, напряжение с адаптера идет без "всплесков" - в адаптере есть хоть какой нибудь сглаживающий выходной электролитический конденсатор? С другим адаптером пробовали? Попробуйте подать постоянное напряжение с 4 пальчиковых батареек (те же 6 вольт или около того). Там точно будет напряжение без импульсов. Просто адаптеры бывают разные - стандартные на базе понижающего трансформатора и причудливые на базе RC (сопротивления + неэлектролитические конденсаторы) цепочки ("жрут" крайне мало, но на выходе идет не ровный уровень напряжения) как в светодиодных лампах.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

apix05 пишет:

у меня вся схема разработана на +5В, и опорное тоже +5В (это DEFAULT у AnalogReference).

вот и используйте БП , а не ЗУ :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

prepodavatel пишет:

А, напряжение с адаптера идет без "всплесков" - в адаптере есть хоть какой нибудь сглаживающий выходной электролитический конденсатор? С другим адаптером пробовали? Попробуйте подать постоянное напряжение с 4 пальчиковых батареек (те же 6 вольт или около того). Там точно будет напряжение без импульсов. Просто адаптеры бывают разные - стандартные на базе понижающего трансформатора и причудливые на базе RC (сопротивления + неэлектролитические конденсаторы) цепочки ("жрут" крайне мало, но на выходе идет не ровный уровень напряжения) как в светодиодных лампах.

в ЗУ сильно сглаживать нет надобности.... в телефоне есть контроллер зарядки и сама АКБ - это большоооооой электролит , типа

prepodavatel
Offline
Зарегистрирован: 07.02.2014

У меня бывало так, что по ошибке, подавал вместо 5 вольт 8 вольт, ничего всё потом работало! Вероятнее вся проблема из-за адаптера.

prepodavatel
Offline
Зарегистрирован: 07.02.2014

И я о том же - адаптер и зарядник - разные схемы.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

8 на VСС ?????????????! какой стойкий у вас МК :)

prepodavatel
Offline
Зарегистрирован: 07.02.2014

Nano. Я вначале мысленно с ним распрощался, а переподключил, все работает до сих пор!

prepodavatel
Offline
Зарегистрирован: 07.02.2014

Я 5 вольт подал не на VCC на на 5В. Вот в чем чудо!

prepodavatel
Offline
Зарегистрирован: 07.02.2014

Ошибся, имею в виду 8 вольт

apix05
Offline
Зарегистрирован: 16.01.2015

как это связано с тем что если закомментировать строку analogRead -то все прекрасно работает?

от батареек - тоже самое.

prepodavatel
Offline
Зарегистрирован: 07.02.2014

Ого! Вот это вопрос! Помяряйте тестером выходное напряжение с клавиатуры на входе A0 и если потребуется поставьте делитель напряжения на сопротивлениях (понизьте напряжение на входе A0 в половину).

prepodavatel
Offline
Зарегистрирован: 07.02.2014

А, контакт GND не отскочил на клавиатуре?

prepodavatel
Offline
Зарегистрирован: 07.02.2014

Попробуйте подключить к клавиатуре выход с платы 5 или 3,3 вольта

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а от программатора-то - работает ? и дайте код сюда, чё на пальцах рассуждать ?

apix05
Offline
Зарегистрирован: 16.01.2015

"зарядник" - проверенный (работал в другом проекте более полугода - без нареканий).

выход "зарядника" идет только на RAW и GND ардуины. все остальные подключены к VCC и GND. напряжение между VCC и GND  - 5 - 5.1 В.

apix05
Offline
Зарегистрирован: 16.01.2015

код :

,..
int kbdpin = 14; // или A0
...
void setup() {
  ...  
  pinmode(kbdpin,INPUT);   
  lcd.init();
  delay(500);   
}

void loop(){
  int raw = analogRead(kbdpin); // - вот здесь контроллер уходит в ребут
  ... дальше программа работает нормально если закомментировать analogRead
  ...
}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

весь код нужен !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

SU-27-16 пишет:

а от программатора-то - работает ?

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

А с другого пина считать (не с А0) - тоже самое будет?

axill
Offline
Зарегистрирован: 05.09.2011

ну сложно представить чтобы именно из за analogRead МК рестартовывал, эта операция никак не влияет на состояние выходов и не меняет энергопотребление в такой степени

что-то здесь не так как понимает автор. Конечно после экзекуции 8-мью вольтами МК может вести себя совершенно обиженно и не так как должен, но тем не менее, надо изучить ситуацию. Закоментировать analogRead и прогнать разные тесты с миганием светодиодами и выводом данных в Serial чтобы убедиться что МК работает. Лучше под это дело сделать совершенно новый скетч. Еще как вариант взять из примеров скетч по работе с analogRead и проверить как он работает

prepodavatel
Offline
Зарегистрирован: 07.02.2014

Нет, мой Nano МК после 8 вольт чудненько работает!!!

axill
Offline
Зарегистрирован: 05.09.2011

Тогда о чем речь, если все работает?

prepodavatel
Offline
Зарегистрирован: 07.02.2014

axil, вы вероятно путаете меня с пользователем "apix05". Это у него проблема, а у меня ее нет

axill
Offline
Зарегистрирован: 05.09.2011

Зачем отвечаете?) вам с 8 вольтами повезло, но это не значит, что ему с 6 повезло

apix05
Offline
Зарегистрирован: 16.01.2015

представить конечно сложно - но именно так и происходит.

контроллер уходит в перезагрузку именно на строке analogRead(A0);

если с порта А0 не считывать - то контроллер ведет себя как живой (отрабатывает всю программу: выводит на ЖК температуру и влажность, и от их зависимости включает/выключает релюшки).

думаю проблема в том что портик A0 выгорел (при первом подключении к внешнему питанию + запаял на VCC, а там 6В оказалось. перепаял на RAW), нужно попробовать на другом аналоговом входе.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

apix05 пишет:
нужно попробовать на другом аналоговом входе.

Я это выше и спрашивал...

apix05
Offline
Зарегистрирован: 16.01.2015

блин, но от питания USB все работает то как нужно ..., значит порт живой...

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

apix05, в вашем вопросе из 1 поста уже содержалось 90% ответа. Сколько вам нужно ещё сделать экспериментов, что бы понять, что БП неисправен? ))

apix05
Offline
Зарегистрирован: 16.01.2015

как влияет строка analogRead на блок питания - с ней не работает, а с закоменченой все работает исправно.

этот блок питания трудился более полугода, питая атмегу 328 и 20 RGB светодиодов...

с батарейкой (кроной) тоже самое происходит... 

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

АЦП при чтении пина из-за плохого питания сходит с ума и тянет за собой весь камень.... Питание решает всё !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ПроМини и Наны - особенно привередливые в плане питания...

axill
Offline
Зарегистрирован: 05.09.2011

SU-27-16 пишет:

АЦП при чтении пина из-за плохого питания сходит с ума и тянет за собой весь камень.... Питание решает всё !

ну это врядли, только если камень уже полумертвый

что то автор от нас скрывает) если исключить убитый камень то analogRead вообще не при чем. Стоит попробовать другой аналоговый пин, стоит попробовать стандартный пример с analgRead. Впрочем я уже повторяюсь, я об этом писал

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

apix05, просто попробуйте с  другим исправным БП. Конечно сам ацп потребляет меньше миллиампера, но если например у него поджарился mux(мультиплексор),  то при включении ацп потребление может вырастать в разы. Напряжение просядет, а Brown-out Detector запустит перезагрузку. Это как вариант объяснения природы глюка. Осциллографом тут на 5 минут диагностики...

apix05
Offline
Зарегистрирован: 16.01.2015

поменял блок питания (использовал +5В от компьютерного блока питания). результат тот же. перезагрузка на analogRead. при том что при подключении через usb - работает... попробовал другой аналоговый вход - не работает. осциллографа к сожалению нет. 

решил проблему путем замены платы :)