Как измерять напряжение автономного питания на Arduino Nano.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

ua6em пишет:

b707 пишет:

 но так же и внутренний аналоговый референс 1.1в и внутренний термометр атмеги.

точно? а не с вывода AREF?

 

Сколько вопросов... Ну открой уже даташит, да посмотри сам. 

Bandgap reference и Internal 1.1v reference это одно и тоже.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

asam пишет:

ua6em пишет:

b707 пишет:

 но так же и внутренний аналоговый референс 1.1в и внутренний термометр атмеги.

точно? а не с вывода AREF?

 

Сколько вопросов... Ну открой уже даташит, да посмотри сам. 

Bandgap reference и Internal 1.1v reference это одно и тоже.

тогда всё складывается )))
PS только на структурной схеме этого нет почему то, совсем нет...
PPS я полностью доверяю DIMAX )))

Green
Offline
Зарегистрирован: 01.10.2015

А почитать? AREF то не фиксирован! Для мега328 он может быть внутренним (1.1в), иметь напряжение питания (AVCC) и внешним - каким хош (<= AVCC). Мультиплексором выбирается только внутренний, называемый BANDGAP. Из него, через усилитель, получается внутренний 1.1в , который уже может быть AREF-ом, если выберешь.
Опередили.)

Green
Offline
Зарегистрирован: 01.10.2015

asam пишет:

Сколько вопросов... Ну открой уже даташит, да посмотри сам.


А зачем? Когда и так всё объяснят.)

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

ua6em пишет:

asam пишет:

Сколько вопросов... Ну открой уже даташит, да посмотри сам. 

 

Bandgap reference и Internal 1.1v reference это одно и тоже.

тогда всё складывается )))
PS только на структурной схеме этого нет почему то, совсем нет...

В даташите есть, ну это если ты сподобишься его открыть.

Цитата:
PPS я полностью доверяю DIMAX )))

А что разве он утверждает что АЦП работает как-то по другому?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

asam пишет:

Сколько вопросов... Ну открой уже даташит, да посмотри сам.


А зачем? Когда и так всё объяснят.)

вот тут ты прав!!! )))

"мне теперь не надо гладить брюки,
помощь мне прислуги не нужна,
у меня для этой самой штуки есть..."

сайт arduino.ru )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

asam пишет:

А что разве он утверждает что АЦП работает как-то по другому?

эту тему впервые на этом сайте DIMAX разжевал, может было и раньше не увидел

nik182
Offline
Зарегистрирован: 04.05.2015

Полностью разжевать можно только путём дословного перевода мануала с комментариями. Как по мне проще самому прочитать мануал. Ну а тем кто лениться читать, приходится писать посты типа: а если так сделать...

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

ua6em пишет:

PPS я полностью доверяю DIMAX )))

Полностью нельзя доверять даже дэйташитам.

Хотя, не спорю, dimax - это намного лучше, чем datasheet.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

ua6em пишет:

PPS я полностью доверяю DIMAX )))

Полностью нельзя доверять даже дэйташитам.

Хотя, не спорю, dimax - это намного лучше, чем datasheet.

для общего развития информации достаточно, а для профессиональной datasheet и макетирование спасут МИР

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

Блин, тема сама того не стоит, а уж третья страница ... ТС, кстати, забил и свалил ещё 60 постов назад.

b707
Offline
Зарегистрирован: 26.05.2017

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

Блин, тема сама того не стоит, а уж третья страница ... ТС, кстати, забил и свалил ещё 60 постов назад.

+1 мельчает форум :) Года три назад этот "секретный вольтметр" знали все, а теперь смотрю половина форума ничего понять не может :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

 а теперь смотрю половина форума ничего понять не может :)

отож, уже сам b707 понял, а другие понять не могут )))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

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

Блин, тема сама того не стоит, а уж третья страница ... ТС, кстати, забил и свалил ещё 60 постов назад.

Я, Женя, когда тему увидел, то, как и ты, хотел написать, что и чем называется, IYKWIM! Но удержался. А потом понял, что тема прекрасна и без меня. ;)

Если бы я написал пример с измерением внутреннего источника, то после нескольких замечаний "коллег", тему бы пришлось снести! У меня нет твоего терпения и толерантности. ;)) Прости за этот термин!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

 Прости за этот термин!

так не за что, пятница жеж

