Карманное FM Радио на RDA5807, IIC Oled 0.96" и Arduino Pro Mini

fedic
Offline
Зарегистрирован: 01.03.2021

Вот нашел способ достать *.hex  файл проекта:  http://rfanat.ru/Arduino_projekts/hex-arduino.html

Залил прошивку (версию 1.7)в  Ардуинку, собрали с сыном приемник который заработал сразу. Первые впечатления: цифровую часть (ардуино и дисплей) надо капитально экранировать и RDA тоже, иначе идет не хилая помеха

чувствительность хотелось бы поднять, установкой предварительного УВЧ.

А так даже очень прилично, выражаю благодарность авторам проекта!

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

режима powerdown конечно не хватает для работы от АКБ. Просыпаться просто при нажатии кнопок. Тогда и помех гарантировано не будет.

fedic пишет:
хотелось бы поднять, установкой предварительного УВЧ.

Поиграйтесь для начала с регистром входа антены.  10 км от станций в бетонном здании на 5 см провод уверенно приемник ловит. 

antena = 2;//это вставить после 66 строки. // 0 -отключена 1 - вход земля, 2 - вход FMIN 3 - оба источника


//Это вставить в конец скеча
void antena(uint8_t LNA_PORT_SEL) {
  LNA_PORT_SEL = constrain(LNA_PORT_SEL, 0, 3); 
  uint16_t Reg05h = getRegister(0x05); // Считываем текущее значение
  Reg05h &= ~0xC0; // Сбрасываем биты ANTENA
  Reg05h |= LNA_PORT_SEL << 6; // Устанавливаем вход
  setRegister(0x05, Reg05h);
}

void setRegister(uint8_t reg, const uint16_t value) {
  Wire.beginTransmission(0x11);
  Wire.write(reg);
  Wire.write(highByte(value));
  Wire.write(lowByte(value));
  Wire.endTransmission(true);
}

uint16_t getRegister(uint8_t reg) {
  uint16_t result;
  Wire.beginTransmission(0x11);
  Wire.write(reg);
  Wire.endTransmission(false);
  Wire.requestFrom(0x11, 2, true);
  result = (uint16_t)Wire.read() << 8;
  result |= Wire.read();
  return result;
}

 

fedic
Offline
Зарегистрирован: 01.03.2021

Спасибо, но наверное так: antena(2);  вместо antena = 2;

Посмотрел описание регистров по даташиту, регистр 5 вроде бы не при делах тут.

 

Примечания:

2 This value is SNR threshold for seeking, and the default value 1000 is about 32dB SNR.

3 0x20H_bit<14:12>, Seek_Mode register. Default value is 000; When = 001, will add the 5802E seek mode

Если что близко по смыслу, то пороговое значение отношения сигнал/шум в режиме поиска, но это поиск и к коммутации входов отношения не имеет.     

Вставил рисунок из пдф  но он не отобразился, а на какой даташит Вы ориентировались?       

fedic
Offline
Зарегистрирован: 01.03.2021

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

https://tsibrov.blogspot.com/2019/11/rda5807m-part1.html?m=1 отличная статья на русском.
6,7 биты 5го регистра.

fedic
Offline
Зарегистрирован: 01.03.2021

Ну что же, огромное спасибо за статью! Т.е. получается биты 6 и 7  не документированные данные! Отличненько! У китайчат такое сплошь и рядом

geniv82
Offline
Зарегистрирован: 21.02.2019

Ребят, здравствуйте. А как сделать при включении полную очистку экрана? У меня на один экран работают два устройства: это радио и интернет радио на ESP12. Так при переключении с ESP на ардуино на экране остаются артефакты. Резет на ардуино к положительному результату не приводит, только помогает передёргивание питания. Можно ли это победить программным способом?

Вот здесь кино. https://yadi.sk/d/G1Dj4mig5x13hw

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

А банальная очистка экрана не помогает?

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Скорее всего это из-за одновременного обращения к нему 2х устройств. После переключения на ардуино ESP, видимо, все еще пытается что-то передать на экран. Не знаю, какой интерфейс у экрана, но скорее всего какая-то из ног управления удерживается.

geniv82
Offline
Зарегистрирован: 21.02.2019

Я так полагаю, что очистка производится при инициализации. Отдельно команды для этой библиотеки не нашёл. 

u8g.clear_screen(); не помогает - ругается при компиляции.

