НЕ могу понять что происходит
- Войдите на сайт для отправки комментариев
Доброго времени суток. Непонятная для меня ситуация.
имеется плата, на которой есть 4 перемычки. ПОдключены они к аналоговым входам.
jp1=A1
jp2=A2
jp3=A3
jp4=A4
при наличии перемычки на вход соответствующего пина ардуины поступает напряжение питания.
Мне нужн отслеживать просто наличие либо отсутствие этой самой перемычки. т.е. 0 (перемычка отсутствует), либо 1 (перемычка присутствует).
Инициализирую пины как цифровые входы
pinMode(15, INPUT);
pinMode(16, INPUT);
pinMode(17, INPUT);
pinMode(18, INPUT);
но по команде digitalRead они все выдают 1 независимо от наличия либо отсутствия перемычки. Тут конечно я немного неверно сделал, нужно было привязать входы к земле резистором на 10К, как сделал с кнопками. Но платы уже готовы, поэтому в железе я не могу это сделать.
Решил измерять через напряжение и переводить результат в логику. Обозначил входы как аналоговые
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(A4, INPUT);
Но опять же по команде AnalogRead они всегда выдают почему то 4095
вот код
[code] [code] int jp1; int jp2; int jp3; int jp4; int jp5; void setup() { pinMode(A1, INPUT); pinMode(A2, INPUT); pinMode(A3, INPUT); pinMode(A4, INPUT); pinMode(A0, INPUT); Serial.begin(9600); } void loop() { jp1=analogRead(A1); jp2=analogRead(A2); jp3=analogRead(A3); jp4=analogRead(A4); jp5=analogRead(A0); Serial.print ("jp1 "); Serial.println (jp1); delay(500); Serial.print ("jp2 "); Serial.println (jp2); delay(500); Serial.print ("jp3 "); Serial.println (jp3); delay(500); Serial.print ("jp4 "); Serial.println (jp4); delay(500); Serial.print ("jp5 "); Serial.println (jp5); delay(500); } [/code] [/code]
выдает такое вот
при этом обратите внимание на пин A0, который у меня на плате соединен вообще с активным базером. В данной фотке я последовательно подключаю перемычку на входы, но меняется лишь значение пина A0. Причем при замыкании разных перемычек - у каждой свое значение при чтении пина A0.
плата WEMOS IX
шью как мини-про мини. ТОлько выставляю ее как атмега 328Р 3,3В 8 мГц. Потому что временные рамки у нее свои. При такой прошивке они ближе к реальности (где то в три раза длиннее реала. То есть делай 300 близок к 1 секунде)
Что может быть? Как мне снять логические 1 или 0 по наличию перемычек с этих входов?
да, может подскажете как задать настройки таймера, чтобы 1000 мс были в реальности 1 секундой
Если пин болтается в воздухе, то считываться может в е что угодно. Обязательно нужна подтяжка. Так что или подтягивай пины к земле. Или переподключи пермычки с питания на землю и включи внутренние подтягивающие резисторы.
да, может подскажете как задать настройки таймера, чтобы 1000 мс были в реальности 1 секундой
С другой стороны, с чисто математической точки зрения 1000 мс - это всегда 1 с. По крайней мере до тех пор, пока "1000" мы считаем десятичной записью числа. И от настроек таймера это никак не зависит.
"Подтянуть" входы в нужное состояние можно при помощи внутренних резисторов
Вместо просто INPUT при инициализации пина попробуйте использовать INPUT_PULLUP или INPUT_PULLOUT
"Подтянуть" входы в нужное состояние можно при помощи внутренних резисторов
Вместо просто INPUT при инициализации пина попробуйте использовать INPUT_PULLUP или INPUT_PULLOUT
У атмеги328 нету внутреннего pull-down-а.
У атмеги328 нету внутреннего pull-down-а.
платы уже готовы, поэтому в железе я не могу это сделать.
а потому что надо было сначала отладить на макетке, а потом платы заказывать.
Думаю, что ничего стращного - можно добавить нужные перемычки навесным монтажом, уверен. что ничего сложного в этом нет.
я когда делал программу на Uno - 1000 в таймере было равно 1 секунде. Возможно там не 1.0000 секунда а 1.0001 = мне не принципиально. Но когда я залил программу уже в готовые платы у меня почему то 1000 стала = не 1ой секунде а 3м секундам. Как бы оно не сказать что критично - просто сделать поправку и ввести уточненные для этой платы данные. Но это в готовом уже окончательном варианте программы хорошо. А при наладке не совсем удобно пользоваться постоянно переводным коэффициентом, когда таймеров несколько десятков.
я когда делал программу на Uno - 1000 в таймере было равно 1 секунде. Возможно там не 1.0000 секунда а 1.0001 = мне не принципиально. Но когда я залил программу уже в готовые платы у меня почему то 1000 стала = не 1ой секунде а 3м секундам.
вовсем виноваты фьюзы с делителями
с этим я согласен, но в данный момент я не могу этого сделать, так как платы уже готовы.
Непонятно мне другое. Когда отрабатывал перемычку 4 (она первая понадобилась), я после долгого секса и вообще уже тестирования аналоговых входов всех, написал в инициализации и чтении вход 0, как бы в ардуине есть свой вход 0 и правильнее было написать А). Но фишка в том что перемычка 4 заработала именно когда я поставил чтение с порта 0.
Заработала четко, протестировал ее более 50 раз - абсолютный результат. И далее уже в программе при отработке уверенно работала. Хотя перемычка 4 физически подключена на А4.
а потому что надо было сначала отладить на макетке, а потом платы заказывать.
Думаю, что ничего стращного - можно добавить нужные перемычки навесным монтажом, уверен. что ничего сложного в этом нет.
Чтобы отработать на макетке, нужна была полная номенклатура комплектующих. А их ждать месяц. Потом еще платы месяц. итого много времени теряется. Да и в любом случае пока не отработаешь на печатных платах никогда не будешь уверен, что все 100% рабочее. Даже после макетки. У меня к примеру кнопки разнесены были на небольшую величину. А по фактупластиковые накладки на кнопку получились с ободком 1 мм, 2 кнопки рядом - уже 2 мм.. И не смотря на то, что ставил большие кнопки 12 мм - получился небольшой нахлест.
Навесным монтажом можно сделать все) но это некрасиво, это нетоварная позиция. Это колхоз. Будем думать как сделать без подтяжки. Почему то же перемычка 4 если обращаюсь (почему то) к пину А0 - четко определяется
Сделано снятие через аналог и перевод в логический так
Потому как если спрашивать его как цифровой вход и командой digitalRead, то выдает всегда 1
вовсем виноваты фьюзы с делителями
вот я испрашиваю) как сделать). Как то в свое время, когда начинал изучать ардуинку пару месяцев назад - на обучающем видео парень рассказывал как выставить делители предделители под себя - мол он всегда выставляет. Но я тогда забил на это, думаю зачем. Прекрасно в Uno работает таймер по умолчанию. Сейчас не могу найти.
Так бы я сейчас настроил таймер под себя, на этой плате и 1000 была бы равно 1000, я так понимаю.
У атмеги328 нету внутреннего pull-down-а.
вроде как подтягивающий резистор подключается простой командой digitalWrite(pin,HIGH). При условии что вход инициализирован как аналоговый вход.
Я так делал, но абсолютно ничего не поменялось
ардуинка у меня такая на данном релизе плат
https://ru.aliexpress.com/item/TTGO-XI-8F328P-U-arduino-nano-V3-0-promini/32947390528.html?spm=a2g0s.12269583.0.0.56be26e8oxwfEY
но это первая и последняя партейка.
для следующих заказал на пробу обычные Nano с резонатором
https://ru.aliexpress.com/item/Freeshipping-Nano-3-0-controller-compatible-for-arduino-nano-CH340-USB-driver-NO-CABLE/32341832857.html?spm=a2g0s.9042311.0.0.274233edlwwbnA
Посмотрим как они себя поведут.
П.С. вот как выглядит сама плата. Перемычки - внизу
колхоз ни колхоз, а ничего другого как тянуть пины резисторами к нулю я не вижу
я попробую притянуть резисторами, посмотрю что это даст. Уж очень стабильная и сильная наводка мне кажется. Почему то когда делал на А0, то там гуляют показания до 2000 тысяч. И они таки гуляют именно - что свойственно наводке. А тут четко 4095
я попробую притянуть резисторами, посмотрю что это даст. Уж очень стабильная и сильная наводка мне кажется. Почему то когда делал на А0, то там гуляют показания до 2000 тысяч. И они таки гуляют именно - что свойственно наводке. А тут четко 4095
может при разводке платы ошиблись? - и на пины у вас напряжение питания приходит...
У атмеги328 нету внутреннего pull-down-а.
вроде как подтягивающий резистор подключается простой командой digitalWrite(pin,HIGH). При условии что вход инициализирован как аналоговый вход.
Я так делал, но абсолютно ничего не поменялось
ардуинка у меня такая на данном релизе плат
https://ru.aliexpress.com/item/TTGO-XI-8F328P-U-arduino-nano-V3-0-promini/32947390528.html?spm=a2g0s.12269583.0.0.56be26e8oxwfEY
но это первая и последняя партейка.
для следующих заказал на пробу обычные Nano с резонатором
https://ru.aliexpress.com/item/Freeshipping-Nano-3-0-controller-compatible-for-arduino-nano-CH340-USB-driver-NO-CABLE/32341832857.html?spm=a2g0s.9042311.0.0.274233edlwwbnA
Посмотрим как они себя поведут.
П.С. вот как выглядит сама плата. Перемычки - внизу
Ну так это совсем другое дело, тогда вам тут почитать )))
Да и плату выбирать правильно!
вовсем виноваты фьюзы с делителями
У ТС клон меги где фьюзов , вроде как, нет.
я попробую притянуть резисторами, посмотрю что это даст. Уж очень стабильная и сильная наводка мне кажется. Почему то когда делал на А0, то там гуляют показания до 2000 тысяч. И они таки гуляют именно - что свойственно наводке. А тут четко 4095
может при разводке платы ошиблись? - и на пины у вас напряжение питания приходит...
нет, все верно
я попробую притянуть резисторами, посмотрю что это даст.
Да уж давно попробовали бы. Там дел на 2 минуты. Даже паять не надо. Снимаешь перемычку, на тот пин который идет к ардуино наматываешь несколько витков тонкой проволочки, лучше луженой одножильной. Второй конец проволочки к резистору 5К-10К. Второй конец резистора на землю.
Ну так это совсем другое дело, тогда вам тут почитать )))
Да и плату выбирать правильно!
Спасибо за подсказку
поставил дрова, правда не нашел wavgat, но поставил LGT8F328P-LQFP32
Сразу тайминг вернулся на свое место - 1000 стала секундой). Работать быстрее стала вразы. Но на перемычках как то все еще неадекватно. Хотя есть изменения. Уже там стоят районе серединки цифры. Но все еще на налицие перемычек почему то реагирует все тот же А0.
Да и в любом случае пока не отработаешь на печатных платах никогда не будешь уверен, что все 100% рабочее.
Но раз Вы сами понимаете, что платы (вплне ожидаемо) получились нерабочие, то что надо делать?
я попробую притянуть резисторами, посмотрю что это даст.
Да уж давно попробовали бы. Там дел на 2 минуты. Даже паять не надо. Снимаешь перемычку, на тот пин который идет к ардуино наматываешь несколько витков тонкой проволочки, лучше луженой одножильной. Второй конец проволочки к резистору 5К-10К. Второй конец резистора на землю.
попробовал. Подкинул резистор 9К1 на вход ардуины и землю. четко фиксируются изменения показаний по команде аналог реад.
на фотке 5 блоков данных считываемых с перемычек.
На 1,2,3 - без подтяжки на землю. Все перемычки сняты
На 4,5 - подтяжка на землю перемычки JP -1.
п.с. Ребят, а не может дуня сама кидать High на аналоговые входы. Когда держал резистор показалось что он нагревается. Тоесть получается там плюс, я закорачиваю его на минус и получаю нагрев резистора. Соответственно и сигнал у меня показывает всегда положительный на входах
а там и есть HIGH (как правило) ну может чуток поменьше. вольта полтора-два ))) пин на землю ток вытекающий, на плюс - втекающий
Да и в любом случае пока не отработаешь на печатных платах никогда не будешь уверен, что все 100% рабочее.
Но раз Вы сами понимаете, что платы (вплне ожидаемо) получились нерабочие, то что надо делать?
Почему же) платы очень даже рабочие. Один косячок. Все таки подвесил на землю я входы эти. Работает четко. АналогРид при отсутствующей перемычке выдает 0 по всем входам. Но когда я перемычку ставил - то почему то на всех входах появлялся сигнал. Независимо куда я ставлю перемычку.
Как оказалось - было это из за превышения входного напряжения. Питается ардуинка от 3,3В а перемычкой я подавал на нее 5В. Попробовал подать 3,3В - все стало как надо отрабатывать.
Переключил питание ардуины на 5 вольт, теперь все отлично работает.
Спасибо вам, что не оставили меня с этой проблемой)