Вопросы чайника про аналоговые входы

ivpo
Offline
Зарегистрирован: 07.01.2014

Здравствуйте.

Прошу сильно не пинать (начинающий я).

Вопрос про AnalogRead и аналоговые входы в целом.

Как я понимаю, снять с них можно поданное на них напряжение (между конкретным аналоговым входом и любым контактом GND на плате). Причем диапазон - от 0 до 1024, где 1024 - это 5 В.

1) Все так?

2) Слышал, что для точного измерения нужно опорное напряжение (или какой-то резистор дополнительный вешать). Не могли бы пояснить?

3) Если аналоговый вход болтается в воздухе, то показывать он будет "температуру на Марсе" (т.е. не пойми что). Это нормально?

Заранее спасибо!

 

ivpo
Offline
Зарегистрирован: 07.01.2014

И ещё - можно ли использовать SVG-входы "Тройки" (Troyka Shield) для измерения напряжения также, как и обычные A-входы?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ivpo пишет:

аналоговые входы...

Как я понимаю, снять с них можно поданное на них напряжение (между конкретным аналоговым входом и любым контактом GND на плате). Причем диапазон - от 0 до 1024, где 1024 - это 5 В.

1) Все так?

Нет.

Во-первых, от 0 до 1023, а во вторых - не обязательно 5 В. Полной шкале соответствует величина опорного напряжения. Если в качестве опорного используется 5 В, то - да. Но если мы будем питать Ардуину от 4.5 В, то 1023 будет соответствовать 4.5 В.

Можно также использовать внутренний либо внешний  источник опорного напряжения.

Цитата:

2) Слышал, что для точного измерения нужно опорное напряжение (или какой-то резистор дополнительный вешать). Не могли бы пояснить?

https://www.arduino.cc/en/Reference/AnalogReference

Цитата:

3) Если аналоговый вход болтается в воздухе, то показывать он будет "температуру на Марсе" (т.е. не пойми что). Это нормально?

Ненормально, если вход болтается в воздухе.

А то, что в любом нештатном режиме результат непредсказуем - это нормально.

ivpo
Offline
Зарегистрирован: 07.01.2014

В качестве опорного идет то напряжение, которым запитана Ардуина?

А как можно использовать другое опорное напряжение (более стабильное и заранее известное)?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

ivpo пишет:

В качестве опорного идет то напряжение, которым запитана Ардуина?

А как можно использовать другое опорное напряжение (более стабильное и заранее известное)?

читать раздел Программирование подраздел analogReference() кто запретил?

ivpo
Offline
Зарегистрирован: 07.01.2014

Спасибо, буду изучать!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ivpo пишет:

В качестве опорного идет то напряжение, которым запитана Ардуина?

А как можно использовать другое опорное напряжение (более стабильное и заранее известное)?

Если пользоваться напряжением питания как опорным, то можно просто измерить напряжение питания (прямо из программы) и знать чем Вас кормят. Это даёт две выгоды 1) можно более точно пересчитывать напряжения, т.к. опорное известно, и 2) это можно использовать для контроля батареи.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ivpo пишет:

А как можно использовать другое опорное напряжение (более стабильное и заранее известное)?

Вы ответы читаете или только вопросы задаете? Прямо над этим Вашим вопросом ответ, в котором нужная ссылка.

ADR
Offline
Зарегистрирован: 13.09.2016

Для меня например, ваша ссылка бесполезна

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ADR пишет:

Для меня например, ваша ссылка бесполезна

Ну, там как бы написано каким образом переключаться между разными опорными. Вам разве не это надо? А что тогда для Вас полезно?

ADR
Offline
Зарегистрирован: 13.09.2016

Там написано. Только на английском языке. Зачем давать новичку такую ссылку, (если конечно заранее не известно, что он свободно владеет техническим английским) когда есть эта информация на русском языке?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, если есть, то читайте на русском.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

ADR, вы хотите начать программировать не зная английский?, вам придется тогда его выучить :)

ADR
Offline
Зарегистрирован: 13.09.2016

Я давно начал программировать)) Новичек в Ардуино - это необязательно пацанчик 15 лет

Зачем тогда этот сайт и форум? Достаточно родного, англоговорящего. 

 

bwn
Offline
Зарегистрирован: 25.08.2014

ADR пишет:

Там написано. Только на английском языке. Зачем давать новичку такую ссылку, (если конечно заранее не известно, что он свободно владеет техническим английским) когда есть эта информация на русском языке?

А Гугла-переводчика Роскомнадзор заблокировал? А зайти на этом же сайте в раздел "Программирование", вера не позволяет?

ADR
Offline
Зарегистрирован: 13.09.2016

Вы хотите об этом поговорить?

bwn
Offline
Зарегистрирован: 25.08.2014

Хочу понять, почему человек гордо заявляющий о своей зрелости, ведет себя как пятиклассник????

ADR
Offline
Зарегистрирован: 13.09.2016

Ну давайте поговорим. Вы я вижу больше писатель, чем читатель, хотя в этом меня же и упрекаете. Возможно это от удаления части переписки модератором - не знаю.

Собственно в вашем вопросе и содержится на него ответ. Разумеется я могу зайти на этом сайте в раздел "Программирование" и прочитать про эту функцию. Теперь могу, когда мне добрые люди дали на него ссылку. Вы же наверное не считаете, что как только я открыл этот сайт, то тут же ко мне в память загрузилась вся структура этого сайта и сразу узнал, что где лежит и где про что можно прочитать?

