АЦП + Резистор + Вопрос новичка
- Войдите на сайт для отправки комментариев
Пнд, 13/08/2012 - 00:54
Привет всем, есть простой вопрос.
Подключаю к ацп батарею от телефона, результат функции digitalRead вполне предсказуем (т.е. за исключением некоторой погрешности, напряжение такое же как и показывает вольтметр). Но, если подключить батарею к ардуино через последовательный резистор, то результат функции digitalRead не изменится (т.е. точно такой же как и без резистора), хотя вольтметр показывает падение напряжения.
Может кто-нибудь объяснить мне суть происходящего?
Заранее благодарен.
extrasensov.net ;)
Вообщем получился классический "Здравствуйте уважаемые ученые , у меня в подполе происходит подземный стук. Пожалуйста обьясните как он происходит".
>Может кто-нибудь объяснить мне суть происходящего?
Суть происходящего - чудо.
Так как digitalRead, который всю жизнь умел возвращать только 0 и 1, у вас вдруг начал показывать напряжение как вольтметр (пусть и без резистора).
digitalRead возвращает только значения HIGH или LOW, логическую единицу или нуль, тоесть есть или нет сигнала.
Тебе нужно использовать analogRead и подавать сигнал на аналоговый пин, тогда ты сможеш получить в зависимости от входного напряжения значение от 0 к 1023.
ООО.... что ж я написал, виноват, комрады.... глупость написал.
Функцию конечно же использовал analogRead а не digitalRead.
Резистор на 57кОм. Подключал последовательно, т.е. минус батареи к пину земли, плюс батареи через резистор к аналоговму пину A0.
Скетч :) Serial.print(analogRead(0) * 0.0049);
Ну почему же весь скетч не дать? Это что тайна великая или за инет побайтово платите?
Вы показали только ту строчку которая важна по вашему мнению, но ведь и в других может быть причина проблемы. Раз "что-то не работает", значит вы где-то ошибаетесь. Возможно и "что нужно процитировать" - тоже ошиблись. Ну то есть в данном случае, скорее всего проблема действительно не вскетче, но "на будущие".
Теперь по сути.
Вообщем смотрите, попробую "на пальцах" что у вас получилось таким подключением:
Представте себе, что внутри, пин подключен подключен к земле через резистор ОЧЕНЬ большого номинала (не помню точно какого). И вместе с вашем резистором на 57К получается делитель напряжения http://bsvi.ru/kalkulyator-delitelya-na-rezistorax/
Где R1 - ваш резистор, а R2 этот самый "который внутри". В идеале он должен быть "бесконечно большим". И тогда analogRead будет возвращать 1024 в не зависимости от вашего R1 (при батарее в 5-ть вольт). Но, так как идеала не бывает, то ... подставляем его настоящий номинал и нажимаем кнопку "Calculate" - выясняем что же у нас там ожидается на пине. Настоящие номинал этого R2 можно найти в даташите на AMTEL камень.
P.S. Ну и не забывает что батарея у нас "не идеальная" и тоже имеет внутренее сопротивление, которое добавляется к вашему R1
Большое спасибо за ответ.
Учту на будущее все ваши замечани, спасибо.
К вышеописанному добавлю:
Пин A0 имет номер 21 в ардуино нано (если не ошибаюсь), потому вам нужно делать как то так: analogRead(21).
Посмотрите нумерацию пинов у вашей моделе.
У меня arduino uno, и нумерация аналоговых пинов идет от 0 до 5. Т.е. насколько я понял, нумерация аналоговых и цифровых пинов не общая, как минимум для функции analogRead.
Нумерация всех пинов в ардуине общая, в независимо от функции.
К вышеописанному добавлю:
Пин A0 имет номер 21 в ардуино нано (если не ошибаюсь), потому вам нужно делать как то так: analogRead(21).
Посмотрите нумерацию пинов у вашей моделе.
Ошибаетесь. Не нужно. analogRead() принимает нумерацию именно аналоговых пинов. Так что analogRead(0) - самое правильное чтение пина A0.
Но то есть analogRead(A0) или analogRead(14) - тоже сработает. Но только потому что в реализации analogRead (файл arduino-1.0\hardware\arduino\cores\arduino\wiring_analog.c ) есть "защита от дурака".
То есть оно в итоге "уменьшит" значение этого пина. И вы добъетесь только потери пары тактов процессора.
Правда "эта защита", в документации не описана. Просто, видимо, слишком часто путали, вот и "добавили" (а ведь могут и убрать в будущих версиях ;), тач что analogRead(0) - самое феншуйное.
Не знал, спасибо что поправили.