geniv82
Offline
Зарегистрирован: 21.02.2019

Экран подключен по I2C. SDA, SCK между устройствами переключается через к561кт3, питание подаётся от каждого устройства через диоды шоттки. Питание на устрорйства переключаются РПС45.

Feofan
Offline
Зарегистрирован: 28.05.2017
u8g.firstPage();
do {
	u8g.drawStr(0, 0, "");
} while (u8g.nextPage());

А так очистится?

geniv82
Offline
Зарегистрирован: 21.02.2019

К сожалению, ничего не изменилось.

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Проблема скорее всего "железная". Схему покажи, как ключ подключен. Тут еще может быть его сопротивление (80-160 Ом) роль играет.

geniv82
Offline
Зарегистрирован: 21.02.2019

Схема от руки, извините, но суть ясна.

https://yadi.sk/i/BDRRqeReXwongA

https://yadi.sk/i/HZF0CB_kigfrsg

Чёт рисунки не вставляются.

Проблема может и железная, но при переключении с фм радио на есп глюков не наблюдается. Можно, конечно, подпаяться к выводу reset и поставить ключ или чего-либо ещё, но не хочется колхозить. Должен же быть программный сброс или очистка буфера дисплея.

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Т.е. проблема только если с ESP на ардуино? А если обратно, еще раз, то нормально?. Кондеры по питанию дисплея стоят достаточной емкости? Может при переключении напряжение просаживается и инициализация проходит до восстановления питания на дисплее? Еще, как вариант, можно убрать реле, и МК в сон уводить при переключении. Тогда "коммутационных недоразумений" точно быть не должно .

geniv82
Offline
Зарегистрирован: 21.02.2019

mir0tv0rec пишет:

Т.е. проблема только если с ESP на ардуино? 

Да.

mir0tv0rec пишет:

А если обратно, еще раз, то нормально?. 

Нет, не помогает даже reset на ардуино.

mir0tv0rec пишет:

проблема только если с ESP на ардуино

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Не понимаю зачем atmega если есть esp8266? Может следующие строки на мысли наведут, правда нет уверенности u8g и u8g2 это одно и то же или нет. Использовал чтоб небыло повторной инициализации дисплея после сна esp:
//магия с дисплеем при первой и последующих загрузках
if (first_boot) {
u8g2.begin(); u8g2.clearBuffer(); // First init of the displays
} else { // Init displays after wake up
u8x8_gpio_Init(u8g2.getU8x8());
u8x8_cad_Init(u8g2.getU8x8());
u8x8_gpio_SetReset(u8g2.getU8x8(), 1);
}

geniv82
Offline
Зарегистрирован: 21.02.2019

p-a-h-a пишет:
Не понимаю зачем atmega если есть esp8266?

1. Копаю огород, роутер не добивает.

2. Начнётся война, интернет первым зависнит.

3. Да и так, местные новости иногда послушать.

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Да я о другом, если в esp не закрытая прошивка то можно было бы внедрить код для руления fm приемником без ардуинки и микросхемы переключения.

geniv82
Offline
Зарегистрирован: 21.02.2019

Не, закрыта.

//магия с дисплеем при первой и последующих загрузках
if (first_boot) {
u8g2.begin(); u8g2.clearBuffer(); // First init of the displays
} else { // Init displays after wake up
u8x8_gpio_Init(u8g2.getU8x8());
u8x8_cad_Init(u8g2.getU8x8());
u8x8_gpio_SetReset(u8g2.getU8x8(), 1);
}

Ругается, библиотека другая, команд таких не знает.

geniv82
Offline
Зарегистрирован: 21.02.2019

Задолбался с программным сбросом, сделал аппаратный: при включении на PB5 коротко появляется единица, её через транзистор завёл на reset дисплея. Всё.

Вот что получилось - karmannoe fm radio na rda5807 + ESP mini.

Kaa_2
Offline
Зарегистрирован: 31.05.2021

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Kaa_2 пишет:

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

Неможетэтовабыть. 

roy_wash
Offline
Зарегистрирован: 10.06.2021

подскажите пожалуйста в чем дело грузит с ошибкой
 