кстати, тема не раскрыта, можно ли сделать такое же на ESP8266 осталось за скобками

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ua6em пишет:

кстати, тема не раскрыта, можно ли сделать такое же на ESP8266 осталось за скобками

Она даже в аддоне штатно реализовано https://arduino-esp8266.readthedocs.io/en/2.7.4_a/reference.html#analog-input

nik182
Offline
Зарегистрирован: 04.05.2015

ua6em пишет:

wdrakula пишет:

 Прости за этот термин!

так не за что, пятница жеж

кстати, тема не раскрыта, можно ли сделать такое же на ESP8266 осталось за скобками


Я уже писал. Читай мануалы. Может непридётся такую хрень писать. Или опять Диму ждал?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

nik182 пишет:

Я уже писал. Читай мануалы. Может непридётся такую хрень писать. Или опять Диму ждал?

так мы с ним в какой-то степени соратники, он сильно продвинутей, а мне спросить не зазорно )))

ЗЫ и таки да, я жеж тут не про нутаникс спрашиваю ...

lilik
Offline
Зарегистрирован: 19.10.2017

Тема полезная, почему только он такой секретный, этот вольтметр? Им удобно отслеживать падение напряжения при питании платы от аккумулятора непосредственно... и всё, наверное.

:-)

А как встроенным термометром пользоваться и какая с него польза?

lilik
Offline
Зарегистрирован: 19.10.2017

http://arduino.ru/forum/apparatnye-voprosy/datchik-temperatury-vnutri-at...

Нашёл, пользы по ходу не много.

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

lilik пишет:

А как встроенным термометром пользоваться 

Это просто "8-ой аналоговый пин". Так и пользуйтесь:

void setup(void) {
	Serial.begin(115200);
}

void loop(void){
	uint16_t rt = analogRead(8);
	Serial.println(rt);
	delay(1000);
}

 А как в температуру пересчитать см. даташит.

Есть исправление #127

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

 А как в температуру пересчитать см. даташит.


ан нет )))
 

// Internal Temperature Sensor
// Example sketch for ATmega328 types.
//
// April 2012, Arduino 1.0

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Internal Temperature Sensor"));
}

void loop()
{
  // Show the temperature in degrees Celsius.
  Serial.println(GetTemp(),1);
  delay(1000);
}

double GetTemp(void)
{
  unsigned int wADC;
  double t;

  // The internal temperature has to be used
  // with the internal reference of 1.1V.
  // Channel 8 can not be selected with
  // the analogRead function yet.

  // Set the internal reference and mux.
  ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));
  ADCSRA |= _BV(ADEN);  // enable the ADC

  delay(20);            // wait for voltages to become stable.

  ADCSRA |= _BV(ADSC);  // Start the ADC

  // Detect end-of-conversion
  while (bit_is_set(ADCSRA,ADSC));

  // Reading register "ADCW" takes care of how to read ADCL and ADCH.
  wADC = ADCW;

  // The offset of 324.31 could be wrong. It is just an indication.
  t = (wADC - 324.31 ) / 1.22;

  // The returned temperature is in degrees Celsius.
  return (t);
}

 

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

ua6em пишет:

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

 А как в температуру пересчитать см. даташит.


ан нет )))

Т.е. не надо смотреть даташит? Ну, не "нет" и суда "нет".

Кстати, lilik, 

код в #121 - только демонстрация, что это всего-навсего 8-ой аналоговый пин. Так-то если замерять, то, конечно, лучше поставить analogReference(INTERNAL), Разумеется.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

код в #121 - только демонстрация, что это всего-навсего 8-ой аналоговый пин. Так-то если замерять, то, конечно, лучше поставить analogReference(INTERNAL), Разумеется.

я тут некоторое количество ардуино нано проверил, слишком сильно гуляет температура, до 2-х градусов, между измерениями, можно конечно подумать на внутренний ИОН, что нестабилен, но сомнительно как-то, спиртом платки не промывал, остаётся конденсатор на AREF, он должен быть МП0, а что там в действительности знают только в поднебесной

b707
Offline
Зарегистрирован: 26.05.2017

ua6em, продолжаете тупить не по детски...

Код, которым вы поправили Евгения - полностью аналогичен его коду. Чего было вылезать, непонятно.

