Attiny85(Digispart) & analogReference

pepelnyy
Offline
Зарегистрирован: 29.01.2016

Ок, я понял. Евгений хотел сказать: "Что будет, если измеряемое напряжение будет в точности равно референсному?" Снимаю шляпу. Шарик, ты балбес (с). Несмотря на то, что вариантов значений 1024, делить надо на 1023. Но мозг мой от этого все равно набекрень.
Евгений, а в остальном?

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

pepelnyy пишет:
а в остальном?
Ну, Вы ведь даже не пытались её компилировать! Ну, как же так? Зачем выносить мозг людям, даже не попытавшись запустить хотя бы компиляцию. Запустите, Вам рассскажут.

pepelnyy
Offline
Зарегистрирован: 29.01.2016

Нет устройства пока, не на чем попробовать.

pepelnyy
Offline
Зарегистрирован: 29.01.2016

В таком виде компилится без ошибок:

int val = 0;           // переменная для хранения считываемого значения
float voltage = 0;     // измеренное напряжение после делителя

void setup()
{
   analogReference(INTERNAL);  
}

void loop()
{  
  //Здесь что-то делаем...
  for (int i=0; i <= 9; i++) {
     val = val + analogRead(1); // считываем значение c P2
  }
  voltage = float(val) / 10230.0 * 1.1; // усредняем и переводим в вольты 
  //далее производим необходимые действия с voltage: по желанию - 
  //домножим на коэффициент делителя, вычтем напряжение отсечки и т.д.
  //делаем что-то ещё.
}

 

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

pepelnyy пишет:
Нет устройства пока, не на чем попробовать.
Что, и компилировать не на чем?

pepelnyy
Offline
Зарегистрирован: 29.01.2016

pepelnyy пишет:

В таком виде компилится без ошибок:

int val = 0;           // переменная для хранения считываемого значения
float voltage = 0;     // измеренное напряжение после делителя

void setup()
{
   analogReference(INTERNAL);  
}

void loop()
{  
  //Здесь что-то делаем...
  for (int i=0; i <= 9; i++) {
     val = val + analogRead(1); // считываем значение c P2
  }
  voltage = float(val) / 10230.0 * 1.1; // усредняем и переводим в вольты 
  //далее производим необходимые действия с voltage: по желанию - 
  //домножим на коэффициент делителя, вычтем напряжение отсечки и т.д.
  //делаем что-то ещё.
}

 

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

Вы не ответили на первую фразу из #42

pepelnyy
Offline
Зарегистрирован: 29.01.2016

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

Вы не ответили на первую фразу из #42


Если Вы про точность 10% - есть способ точнее? С радостью приму совет. Не то, что устраивает - буду с ней мириться.

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

Конечно, есть.

Вот здесь написано как правильно измерять напряжение питания (ищите раздел "Detecting low voltage")

Есть и по-русски, но предупреждаю: автор стырил материал Ника, формально код  правильный, но не до конца разобрался, потому его объяснения местами выглядят бредово.

pepelnyy
Offline
Зарегистрирован: 29.01.2016

Спасибо, ща почитаем.

pepelnyy
Offline
Зарегистрирован: 29.01.2016

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

Конечно, есть.

Вот здесь написано как правильно измерять напряжение питания (ищите раздел "Detecting low voltage")

Есть и по-русски, но предупреждаю: автор стырил материал Ника, формально код  правильный, но не до конца разобрался. потому его объяснения иногда выглядят бредово.

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

К сожалению, мне это не подходит. Да, виноват, не прописал в условиях задачи - плата Digispark и исполнительное устройство питаются от внешнего источника 6.6 - 8.4В через встроенные стабилизаторы напряжения. Т.о. микроконтроллер питается от стабилизированного питания 5В, чьё напряжение не особо кореллирует с напряжением источника и, в свою очередь aref встроенного источника тоже не особо будет зависеть от напряжения внешнего источника, которое я хочу померять.

Или я неправильно понимаю, поправьте меня.

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

Ну, блин! Вы же написали в посте #41 "Потребовалось измерить напряжение питания". Когда не уточняют чьего питания, всегда имеют в виду своего собственного!

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

pepelnyy
Offline
Зарегистрирован: 29.01.2016

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

pepelnyy пишет:

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


Так лучше, получается в таком случае analogreference(DEFAULT) и от стабилизированных 5 вольт плясать? Просто опыта не имею. Заранее благодарен за ответ.

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

Ну, я бы от 5 вольт плясал, конечно. На Aref поставил бо конденсатор (как даташит требует) и работал бы.