Хотя наверняка все участники конкретно этой дискуссии хорошо знакомы со структурой этого сайта. Да и ответы на заданные автором темы (да вы очевидно читаете с конца и не знаете ещё, что автор темы не я) им хорошо известны. И вот тут то у меня возникает вопрос вместе с недоумением - зачем? Зачем давать человеку ссылку на англоязычный сайт, когда есть этот, и есть раздел "Программирование" на русском языке. Может человек стесняется русского? Может на английском круче? Может он думает, что "возвышается" над теми, кто не говорит на великом английском языке? А может просто дал первую попавшуюся - мне неизвестно. Да впрочем и не важно. Я просто написал, что лично мне эта ссылка - бесполезна.

Для Калапуция ещё раз (да и для других кто хочет оскорбить меня лично) - Оскорбления выслушиваю только в очной беседе. Договариваемся о встрече и я буду рад вас выслушать. Остальное - считаю лаем из глубины будки за высоким забором.

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Оба как дети, честное слово.

Тут прямо на сайте такие базовые вещи на русском есть.

з.ы. А английский хотябы немного понимать не помешает. А форум для того чтобы общаться по теме ардуино, понимать техническую документацию и свободно общаться это разные вещи.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ADR пишет:

вот тут то у меня возникает вопрос вместе с недоумением - зачем? Зачем давать человеку ссылку на англоязычный сайт, когда есть этот, и есть раздел "Программирование" на русском языке. 

У меня возник ответ :)))

Если сравнить русскоязычное описание на этом сайте и англоязычное на том, что Вам дали, можно заметить, что по ОЧЕНЬ МНОГИМ позициям оно разное - там более свежее и актуальное, а здесь устаревшее и неполное. Поэтому Вам дали ссылку на более релевантный ресурс. По-моему, правильно поступили. Никто ж не знал, что Вы читать не умеете. Как-то считается что ни в программировании, ни в электронике без английского делать нечего, и потому все хоть сколько-нибудь, но читают.

Я ответил на вопрос "зачем"? 

ADR
Offline
Зарегистрирован: 13.09.2016

Да

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ЕвгенийП пишет:

ivpo пишет:

В качестве опорного идет то напряжение, которым запитана Ардуина?

А как можно использовать другое опорное напряжение (более стабильное и заранее известное)?

Если пользоваться напряжением питания как опорным, то можно просто измерить напряжение питания (прямо из программы) и знать чем Вас кормят. Это даёт две выгоды 1) можно более точно пересчитывать напряжения, т.к. опорное известно, и 2) это можно использовать для контроля батареи.

Евгений, при всем уважении, как узнать напряжение питания "Если пользоваться напряжением питания как опорным" ?

ADR
Offline
Зарегистрирован: 13.09.2016

Я думаю речь о опорном напряжении, как о константе. Например написано на блоке питания 12В, это значение вы и забиваете в программу. А потом измеряете напряжение питания и узнаёте, что не 12В, а 11.89В. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

xDriver пишет:

Евгений, при всем уважении, как узнать напряжение питания "Если пользоваться напряжением питания как опорным" ?

Давайте разобьём на две части (приблизительно и более точно):

1. Измеряем напряжение питания с точностью +/- 10%

такой точности вполне достаточно, например для контроля заряда батареи. Там можно положить эти 10% как "запас" и просто считать, что напряжение равно измеренному - 10% - не ошибёмся.

В большинстве AVR'ок у которых вообще есть ADC, есть возможность измерить внутреннее опорное напряжение, которое равно, как известно 1,1В с использованием напряжения питания как опорного для измерения.

Делается это для разных чипов немного по-разному в том смысле, что для того, чтобы выбрать такое измерение, нужно писать разные биты в AMUX. Вот то, что я реально делал:

Микроконтроллер Биты MUX стр. даташита
ATmega48A/PA/88A/PA/168A/PA/328/P 1110 249
ATtiny25/V / ATtiny45/V / ATtiny85/V 1100 135
ATmega640/V-1280/V-1281/V-2560/V-2561/V 011110 283
ATtiny13 возможность отсутствует

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

Но, поскольку мы и так знаем, что оно равно 1.1В, то этим измерением можно воспользоваться для расчёта напряжения питания. Пусть мы намеряли N. Тогда напряжение питания Vcc = 1,1V * 1023 / N

Здесь всё ясно?

Теперь давайте вспомним, что внутреннее опорное на самом деле не точно 1.1В, а (по даташиту) от 1.0В до 1.2В, причём индивидуально для каждого экземпляра микроконтроллера.

2. Измеряем более точно

Для начала определим точное значение внутреннего опорного для нашего экземпляра микроконтроллера.

Для этого проведём измерение как в предыдущем пункте, попутно измеряя напряжение питания лучшим вольтметром из тех, что имеем (лучше сделать это много раз и усреднить).

Допустим получили опять же N. Теперь вычисляем опорное для нашего чипа Vbg = Vcc * N / 1023 (здесь используется измеренное Vcc)

Полученное Vbg заносим в константу (или, если скетч пишется для серии устройств, то в EEPROM) и впредь, при измерении напряжения питания как в п. 1 выше, везде используем это значение Vbg, а не 1.1V. так получится более точно.

Вроде всё. Может где-то сбивчиво, так что если что-то осталось неясным, спрашивайте.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ADR пишет:

Я думаю речь о опорном напряжении, как о константе. Например написано на блоке питания 12В, это значение вы и забиваете в программу. А потом измеряете напряжение питания и узнаёте, что не 12В, а 11.89В. 

Почти, но я ещё и опорное уточняю (см. мой пост чуть выше).

arduinec
Offline
Зарегистрирован: 01.09.2015

xDriver пишет:

как узнать напряжение питания "Если пользоваться напряжением питания как опорным" ?

Код приведён в функции VCC() темы http://arduino.ru/forum/programmirovanie/sysinfo-arduino

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Спасибо ребят, просветили,  не знал.