Рассуждения о "точности" не имеют смысла, пока вы не почитаете даташит. Там и точность указана и есть упоминание, что этот сенсор врет из-за нагрева самого чипа...

Это вы там отжигали на тему, что вышка в наше время не нужна? :)))

Green
Offline
Зарегистрирован: 01.10.2015

)) Я тут с мега48 (считая что она эквивалентна 88, 168, 328) пытался получить температуру. И, когда уже ничего не помогло, таки глянул даташит...(
А вообще датчик, конечно, полезен. Если всю дорогу спишь, то и температура от нагрева кристалла никак не зависит.

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

К сожалению, в посте #121 "брехня детектед" (жаль не могу поправить там)

Я совершенно забыл, что у меня wiring_analog.c "не из коробки".

Из коробки там перед записью пина в ADMUX стоит & 0x07 и пин 8 там просто не прокатывает.

Вот, если это "& 0x07" убрать, то да, действительно, так, как у меня написано - работает. И, кстати, если это убрать, то и напряжение питания можно измерять без работы с регистрами

template <typename T> inline Print & operator << (Print & s, T  n) { s.print(n); return s; }

void setup(void) {
	Serial.begin(115200);
}

void loop(void) {
	uint16_t Vbg= analogRead(28);
	float Vcc = 1024 * 1.1	/ Vbg;
	Serial << "Vbg=" << Vbg << "; Vcc=" << Vcc << "\r\n";
	delay(1000);
}

Результат на Нано

Vbg=235; Vcc=4.79
Vbg=234; Vcc=4.81
Vbg=235; Vcc=4.79
Vbg=234; Vcc=4.81
Vbg=234; Vcc=4.81
Vbg=234; Vcc=4.81

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

К сожалению, в посте #121 "брехня детектед" (жаль не могу поправить там)

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

Вопрос? насколько конденсатор на AREF влияет на измерения, я о ТКЕ ...

PS если ограничится 8 то можно видимо и "%9" )))

lilik
Offline
Зарегистрирован: 19.10.2017

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

К сожалению, в посте #121 "брехня детектед" (жаль не могу поправить там)

Я совершенно забыл, что у меня wiring_analog.c "не из коробки".

Из коробки там перед записью пина в ADMUX стоит & 0x07 и пин 8 там просто не прокатывает.

Вот, если это "& 0x07" убрать, то да, действительно, так, как у меня написано - работает. И, кстати, если это убрать, то и напряжение питания можно измерять без работы с регистрами

template <typename T> inline Print & operator << (Print & s, T  n) { s.print(n); return s; }

void setup(void) {
	Serial.begin(115200);
}

void loop(void) {
	uint16_t Vbg= analogRead(28);
	float Vcc = 1024 * 1.1	/ Vbg;
	Serial << "Vbg=" << Vbg << "; Vcc=" << Vcc << "\r\n";
	delay(1000);
}

 

 

Попробовал для УНО (чип как на нано :-), не знаю правильно я исправил в ADMUX  & 0x07 или нет, но показывает в мониторе после первого числа (оно всегда неверное) - 5.01-5.03 Вольта (а должно 4.81 :-)

SLKH
Offline
Зарегистрирован: 17.08.2015

lilik пишет:

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

К сожалению, в посте #121 "брехня детектед" (жаль не могу поправить там)

Я совершенно забыл, что у меня wiring_analog.c "не из коробки".

Из коробки там перед записью пина в ADMUX стоит & 0x07 и пин 8 там просто не прокатывает.

Вот, если это "& 0x07" убрать, то да, действительно, так, как у меня написано - работает. И, кстати, если это убрать, то и напряжение питания можно измерять без работы с регистрами

template <typename T> inline Print & operator << (Print & s, T  n) { s.print(n); return s; }

void setup(void) {
	Serial.begin(115200);
}

void loop(void) {
	uint16_t Vbg= analogRead(28);
	float Vcc = 1024 * 1.1	/ Vbg;
	Serial << "Vbg=" << Vbg << "; Vcc=" << Vcc << "\r\n";
	delay(1000);
}

 

 

Попробовал для УНО (чип как на нано :-), не знаю правильно я исправил в ADMUX  & 0x07 или нет, но показывает в мониторе после первого числа (оно всегда неверное) - 5.01-5.03 Вольта (а должно 4.81 :-)

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

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

lilik пишет:

