Проблема с АЦП Атмега8
- Войдите на сайт для отправки комментариев
Пт, 02/11/2018 - 19:11
Пишу таймер, для установки значений использую потенциометры. При переходе с протеуса на ардуино иде с атмегой8 (8 МГц) появилась проблема с АЦП. Максимальные значения получаются при напряжении 1.1В на входе АЦП. Причём изменяя внутренний источник опорного, результат остаётся тот же. На фото с протеуса видно, что при напряжении с потенциометра 0,85В значение на первом индикаторе 92, что есть практически максимальным. С чем это связано? Может есть недоработки в исходниках программы ардуины? Значения читаются обычной командой analogRead() и через map() преобразуются в значения для индикаторов.
выложите скетч, непонятно что значит "изменяя внутренний источник опорного" ?
Внутренний источник опорного напряжения вы изменить не можете, он всегда 1.1в Можно использовать внешнее опорное, например напряжение питания - тогда можно будет мерить значения от 0в до VCC
Согласен, ошибся. Изменяя источник опорного. Времени довести до ума скетч не было, поэтому извините, если что-то не понятно)
строка 15 просто песня - как вы думаете, какое у вас значение в переменной maxV ?
В итоге вы сами приводите значения к неправильном диапазону.
maxV и minV были введены опытным путём для огранечения масимальных и минимальных значений в виду использования некачественных резисторов. Функция constrain() не даёт значениям АЦП вылазить за эти пределы, так как тогда из-за проволочных резисторов нельзя достичь максимального значения. Так максимальное значение будет достигаться от 950 до 1023 значений АЦП
AnFo - из кода вашего сразу возникло подозрение, что вы в программировании мало понимаете. А теперь это 100% уверенность. ВНИМАТЕЛЬНО посмотрите на строку 15. Все еще не видите грубую (ГРУБЕЙШУЮ) ошибку?
Спасибо огромное!! В программировании разбираюсь, в старом скетче стоял тип unsigned int, видимо ошибся, когда переносил из протеуса в IDE. Даже немного стыдно. Я думал вы намикаете на значение, а не тип данных, которому это значение присваивается, пэтому и 100% уверенность. И да, это мой первый проект на ардуино, некоторыми функциями пытаюсь переходить на С, в будущем хочу программировать именно на С. Если есть весомые замечания, то говорите, не стесняйтесь. Сам хочу немного ускорить рабту программы, так как во время работы таймера и прерываний немного мерцают индикаторы.
AnFo - при таком maxV максимальное значение с АЦП у вас должно быть 182. Похоже на то, что вы видите в Протеусе? - по-моему да
в виду использования некачественных резисторов
А, так это резисторы виноваты. Понятно.