In file included from C:\Users\roy_wash\Documents\Arduino\libraries\Radio\src\newchip.cpp:20:0:
C:\Users\roy_wash\Documents\Arduino\libraries\Radio\src/RADIO.h:116:1: warning: 'typedef' was ignored in this declaration
 typedef struct RADIO_INFO {
 ^~~~~~~
C:\Users\roy_wash\Documents\Arduino\libraries\Radio\src/RADIO.h:127:1: warning: 'typedef' was ignored in this declaration
 typedef struct AUDIO_INFO {
 ^~~~~~~

 

Kaa_2
Offline
Зарегистрирован: 31.05.2021

ошибку напиши.

Kaa_2
Offline
Зарегистрирован: 31.05.2021

DetSimen пишет:

Kaa_2 пишет:

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

Неможетэтовабыть. 

может! если текста нет - сам разберусь...

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Там плавность не поменяешь. Всего у RDA5807 15 шагов регулировки громкости 0-15. И при 0 звук все-равно есть. Чтобы выключить совсем, нужно включить mute. Смотри подключенную библиотеку. Я правил под себя, при 0 громкости включал mute и сдвинул все на 1 вверх. В итоге получилось 16 шагов. Да, и при мелких наушниках регулировка слишком резкая, мне обычно хватает 2, дальше очень громко. На усилителе все нормально.

Анатолий89
Offline
Зарегистрирован: 16.03.2021

Kaa_2 здесь регулировка имеет 16 уровней и мельче ее не сделать,разве что поставить переменный резистор на выход RDA5807

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

roy_wash
Offline
Зарегистрирован: 10.06.2021

из-за чего могут появляться помехи? все отлично пропаяно, не понимаю из-за чего наводки 

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Наводки от работы МК, шины I2C. Нужно по питанию RDA5807 фильтр хороший ставить. Хотя полность это проблему не решит.

tehnostark
Offline
Зарегистрирован: 23.09.2021

https://blynk.hackster.io/B45i/dhwani-fm-radio-with-wifi-connectivity-87a1e1  -Ссылка  хочу переделать под RDA5807m. чтоб работал автопоиск и регулировка громкости!или если можно добавить Blynk управление в скетч 1.7 версии  автора скетча. с Олед экраном. и переделать с кнопок на энкодер. было бы супер...

Всем Доброго Времени суток.

помогите доработать скетч под RDA5807m. чтоб этот скетч, мог работать с приложением Blynk ссылка вверху на библиотеки и скетч и фото. помогите пожалуйста! мой телеграмм @tehnostark.

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Wire.h>
#include "TEA5767.h"


const char KEY[] = "токен";
const char SSID[] = "точка доступа";
const char PASSWORD[] = "пароль";

const int PIN_SDA = 4; // D2;
const int PIN_SCL = 5; // D1;

TEA5767 Radio;

int search_mode = 0;
int g_muted = false;
int search_direction;
unsigned char buf[5];

double currentFreq = 102.4;
int signalLevel;


BLYNK_WRITE(V5) {
	String action = param.asStr();
	if (action == "play") 	   { setMute(true);  }
	else if (action == "stop") { setMute(false); }
	else if (action == "next") { searchUp(); 	 }
	else if (action == "prev") { searchDown();	 }
}

BLYNK_WRITE(V2) {
	tuneTo(param.asFloat());
}

void info() {
	if (Radio.read_status(buf) == 1) {
		currentFreq = floor(Radio.frequency_available(buf) / 100000 + .5) / 10;
		signalLevel = Radio.signal_level(buf);

		Blynk.virtualWrite(V0, currentFreq);
		Blynk.virtualWrite(V1, signalLevel);
	}
	else {
		Blynk.virtualWrite(V0, "Radio Not Connected !");
	}
}

void setMute(bool state) {
	if (state) {
		Radio.mute();
	}
	else {
		if (Radio.read_status(buf) == 1) {
			double currentFreq = floor(Radio.frequency_available(buf) / 100000 + .5) / 10;
			Radio.set_frequency(currentFreq);
		}
	}
	g_muted = state;
}

void searchDown() {
	search_mode = 1;
	search_direction = TEA5767_SEARCH_DIR_DOWN;
	Radio.search_down(buf);
}

void searchUp() {
	search_mode = 1;
	search_direction = TEA5767_SEARCH_DIR_UP;
	Radio.search_up(buf);
}

void tuneTo(double freq) {
	Radio.set_frequency(freq);
}

BLYNK_WRITE(V10) //функция, отслеживающая изменение виртуального пина 0
{
  int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
  digitalWrite(D7, pinValue); //задаем значение на физическом пине NodeMcu D4 равное значению виртуального пина 0
}

void setup() {
  pinMode(D7, OUTPUT); //объявляем D4 "выходным" пином
	Blynk.begin(KEY, SSID, PASSWORD);
	Wire.begin(PIN_SDA, PIN_SCL);
	Radio.init();
	Radio.set_frequency(currentFreq);
}

void loop() {
	Blynk.run();
	info();
}

 

tehnostark
Offline
Зарегистрирован: 23.09.2021

есть люди которые  смогут мне помочь?

tehnostark
Offline
Зарегистрирован: 23.09.2021

напишите мне в телеграмм. я подробно опишу что хочу доработать

мой телеграмм @tehnostark  

tehnostark
Offline
Зарегистрирован: 23.09.2021

Вы тут? может вы мне поможете?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ношкой топнуть забыл. 

tehnostark
Offline
Зарегистрирован: 23.09.2021

помогите пожалуйста... я же оставил свой телеграмм... договоримся

Анатолий89
Offline
Зарегистрирован: 16.03.2021

Зачем переделывать если RDA5807 работает в режиме совместимости с TEA5767

tehnostark
Offline
Зарегистрирован: 23.09.2021

нет автопоиска, нет регулировки громкости нет rds  или еще продолжить? Да. на одном костылЕ, ковыляет... но не работает!

Анатолий89
Offline
Зарегистрирован: 16.03.2021

ПРОДОЛЖАЙТЕ!Автопоиск в 5767 есть! громкость нет,rds тоже нет

Про Blynk не знаю что это и зачем это и вообще он мне не нужен-если ставить кнопки и дисплей считаю лишним WIFI

 

tehnostark
Offline
Зарегистрирован: 23.09.2021

в tea5767 автопоиск  есть а в режиме совместимости с RDA5807 -нет! смысл продолжать  если мне человек пишет  - зачем мне две почки. я и с одной проживу. а вторую продам!

tehnostark
Offline
Зарегистрирован: 23.09.2021

радиоприемник как дополнение для умного дома  в приложении блинк! включение по таймеру и выключение! не тотько свет включать и выключать  и смотреть погоду а послушать после блютус, аналоговое радио и на диване поуправлять настройками! а в место кнопок поставить энкодер. так и просится возле oled 0.96"

Анатолий89
Offline
Зарегистрирован: 16.03.2021

я не знаком с этим приложением Blynk,так что извините

а кнопки и олед-первое сообщение и далее

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Как ты думаешь, техностарче, что проще, "немношко переделать всю программу" или тебе купить TEA5767 в Китае и не насиловать нам  моск и глаза твоими восклицательными знаками после каждого предложения. 

Анатолий89
Offline
Зарегистрирован: 16.03.2021

В статье https://blynk.hackster.io/B45i/dhwani-fm-radio-with-wifi-connectivity-87a1e1 стоит именно RDA5807...

а так переписать программу,вернее команды управления 5767 на 5807 и должно работать

VanGogh
Offline
Зарегистрирован: 07.01.2022

Всех с Новым Годом!

Подскажите как можно масшабировать значок батарейки? Я хочу вместо режима сна отображать на дисплее состояние батареи с индикацией заряда в процентах. Но не могу сделать батарейку больше (на пол экрана).

void Energy()
{
 if(MODE==1 && millis()-TimeOut>2000) flag=1;
 if(MODE==1 && millis()-TimeOut>3000)
  {
    readVcc();
u8g.firstPage();  
do {
u8g.setDefaultForegroundColor();
if(Voltage>85) u8g.drawBitmapP (31, 21, 2, 10, Bat7);
  else if(Voltage>70) u8g.drawBitmapP (31, 21, 2, 10, Bat6);
  else if(Voltage>55) u8g.drawBitmapP (31, 21, 2, 10, Bat5);
  else if(Voltage>40) u8g.drawBitmapP (31, 21, 2, 10, Bat4);
  else if(Voltage>25) u8g.drawBitmapP (31, 21, 2, 10, Bat3);
  else if(Voltage>10) u8g.drawBitmapP (31, 21, 2, 10, Bat2);
  else u8g.drawBitmapP (31, 21, 2, 10, Bat1);
    MODE=0;
    if(v!= EEPROM[1]) EEPROM[1] = v;
    if(k!= EEPROM[2]) EEPROM[2] = k;
    if(m!= EEPROM[3]) EEPROM[3] = m;
    if(b!= EEPROM[4]) EEPROM[4] = b;
    if(ms!=EEPROM[5]) EEPROM[5] = ms;
    if(s2!=s){s2=s;   EEPROM[6] = int(s/100); 
                      EEPROM[7] = s%100;
             }
    if(sm!=EEPROM[8]) EEPROM[8] = sm;         
  }
  while( u8g.nextPage() );
  }
  
  if(MODE==0 && millis()-TimeOut<500)
  {
    MODE = 1; 
    flag = 1; 
    m = 7;
  }
}

Если менять width и height, то растягивает и ничего не видно, а как изменить сам размер картинки не имея оригинала?

const uint8_t Bat1[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat2[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xA0, 0x01, 0xA0, 0x01, 0xA0, 0x01, 0xA0, 0x01, 0xA0, 0x01, 0xA0, 0x01,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat3[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xA8, 0x01, 0xA8, 0x01, 0xA8, 0x01, 0xA8, 0x01, 0xA8, 0x01, 0xA8, 0x01,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat4[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xAA, 0x01, 0xAA, 0x01, 0xAA, 0x01, 0xAA, 0x01, 0xAA, 0x01, 0xAA, 0x01,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat5[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xAA, 0x81, 0xAA, 0x81, 0xAA, 0x81, 0xAA, 0x81, 0xAA, 0x81, 0xAA, 0x81,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat6[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xAA, 0xA1, 0xAA, 0xA1, 0xAA, 0xA1, 0xAA, 0xA1, 0xAA, 0xA1, 0xAA, 0xA1,0x80, 0x02, 0x7F, 0xFC};
const uint8_t Bat7[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0xAA, 0xA9, 0xAA, 0xAD, 0xAA, 0xAD, 0xAA, 0xAD, 0xAA, 0xAD, 0xAA, 0xA9,0x80, 0x02, 0x7F, 0xFC};

 

mir0tv0rec
Offline
Зарегистрирован: 19.09.2018

Тут же рисуется битовая маска 20 точек (2х10 точнее), судя по всему (библиотеку не пользовал) меняй значения:

 const uint8_t Bat1[] U8G_PROGMEM = {0x7F, 0xFC, 0x80, 0x02, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,0x80, 0x02, 0x7F, 0xFC};

, рисунок и количество точек, должно получится, как тебе нужно.

VanGogh
Offline
Зарегистрирован: 07.01.2022

Получается мне нужно свою картинку создать, закинуть ее в image2code и сгенерировать двоичный массив, который вставить вместо строк автора const uint8_t Bat1[] U8G_PROGMEM = { }?

А как из двоичного массива обратно в картинку переконвертировать, чтоб понять что автор написал и отмасштабировать bmp?  

VanGogh
Offline
Зарегистрирован: 07.01.2022

С масштабированием разобрался. Команда u8g.setScale2x2(); и обратная ей u8g.undoScale(); в цикле do. 

Другой вопрос. Почему при изменении напряжения на лабораторнике (подключен "+" к пину VIN) от 4,2 до 3,2В показывает проценты отличные от map?  При 5,2В - 100%, при 4,2В - 0%, хотя в map стандартные значения li-ion.

void readVcc() 
{
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#else
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA, ADSC)); // measuring
  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH
  uint8_t high = ADCH; // unlocks both
  long result = (high << 8) | low;

  result = 1.080 * 1023 * 1000 / result; // расчёт реального VCC
  Voltage = int(result);
  Voltage = map(Voltage, 3200, 4200, 0, 100);
  Voltage = constrain(Voltage, 0, 100);
}

 

Я бы хотел от 2S питать свое устройство,ом будет это радио и при изменении в скетче  Voltage = map(Voltage, 3200, 8400, 0, 100); вообще доходит при 7В до 73% и дальше хоть крути, хоть нет, а процент не растет.

Может нужна какая калибровка напряжения при прошивке или еще как?

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

А по схеме vin куда подключен? Пологаю что на стабилизатор? Вы напряжение для начала посмотрите какое мк измеряет.
МК измеряет что на него приходит и при напряжении более 5,5 В МК сгорает (по даташиту) соответственно чтоб на vin подать больше, плата стабилизирует вход. 1. Я бы узнал толерантность дисплея и радио к 5 вольтам 2. Если такой нет, то напряжение можно измерять аналоговым пином через резисторный делитель, настроив изначально внутреннее опорное напряжение.
Вольтметром посмотрите что между VCC и GND