не знаю правильно я исправил в ADMUX  & 0x07 или нет, 

Выложите файл, я посмотрю.

lilik
Offline
Зарегистрирован: 19.10.2017

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

lilik пишет:

не знаю правильно я исправил в ADMUX  & 0x07 или нет, 

Выложите файл, я посмотрю.

/*
  wiring_analog.c - analog input and output
  Part of Arduino - http://www.arduino.cc/

  Copyright (c) 2005-2006 David A. Mellis

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General
  Public License along with this library; if not, write to the
  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  Boston, MA  02111-1307  USA

  Modified 28 September 2010 by Mark Sproul
*/

#include "wiring_private.h"
#include "pins_arduino.h"

uint8_t analog_reference = DEFAULT;

void analogReference(uint8_t mode)
{
	// can't actually set the register here because the default setting
	// will connect AVCC and the AREF pin, which would cause a short if
	// there's something connected to AREF.
	analog_reference = mode;
}

int analogRead(uint8_t pin)
{
	uint8_t low, high;

#if defined(analogPinToChannel)
#if defined(__AVR_ATmega32U4__)
	if (pin >= 18) pin -= 18; // allow for channel or pin numbers
#endif
	pin = analogPinToChannel(pin);
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
	if (pin >= 54) pin -= 54; // allow for channel or pin numbers
#elif defined(__AVR_ATmega32U4__)
	if (pin >= 18) pin -= 18; // allow for channel or pin numbers
#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__)
	if (pin >= 24) pin -= 24; // allow for channel or pin numbers
#else
	if (pin >= 14) pin -= 14; // allow for channel or pin numbers
#endif

#if defined(ADCSRB) && defined(MUX5)
	// the MUX5 bit of ADCSRB selects whether we're reading from channels
	// 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high).
	ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
#endif
  
	// set the analog reference (high two bits of ADMUX) and select the
	// channel (low 4 bits).  this also sets ADLAR (left-adjust result)
	// to 0 (the default).
#if defined(ADMUX)
#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
	ADMUX = (analog_reference << 4) | (pin & 0x07);
#else
	ADMUX = (analog_reference << 6) | (pin /*& 0x07*/);
#endif
#endif

	// without a delay, we seem to read from the wrong channel
	//delay(1);

#if defined(ADCSRA) && defined(ADCL)
	// start the conversion
	sbi(ADCSRA, ADSC);

	// ADSC is cleared when the conversion finishes
	while (bit_is_set(ADCSRA, ADSC));

	// we have to read ADCL first; doing so locks both ADCL
	// and ADCH until ADCH is read.  reading ADCL second would
	// cause the results of each conversion to be discarded,
	// as ADCL and ADCH would be locked when it completed.
	low  = ADCL;
	high = ADCH;
#else
	// we dont have an ADC, return 0
	low  = 0;
	high = 0;
#endif

	// combine the two bytes
	return (high << 8) | low;
}

// Right now, PWM output only works on the pins with
// hardware support.  These are defined in the appropriate
// pins_*.c file.  For the rest of the pins, we default
// to digital output.
void analogWrite(uint8_t pin, int val)
{
	// We need to make sure the PWM output is enabled for those pins
	// that support it, as we turn it off when digitally reading or
	// writing with them.  Also, make sure the pin is in output mode
	// for consistenty with Wiring, which doesn't require a pinMode
	// call for the analog output pins.
	pinMode(pin, OUTPUT);
	if (val == 0)
	{
		digitalWrite(pin, LOW);
	}
	else if (val == 255)
	{
		digitalWrite(pin, HIGH);
	}
	else
	{
		switch(digitalPinToTimer(pin))
		{
			// XXX fix needed for atmega8
			#if defined(TCCR0) && defined(COM00) && !defined(__AVR_ATmega8__)
			case TIMER0A:
				// connect pwm to pin on timer 0
				sbi(TCCR0, COM00);
				OCR0 = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR0A) && defined(COM0A1)
			case TIMER0A:
				// connect pwm to pin on timer 0, channel A
				sbi(TCCR0A, COM0A1);
				OCR0A = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR0A) && defined(COM0B1)
			case TIMER0B:
				// connect pwm to pin on timer 0, channel B
				sbi(TCCR0A, COM0B1);
				OCR0B = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR1A) && defined(COM1A1)
			case TIMER1A:
				// connect pwm to pin on timer 1, channel A
				sbi(TCCR1A, COM1A1);
				OCR1A = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR1A) && defined(COM1B1)
			case TIMER1B:
				// connect pwm to pin on timer 1, channel B
				sbi(TCCR1A, COM1B1);
				OCR1B = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR1A) && defined(COM1C1)
			case TIMER1C:
				// connect pwm to pin on timer 1, channel B
				sbi(TCCR1A, COM1C1);
				OCR1C = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR2) && defined(COM21)
			case TIMER2:
				// connect pwm to pin on timer 2
				sbi(TCCR2, COM21);
				OCR2 = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR2A) && defined(COM2A1)
			case TIMER2A:
				// connect pwm to pin on timer 2, channel A
				sbi(TCCR2A, COM2A1);
				OCR2A = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR2A) && defined(COM2B1)
			case TIMER2B:
				// connect pwm to pin on timer 2, channel B
				sbi(TCCR2A, COM2B1);
				OCR2B = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR3A) && defined(COM3A1)
			case TIMER3A:
				// connect pwm to pin on timer 3, channel A
				sbi(TCCR3A, COM3A1);
				OCR3A = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR3A) && defined(COM3B1)
			case TIMER3B:
				// connect pwm to pin on timer 3, channel B
				sbi(TCCR3A, COM3B1);
				OCR3B = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR3A) && defined(COM3C1)
			case TIMER3C:
				// connect pwm to pin on timer 3, channel C
				sbi(TCCR3A, COM3C1);
				OCR3C = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR4A)
			case TIMER4A:
				//connect pwm to pin on timer 4, channel A
				sbi(TCCR4A, COM4A1);
				#if defined(COM4A0)		// only used on 32U4
				cbi(TCCR4A, COM4A0);
				#endif
				OCR4A = val;	// set pwm duty
				break;
			#endif
			
			#if defined(TCCR4A) && defined(COM4B1)
			case TIMER4B:
				// connect pwm to pin on timer 4, channel B
				sbi(TCCR4A, COM4B1);
				OCR4B = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR4A) && defined(COM4C1)
			case TIMER4C:
				// connect pwm to pin on timer 4, channel C
				sbi(TCCR4A, COM4C1);
				OCR4C = val; // set pwm duty
				break;
			#endif
				
			#if defined(TCCR4C) && defined(COM4D1)
			case TIMER4D:				
				// connect pwm to pin on timer 4, channel D
				sbi(TCCR4C, COM4D1);
				#if defined(COM4D0)		// only used on 32U4
				cbi(TCCR4C, COM4D0);
				#endif
				OCR4D = val;	// set pwm duty
				break;
			#endif

							
			#if defined(TCCR5A) && defined(COM5A1)
			case TIMER5A:
				// connect pwm to pin on timer 5, channel A
				sbi(TCCR5A, COM5A1);
				OCR5A = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR5A) && defined(COM5B1)
			case TIMER5B:
				// connect pwm to pin on timer 5, channel B
				sbi(TCCR5A, COM5B1);
				OCR5B = val; // set pwm duty
				break;
			#endif

			#if defined(TCCR5A) && defined(COM5C1)
			case TIMER5C:
				// connect pwm to pin on timer 5, channel C
				sbi(TCCR5A, COM5C1);
				OCR5C = val; // set pwm duty
				break;
			#endif

			case NOT_ON_TIMER:
			default:
				if (val < 128) {
					digitalWrite(pin, LOW);
				} else {
					digitalWrite(pin, HIGH);
				}
		}
	}
}

Строка 70.

lilik
Offline
Зарегистрирован: 19.10.2017

SLKH пишет:

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

Мерить вольтметром, выводя на AREF?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я привык осциллографом, аналоговым с открытым входом
PS было бы интересно посмотреть картинку от DIMAX

Green
Offline
Зарегистрирован: 01.10.2015

ua6em пишет:

я привык осциллографом, аналоговым с открытым входом


"Менял я женщин там-тыр-ярам как перчатки!"
 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

"Менял я женщин там-тыр-ярам как перчатки!"

приходится, цифровой у меня простенький DT9205A им только на диапазоне 20 вольт можно, а это неточно

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

lilik пишет:

Строка 70.

Оно!

SLKH
Offline
Зарегистрирован: 17.08.2015

lilik пишет:

SLKH пишет:

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

Мерить вольтметром, выводя на AREF?

Да как хочешь. 

1. находишь у Гайвера какую-то библиотеку, там всё автоматизировано: вводишь в монитор порта значение с вольтметра, нужная константа вычисляется и записывается в еепром.

2. измеряешь напряжение на пине 5в  (#127), считаешь, следующей прошивкой записываешь константу в еепром.

3. в режиме референсе интернал измеряешь входное напряжение около 1 вольта, считаешь, следующей прошивкой записываешь константу в еепром. 

 

Мне как-то больше нравится третий вариант.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а самый простой - второй, для него окромя мильтиметра ничего не надо и входное сопротивление оного практически неважно

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

SLKH пишет:

Мне как-то больше нравится третий вариант.

Только нужен высокоомный вольтметр. Мой мультиметр показал 0. Потому пришлось считать ручками, получилось 1,0522 ))

lilik
Offline
Зарегистрирован: 19.10.2017

Да, у меня тоже 0 показал, выставил в скетч наобум 1.05 вместо 1.1 - стало очень точно :-)

 

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

lilik пишет:

Да, у меня тоже 0 показал, выставил в скетч наобум 1.05 вместо 1.1 - стало очень точно :-)

 

Точно наобум?

SLKH пишет:

lilik пишет:
5.01-5.03 Вольта (а должно 4.81 :-)

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

lilik пишет:

Да, у меня тоже 0 показал, выставил в скетч наобум 1.05 вместо 1.1 - стало очень точно :-)

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

lilik
Offline
Зарегистрирован: 19.10.2017

andriano пишет:

 

Точно наобум?

 

В том смысле, что не подтверждённое измерениями.

SLKH
Offline
Зарегистрирован: 17.08.2015

v258 пишет:

SLKH пишет:

Мне как-то больше нравится третий вариант.

Только нужен высокоомный вольтметр. Мой мультиметр показал 0.

хмм... куда ты его втыкал?

Высокоомности народного российского DT-83* хватает с избытком, ещё и остается.

SLKH
Offline
Зарегистрирован: 17.08.2015

lilik пишет:

andriano пишет:

 

Точно наобум?

 

В том смысле, что не подтверждённое измерениями.

так нужно что-нибудь меньше 1,05 поизмерять - вот и будут подтверждения.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

SLKH пишет:

v258 пишет:

SLKH пишет:

Мне как-то больше нравится третий вариант.

Только нужен высокоомный вольтметр. Мой мультиметр показал 0.

хмм... куда ты его втыкал?

Высокоомности народного российского DT-83* хватает с избытком, ещё и остается.

Как куда? AREF <-> GND. Мультик - MY-64. Сам в шоке )))

SLKH
Offline
Зарегистрирован: 17.08.2015

v258 пишет:

SLKH пишет:

v258 пишет:

SLKH пишет:

Мне как-то больше нравится третий вариант.

Только нужен высокоомный вольтметр. Мой мультиметр показал 0.

хмм... куда ты его втыкал?

Высокоомности народного российского DT-83* хватает с избытком, ещё и остается.

Как куда? AREF <-> GND. Мультик - MY-64. Сам в шоке )))

"в режиме референсе интернал измеряешь входное напряжение около 1 вольта"

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

SLKH пишет:

"в режиме референсе интернал измеряешь входное напряжение около 1 вольта"

Функция analogReference() | Аппаратная платформа Arduino

Цитата:

Настройкой INTERNAL к выводу AREF подключается внутреннее напряжение 1.1 В (или 2.56 микросхемы ATmega8). При этом напряжение соответствующее или превышающее 1.1 В будет конвертироваться АЦП в 1023. Другие значения напряжения конвертируются пропорционально.

Внутреннее подключение источника 1.1 В к выводу является высоко-импедансным, что означает, что для измерение напряжения на выводе может быть произведено только мультиметром с высоким сопротивлением. Ошибочное подключение напряжения к выводу AREF  при этой настройке функции analogReference не повредит микросхему, но превысит значение 1.1 В. В этом случае АЦП будет конвертировать напряжение внешнего источника. Во избежание вышеописанных проблем настоятельно рекомендуется подключать внешнее напряжение через резистор 5 кОм.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

А чисто математический метод и так ясен, и к мультиметру требований не предъявляет ))