Обновлено. Стерео радиоприёмник Rda5807m + Attiny13a ценой меньше 1$


Как то искал на Али что нибудь для ардуино за дёшево.
Наткнулся на данную платку RDA5807m.

Характеристики FM-тюнера RDA5807m:
* Все в одном корпусе, практически не требуется внешних компонентов
* КМОП технология
* Полоса частот от 50 МГц до 115 МГц
* Настраиваемый шаг между каналами – 200 кГц, 100 кГц, 50 кГц, 25 кГц
* Поддерживает RDS/RBDS

* Высококачественный АЦП
* Синтезатор частот полностью встроен в микросхему
* Автоматическая регулировка усиления
* Цифровое адаптивное подавление шума
* Поддержка выхода звука как в моно, так и в стерео
* Индикатор уровня сигнала (Receive signal strength indicator — RSSI) и SNR
* Усилитель низких частот
* Регулировка звука и функция mute
* Цифровой интерфейс I2C
* Нагрузка на выходе звукового канала 32 Ом
* Встроенный LDO регулятор
* Корпус MSOP (10 выводов)

Электрические параметры FM тюнера RDA5807m:
* Напряжение питания — 3 вольта (от 1,8 до 3,3 вольт)
* Температура окружающей среды — 27 градусов Цельсия (от -20 до +75 градусов Цельсия)
* Ток потребления в рабочем режиме — до 21 мА
* Ток потребления в спящем режиме – 5 мкА
* Коэффициент нелинейных искажений – 0,15 – 0,2 %
* Максимальная частота I2C – 400 кГц

Для начала нашёл библиотеку для работы с радио, и опробовал на Arduino pro mini

!!! Внимание Arduino надо питать от 3.3В !!!, тк питание радио макс 3.3В.

Радио заработало сразу.
Звук чистый, без искажений на высоких частотах ( как на 174ха34), в наушниках звук громкий, достаточный.

Дальше решено было конструкцию удешевить,
Применить контроллер Attiny13a


Подключил библиотеки для attiny13

В контроллере Attiny13 всего 1024 байт памяти и нет железного протокола i2c.

После недели мучений по эмуляции протокола I2C, радио заработало. Но умело оно только включать радио на одну станцию.
На большее просто не хватало памяти.
И началясь тогда оптимизация кода, битва шла за каждый байт.
Скетч
Что может код:
*** Новое** Автопоиск станций ( при вкл если зажата SK)
* Прееключать радостанции покругу ( из списка в коде)
* Регулировка уровня громкости
* Моно / Стерео ( при вкл если зажата VOL-)
* Усиление Басов вкл /выкл ( при вкл если зажата VOL+)
* Все режимы запоминаются в память.

#include <util/delay.h> 
#include <avr/io.h>
#include <avr/eeprom.h>

#define SDA_release 	        DDRB &= 0xF7
#define SDA_low			DDRB |= 0x08
#define SCL_release		DDRB &= 0xEF
#define SCL_low			DDRB |= 0x10


#define FREQ_STEPS 10
#define RADIO_REG_CHIPID  0x00
#define RADIO_REG_CTRL    0x02
#define RADIO_REG_CTRL_OUTPUT 0x8000
#define RADIO_REG_CTRL_UNMUTE 0x4000
#define RADIO_REG_CTRL_MONO   0x2000
#define RADIO_REG_CTRL_BASS   0x1000
#define RADIO_REG_CTRL_SEEKUP 0x0200
#define RADIO_REG_CTRL_SEEK   0x0100
#define RADIO_REG_CTRL_RDS    0x0008
#define RADIO_REG_CTRL_NEW    0x0004
#define RADIO_REG_CTRL_RESET  0x0002
#define RADIO_REG_CTRL_ENABLE 0x0001

#define RADIO_REG_CHAN    0x03
#define RADIO_REG_CHAN_SPACE     0x0003
#define RADIO_REG_CHAN_SPACE_100 0x0000
#define RADIO_REG_CHAN_BAND      0x000C
#define RADIO_REG_CHAN_BAND_FM      0x0000
#define RADIO_REG_CHAN_BAND_FMWORLD 0x0008
#define RADIO_REG_CHAN_TUNE   0x0010
#define RADIO_REG_CHAN_NR     0x7FC0
#define RADIO_REG_R4    0x04
#define RADIO_REG_R4_EM50   0x0800
#define RADIO_REG_R4_SOFTMUTE   0x0200
#define RADIO_REG_R4_AFC   0x0100
#define RADIO_REG_VOL     0x05
#define RADIO_REG_VOL_VOL   0x000F

#define RADIO_REG_RA      0x0A
#define RADIO_REG_RA_RDS       0x8000
#define RADIO_REG_RA_RDSBLOCK  0x0800
#define RADIO_REG_RA_STEREO    0x0400
#define RADIO_REG_RA_NR        0x03FF

#define RADIO_REG_RB          0x0B
#define RADIO_REG_RB_FMTRUE   0x0100
#define RADIO_REG_RB_FMREADY  0x0080


#define RADIO_REG_RDSA   0x0C
#define RADIO_REG_RDSB   0x0D
#define RADIO_REG_RDSC   0x0E
#define RADIO_REG_RDSD   0x0F

// I2C-Address RDA Chip for sequential  Access
#define I2C_SEQ  0x20

// I2C-Address RDA Chip for Index  Access
#define I2C_INDX  0x22


#define   RADIO_BAND_NONE     0x0
#define   RADIO_BAND_FM       0x1
#define   RADIO_BAND_FMWORLD  0x2

uint16_t registers[12];
uint8_t  data[5];
//uint8_t fm, vol, BASS, MONO, ns;
bool BTNUP, BTNDN, BTNSK ;

int main( void ){
  DDRB = 0x00;    //PORTB = Inputs
  PORTB = 0x87;   //Set Outputs to Low (when DDRB is set to low the pin associated goes Hi-Z)
   for (byte i = 0; i <5; i++) data[i]=EEPROM_read(i);
  _delay_ms(1000); 
  setVol();
  setFrequency();
  if (!(PINB & (1<<PINB0))) EEPROM_write(2, !(data[2]));
  if (!(PINB & (1<<PINB1))) EEPROM_write(3, !(data[3]));
  if (!(PINB & (1<<PINB2))) scan();
  setBassBoost();
while(1){
     
 if (!(PINB & (1<<PINB2)))
   {data[0] ++;
   if (data[0]>data[4]) data[0]=1;  
   setFrequency();
   EEPROM_write(0, data[0]);
   while((!(PINB & (1<<PINB2))));}
 if (!(PINB & (1<<PINB1)))
   {data[1] --;
   if (data[1]<1) data[1]=1;  
   setVol();
   while((!(PINB & (1<<PINB1))));}
  if (!(PINB & (1<<PINB0)))
   {data[1] ++;
   if (data[1]>15) data[1]=15; 
   setVol();
   while((!(PINB & (1<<PINB0))));}
   _delay_ms(50);
  } 
}



void scan(void)
{
  data[4] = 0;
  data[0]=0;
  int ch_prev = 0;
  EEPROM_write(4, 1);
  setFrequency();

 for (int i = 0; i < 100; i++)
 {
   registers[RADIO_REG_CTRL] |= RADIO_REG_CTRL_SEEKUP | RADIO_REG_CTRL_SEEK;
  _saveRegister(RADIO_REG_CTRL);
  _delay_ms(400); 
  _readRegisters();
  uint16_t ch = registers[RADIO_REG_RA] & RADIO_REG_RA_NR;
  if (ch > ch_prev) {
  if (registers[RADIO_REG_RA] & RADIO_REG_RA_STEREO)
    {data[4]++; EEPROM_write(data[4]+4, ch);
     ch_prev = ch; }
 }
 EEPROM_write(4, data[4]);
 registers[RADIO_REG_CTRL] &= (~RADIO_REG_CTRL_SEEK);
 _saveRegister(RADIO_REG_CTRL);
}}

void setVol(void)
{  registers[RADIO_REG_VOL] = (0x9080 | data[1]); 
   _saveRegister(RADIO_REG_VOL);
   EEPROM_write(1, data[1]);
}

void setBassBoost()
{ registers[RADIO_REG_CTRL] &= (~RADIO_REG_CTRL_SEEK);
  if (data[3]) registers[RADIO_REG_CTRL] |= RADIO_REG_CTRL_MONO;
  if (data[2])  registers[RADIO_REG_CTRL] |= RADIO_REG_CTRL_BASS;
  _saveRegister(RADIO_REG_CTRL);
}

void setFrequency(void) {
 uint8_t newChannel;
  uint16_t regChannel = 0; //registers[RADIO_REG_CHAN] & (RADIO_REG_CHAN_SPACE | RADIO_REG_CHAN_BAND);
  newChannel = EEPROM_read(data[0]+4);
  regChannel += RADIO_REG_CHAN_TUNE; // enable tuning
  regChannel |= newChannel << 6;
  // enable output and unmute
  registers[RADIO_REG_CTRL] |= RADIO_REG_CTRL_OUTPUT | RADIO_REG_CTRL_UNMUTE | RADIO_REG_CTRL_ENABLE; //  | RADIO_REG_CTRL_NEW
  _saveRegister(RADIO_REG_CTRL);
  registers[RADIO_REG_CHAN] = regChannel;
  _saveRegister(RADIO_REG_CHAN);
   
  registers[RADIO_REG_R4] = RADIO_REG_R4_EM50;
  _saveRegister(RADIO_REG_R4);
} // setFrequency()

void _readRegisters()
{ 
    i2c_start(I2C_SEQ+1);
    for (byte i = 0; i < 2; i++) 
  {registers[0xA+i]= _read16();}
    i2c_stop();
}

uint16_t _read16(void)
{ uint8_t hiByte = i2c_read();
  uint8_t loByte = i2c_read();
  return(256*hiByte + loByte);
} // _read16

// Save one register back to the chip
void _saveRegister(byte regNr)
{
  i2c_start(I2C_INDX);
  i2c_write(regNr);
  _write16(registers[regNr]);
   i2c_stop();
} // _saveRegister

void _write16(uint16_t val)
{
  i2c_write(val >> 8); 
  i2c_write(val & 0xFF);
} // _write16

void i2c_clk(void)
{
  SCL_release;    //Release Clock
  _delay_us(5);
  SCL_low;      //Pull Clock Low
}
char i2c_read()
{
         unsigned char inData;
         inData=0x00;
         for(int inBits = 0; inBits < 8; inBits++)
         {
                SDA_release;	
                SCL_release;			//Clock High
               _delay_us(5);
                inData <<= 1;
                inData |=(!(!(PINB & 0x08)));
		SCL_low;	//Clock Low
	}
         SDA_low;              //Release Data to check for ACK
         i2c_clk();
         SDA_release;
    return inData;
}

/**************************************************************/
void i2c_write(char data)
{
byte  i;

  for (i=0;i<8;i++)            //Clocks out byte MSB first
  {
    if (data & 0x80)  {SDA_release;}  //Release Data
    else        {SDA_low;};   //Pull Data Low
    data = data * 2;
    i2c_clk();
  }
         SDA_low;              //Release Data to check for ACK
         i2c_clk();
         SDA_release;
}
/**************************************************************/
void i2c_start(char data)
{ 

  SDA_low;    //Pull Data Low
  SCL_low;    //Pull Clock Low
  i2c_write(data);
}
/**************************************************************/
void i2c_stop(void)
{
  SCL_release;  //Release Clock
  SDA_release ; //Release Data
}
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
  while(EECR & (1<<EEWE)); /*Ждать завершения предыдущей записи*/
  EEAR = uiAddress; /*Проинициализировать регистры*/
  EEDR = ucData;
  EECR |= (1<<EEMWE); /*Установить флаг EEMWE*/
  EECR |= (1<<EEWE); /*Начать запись в EEPROM*/
}
unsigned char EEPROM_read(unsigned int uiAddress)
{
  while(EECR & (1<<EEWE)); /*Ждать завершения предыдущей записи*/
  EEAR = uiAddress; /* Проинициализировать регистр адреса*/
  EECR |= (1<<EERE); /*Выполнить чтение*/
  return EEDR;
}

}


Для приёмника была изготовлена плата методом ЛУТ

Конденсаторы на плате 10 мкФ керамические.

Управление
SK- Переключение станций
Vol + — Громкость +
Vol — - Громкость — Удерживаем Vol+, короткое нажатие SK — Усиление Басов
Удерживаем Vol-, короткое нажатие SK — Моно/ Стерео

Контроллеры Attiny13a 10 штук 3.2$ 0.32$ Штука

Стабилизатор AMS1117 10 штук 0.39$ 0.04$ Штука

Готовое радио 0.44 + 0.32 + 0.04 = 0.80$ 50р. ))

Документация, скетч, библиотека attiny13

Новый код с автопоиском

Советы по оптимизации кода приветствуются))
Планирую купить +125 Добавить в избранное +80 +154
+
avatar
  • ABATAPA
  • 03 сентября 2015, 10:51
0
DC-DC раз в 6 её больше. :)
+
avatar
  • kotmorse
  • 26 октября 2016, 18:06
0
Для слабых сигналов радиостанций Ардуина и вообще микроконтроллеры не годятся — шумят.
+
avatar
  • ABATAPA
  • 27 октября 2016, 21:49
0
О! Спустя более года? ;) Подобное видел на ixbt — там спустя 8 лет ответили. Так что всё ещё впереди! :)
+
avatar
0
А на чем тогда всякую дополнительную логику реализовывать?
+
avatar
  • demonk
  • 21 февраля 2017, 15:31
0
А МК можно и в спячку ложить с пробуждением по кнопкам — и шуметь не будет и батарейку съэкономит.
А радио само цифровое и на сверхчувствительность явно не рассчитанное.
+
avatar
  • airwave
  • 03 сентября 2015, 10:56
0
а можно скет для Ардуино?
+
avatar
0
Этотт же код работает и на ардуино про мини
8 — Vol+
9 Vol-
10 — Sk
11 — 1 контакт RDA
12 — 2 Контакт RDA

— Либо подключите библиотеку github.com/mathertel/Radio/archive/master.zip

Там есть простые примеры.
+
avatar
  • ksiman
  • 03 сентября 2015, 11:03
0
Где готовая плата?
+
avatar
+3

Первая ревизия платы, новую ещё не травил.
+
avatar
  • yurok
  • 03 сентября 2015, 11:32
+23
адский ЛУТ )

советы:
1 — не делайте прямых (острых) углов на дорожках — они этого не любят
2 — лудите или сплавом Розе или припоем с помощью оплетки
3 — уделите минут 30 почитать как разводить платы
4 — используйте хороший паяльник с термостабилизацией
5 (опцион) — фотки как нить получше может получатся…

тогда будет получаться так, что низя будет вашими платами пугать детей — вот будешь плохо учится — все устройства у тебя будут ТАКИМИ! Получишь двойку — в школу вот с таким радио пойдешь! еще раз будешь драться — закажем тебе телефон у этого дяди, и будешь с ним ходить не меньше месяца!

но за труд однозначно плюс
+
avatar
+15
Мой первый ЛУТ ))
+
avatar
  • uZver
  • 03 сентября 2015, 17:51
0
Чем плохи прямые углы?
+
avatar
  • ksiman
  • 03 сентября 2015, 17:56
+28
Бегущие электроны по инерции выпадают :)
+
avatar
  • DenBond7
  • 03 сентября 2015, 18:15
+7
+
avatar
  • Bacchus
  • 04 сентября 2015, 12:45
+1
Это только при очень сильных разгонах ©

Старая байка про разгон 15 дюймового мониитора до 17 дюймов
+
avatar
  • yurok
  • 03 сентября 2015, 18:24
0
электроны, особенно слегка перекормленные, не вписываются в поворот и пробегают прямо — от этого дорожка портится
+
avatar
  • DikiyMan
  • 04 сентября 2015, 00:11
0
собственно, iXBT'шники уже ответили, что к чему.
+
avatar
  • IGeras
  • 06 сентября 2015, 17:48
+1
+
avatar
0
> уделите минут 30 почитать как разводить платы
А что для начинающих посоветуете?
+
avatar
  • Sentinel
  • 05 сентября 2015, 09:18
+1
кечиева почитать…
+
avatar
-1
зпазеба
+
avatar
  • IGeras
  • 06 сентября 2015, 17:50
+1
Выше скачайте док почитайте, как раз начинающим
+
avatar
0
спасибо
+
avatar
  • Valodr
  • 10 января 2016, 11:21
0

1 — иногда без прямых углов не обойтись
2 — лудил обычным оловом с канифолем
3 — до этой платы, последний раз разводил простенькие платы еще в школе, 20 лет назад
4 — использовал паяльник ЭПСН 40/220
5 — фотка как получилась, так и получилась)

Это мой первый в жизни ЛУТ, по краям платы получились дефекты, в школе платы разводил нитрокраской или лаком для ногтей, рисовал в тетрадке в клеточку)))

Все ваши пункты желательны, но все же предпочтительней прямые руки))
+
avatar
  • yurok
  • 11 января 2016, 00:36
+1
1 почти всегда можно обойтись
2 так тоже можно — но как я написал быстрее и результат немного лучше
3 норм
4 попробуйте нормальный — удивитесь
5 норм

у меня как-то так: mySKU.me/blog/aliexpress/37390.html
+
avatar
  • yurok
  • 03 сентября 2015, 11:12
+11
говорите за каждый байт боролись а в циклах используете int который кушает 2 байта…
тип byte вам за глаза хватит — 1 байт
+
avatar
+1
Спасибо сэкономил 6 байт. ))
Размер скетча в двоичном коде: 960 байт
+
avatar
0
можно еще местами юзать тернарный оператор вместо if и инкремент/декремент до переменной
+
avatar
0
Если так правильно то ещё минус 8 байт.
vol? vol: 1;
// if (vol<1) vol=1;
+
avatar
0
да, i++ на ++i поменяли? Тоже вроде должно уменьшить)
+
avatar
0
не помогло )).

Придёт следующяя партия приёмников, буду делать универсальный код.
При первом старте идёт сканирование диапазона и запоминание номеров станций в епром. В 100 байт надо будет уложится ))
+
avatar
0
значит само соптимизировалост)
+
avatar
  • OreSama
  • 03 сентября 2015, 12:56
+1
Там ещё много чего можно. Например, вместо data=data*2 сделать data=<<1, если компилятор проглотит. Или data+=data. И проверку на максимальную громкость сделать как volume&=0x0F. И в сериях условий трёхкратную проверку PINB заменить однократной.
+
avatar
0
data=data*2 data+=data размер тот же,
остальное пока обдумываю.

трёхкратную проверку PINB заменить однократной. 6 байт.

if PINB {
if (1<<PINB0) BTNUP=0;
if (1<<PINB1) BTNDN=0;
if (1<<PINB2) BTNSK=0;
}
// if (PINB & (1<<PINB0)) BTNUP=0;
// if (PINB & (1<<PINB1)) BTNDN=0;
// if (PINB & (1<<PINB2)) BTNSK=0;
+
avatar
  • AndyBig
  • 03 сентября 2015, 16:46
+1
вместо data=data*2 сделать data=<<1
Сейчас уже практически все компиляторы сами умеют такую оптимизацию :)
+
avatar
  • Rzzz
  • 03 сентября 2015, 11:22
0
А амплитудную модуляцию это приёмник умеет? Хочется самолетики послушать.
+
avatar
0
Не умеет.
+
avatar
  • SerjNSK
  • 03 сентября 2015, 11:35
+1
Дык он все равно выше 115 не умеет. В авиа с 118 начинается диапазон.
+
avatar
  • Rzzz
  • 03 сентября 2015, 16:13
0
Да, я прочитал потом характеристики по подробнее, первый раз читал наискосок. Но поправить пост уже не смог.
+
avatar
  • ksiman
  • 03 сентября 2015, 12:54
+1
А амплитудную модуляцию это приёмник умеет? Хочется самолетики послушать.
Для этого есть другие недорогие устройства
Подсказка — R820T
+
avatar
  • Rzzz
  • 03 сентября 2015, 16:25
+1
У меня есть Yaesu для этого, но! Ей не сильно удобно пользоваться и она привлекает внимание. И стоит дорого, обидно потерять. А потерять можно, например, из-за повышенного рвения служб безопасности.
Вот и виделось такое компактное устройство, с мизерной ценой, которое можно брать с собой в самолёт.
+
avatar
+2
Ноутбук и тв-тюнер точно вопросов не вызовут, с андроидом rtl sdr тоже работает ок, батарею только как не в себя жрет.

Единственное с антенной — уже на борту могут привязаться.
+
avatar
  • Rzzz
  • 04 сентября 2015, 09:33
0
Это все как- то нелогично сложно. вот такую платочку бы, ардуинку, пару кнопок и батарейку. Стоило бы рублей 300.
+
avatar
0
Баофенг на RDA с переделкой на АМ, в сети есть мануалы…
+
avatar
  • Irodenko
  • 03 сентября 2015, 11:31
0
на контроллеры ссылка не открывается.
+
avatar
0
Спасибо исправил.
+
avatar
  • alkoizh
  • 03 сентября 2015, 11:44
+1
Интересно. А плата с TEA5767 FM по командам совпадает? Внешне и по выводам всё совпадает. Можно с Вами проконсультироваться по данной разработке? alkoizh собака rambler.ru. Cпасибо.

Прочитал на странице продавца: «Использование общего 102BC модуль пакета, Пользователи могут непосредственно заменить использование, Без изменения цепи дизайн».
+
avatar
+2
RDA5807 обратно совместима с TEA5767,
RDA может работать в 2x режимах:
— В своём родном ( как в моём скетче)
— В режиме совместимости с TEA

На моём коде TEA работать не будет.

Вот код режима совместимости www.5v.ru/start/em5807m-arduino-nano-30.htm
+
avatar
  • Alex_74
  • 03 сентября 2015, 11:48
0
А антенна у радио где? Как антенну мутили? Как с чувствительностью?
+
avatar
0
Антенна проводок, на схеме под динамиками.
По чувствительности лучше чем у 174ха34.
+
avatar
+4
На али продаётся много контроллеров ATINY13a, лочёных для записи через USBASP
В моей партии из 5 штук 4 были лоченые.
Этот Лок легко снимается высоковольтным программатором.

Скетч из статьи мне не помог, тк кроме неправильно выставленых фюзов, ещё был лок на чтение. И фюзы менять не давало.

Подправленый скетч
Скетч
#define  HFUSE  0xFF   // Defaults for ATtiny25/45/85
#define  LFUSE  0x6A



#define  RST     13    // Output to level shifter for !RESET from transistor to Pin 1
#define  CLKOUT  12    // Connect to Serial Clock Input (SCI) Pin 2
#define  DATAIN  11    // Connect to Serial Data Output (SDO) Pin 7
#define  INSTOUT 10    // Connect to Serial Instruction Input (SII) Pin 6
#define  DATAOUT  9    // Connect to Serial Data Input (SDI) Pin 5 
#define  VCC      8    // Connect to VCC Pin 8




int inByte = 0;         // incoming serial byte Computer
int inData = 0;         // incoming serial byte AVR

void setup()
{
  // Set up control lines for HV parallel programming
  pinMode(VCC, OUTPUT);
  pinMode(RST, OUTPUT);
  pinMode(DATAOUT, OUTPUT);
  pinMode(INSTOUT, OUTPUT);
  pinMode(CLKOUT, OUTPUT);
  pinMode(DATAIN, OUTPUT);  // configured as input when in programming mode

  // Initialize output pins as needed
  digitalWrite(RST, HIGH);  // Level shifter is inverting, this shuts off 12V

  // start serial port at 9600 bps:
  Serial.begin(9600);

  establishContact();  // send a byte to establish contact until receiver responds

}


void loop()
{
  // if we get a valid byte, run:
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();
    Serial.println(byte(inByte));
    Serial.println("Entering programming Mode\n");

    // Initialize pins to enter programming mode
    pinMode(DATAIN, OUTPUT);  //Temporary
    digitalWrite(DATAOUT, LOW);
    digitalWrite(INSTOUT, LOW);
    digitalWrite(DATAIN, LOW);
    digitalWrite(RST, HIGH);  // Level shifter is inverting, this shuts off 12V

    // Enter High-voltage Serial programming mode
    digitalWrite(VCC, HIGH);  // Apply VCC to start programming process
    delayMicroseconds(20);
    digitalWrite(RST, LOW);   //Turn on 12v
    delayMicroseconds(10);
    pinMode(DATAIN, INPUT);   //Release DATAIN
    delayMicroseconds(300);

    //Programming mode

    readFuses();

    //Write hfuse
    Serial.println("Writing hfuse");
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x40, 0x4C);
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, HFUSE, 0x2C);
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x74);
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x7C);

    //Write lfuse
    Serial.println("Writing lfuse");
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x40, 0x4C);
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, LFUSE, 0x2C);
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x64);
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x6C);

    //Erase device
    Serial.println("Erase device");
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x80, 0x4C);
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x64);
    shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x6C);
    while (!digitalRead(DATAIN));

    readFuses();

    Serial.println("Exiting programming Mode\n");
    digitalWrite(CLKOUT, LOW);
    digitalWrite(VCC, LOW);
    digitalWrite(RST, HIGH);   //Turn off 12v
  }
}


void establishContact() {
  while (Serial.available() <= 0) {
    Serial.println("Enter a character to continue");   // send an initial string
    delay(1000);
  }
}

int shiftOut2(uint8_t dataPin, uint8_t dataPin1, uint8_t clockPin, uint8_t bitOrder, byte val, byte val1)
{
  int i;
  int inBits = 0;
  //Wait until DATAIN goes high
  while (!digitalRead(DATAIN));

  //Start bit
  digitalWrite(DATAOUT, LOW);
  digitalWrite(INSTOUT, LOW);
  digitalWrite(clockPin, HIGH);
  digitalWrite(clockPin, LOW);

  for (i = 0; i < 8; i++)  {

    if (bitOrder == LSBFIRST) {
      digitalWrite(dataPin, !!(val & (1 << i)));
      digitalWrite(dataPin1, !!(val1 & (1 << i)));
    }
    else {
      digitalWrite(dataPin, !!(val & (1 << (7 - i))));
      digitalWrite(dataPin1, !!(val1 & (1 << (7 - i))));
    }
    inBits <<= 1;
    inBits |= digitalRead(DATAIN);
    digitalWrite(clockPin, HIGH);
    digitalWrite(clockPin, LOW);

  }


  //End bits
  digitalWrite(DATAOUT, LOW);
  digitalWrite(INSTOUT, LOW);
  digitalWrite(clockPin, HIGH);
  digitalWrite(clockPin, LOW);
  digitalWrite(clockPin, HIGH);
  digitalWrite(clockPin, LOW);

  return inBits;
}

void readFuses() {
  //Read lfuse
  shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x04, 0x4C);
  shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x68);
  inData = shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x6C);
  Serial.print("lfuse reads as ");
  Serial.println(inData, HEX);

  //Read hfuse
  shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x04, 0x4C);
  shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x7A);
  inData = shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x7E);
  Serial.print("hfuse reads as ");
  Serial.println(inData, HEX);

  //Read efuse
  shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x04, 0x4C);
  shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x6A);
  inData = shiftOut2(DATAOUT, INSTOUT, CLKOUT, MSBFIRST, 0x00, 0x6E);
  Serial.print("efuse reads as ");
  Serial.println(inData, HEX);
  Serial.println();
}



пс. В топике ссылка на продавца со 174 заказами, и не одного отзыва про лок.
+
avatar
-3
115 потолок??? Авиадиапазон не послушать?)))
+
avatar
  • trew911
  • 03 сентября 2015, 12:59
0
148-175мн бы ловилось дпс слушать
+
avatar
  • RomaL
  • 03 сентября 2015, 14:44
+1
И детектор бы в микросхеме узкополосный NFM, а не широкополосный WFM для музыкальных вещалок.
+
avatar
  • Rzzz
  • 03 сентября 2015, 16:49
-1
Они сейчас много где на 450 и в цифре. Слушать можно, но не так просто. А вообще там ничего интересного, слушать там нечего.
+
avatar
+1
угу, в москве apco p25 в основном, один раз только видел аналог, слушать нечего, если только базу собирать номер ву, свидетельства, авто, фио и количество штрафов оплачено/всего)

хотя иногда как радио слушаю, фоном, как сводку происшествий

днем ещё вокруг 440МГц в mototrbo какие-то ппс тоже, но ночью ни разу не слышал их
+
avatar
  • Neos
  • 03 сентября 2015, 15:44
+2
А без Attiny13a радиоприемник не заведется?
+
avatar
+1
Без контроллера не обойтись. ((
+
avatar
  • DenBond7
  • 03 сентября 2015, 16:33
0
И меня этот вопрос интересует. Тоже очень интересно.
+
avatar
0
Без контроллера есть модули с AR1310
+
avatar
0
Fm стерео модуль радио модуль 64 — 108 мГц AR1310 беспроводной модуль для Arduino
aliexpress.com/item/FM-Stereo-Module-Radio-Module-64-108MHz-AR1310-Wireless-Module-for-Arduino/32392341497.html
(from AliExpress Android)
+
avatar
0
Да, вот такой. Не знаю зачем приписали «для Ардуино». Там пять кнопок только припаять и всё.
+
avatar
  • krysa
  • 03 сентября 2015, 16:35
0
deleted
+
avatar
  • KRAB
  • 03 сентября 2015, 18:17
0
Пример бы увидеть…
+
avatar
  • ZucoR
  • 03 сентября 2015, 20:05
+2
ужас, вот раньше народ значл что радио можно сделать из куска провода и лимона, а сейчас ардуино подавай
+
avatar
+1
В скетче от ардуино ни чего не осталось))
Только привычная среда компиляции.
+
avatar
  • Xizel
  • 03 сентября 2015, 22:19
0
Это показан пример-как из 3 кусков кремния сделать приемник. Делал такой же на ардуине с экраном от нокии -на даче самое востребованное.
+
avatar
  • RomaL
  • 04 сентября 2015, 15:00
+3
Мы с другом в детстве соединяли два высокоомных наушника длинным проводом и с радостью переговаривались по такому телефону, а теперь подавай телефоны 8 ядер, LTE, GPS.
Детекторный приёмник можно собрать и сегодня, да вот только слушать на нём нечего — вещательные передатчики ДВ и СВ, качающие в эфир сотни киловатт мощности уже везде выключены. Вот и приходится собирать современные FM приёмники, получая бонусом стереовыход, RDS, стабильный синтезатор частоты гетеродина. И чтобы конфигурировать эти бонусы ставить микроконтроллер.
+
avatar
  • Daredee
  • 05 сентября 2015, 10:50
0
ну можно и по двум стаканчикам переговариваться :)
+
avatar
  • denka55
  • 03 сентября 2015, 22:44
-1
Если не ошибаюсь, #define — это 2 или 4 байта — к сожалению, не могу проверить.
Попробуйте использовать переменные byte, uint8_t и т.д. вместо #define
+
avatar
+2
директива компилятора может занять 2 или 4 байта? каким образом?
+
avatar
  • OreSama
  • 04 сентября 2015, 08:33
0
Как ни странно, она вполне может отжирать байты. Define — явная подстановка строки в исходный текст. Если создать переменную с неизменным значением и использовать её вместо define, после ассемблирования в машинном коде будет не значение, а его чтение из заданного адреса. И в некоторых случаях команда чтения из памяти короче, чем запись в регистр константного значения. Во что оно скомпилируется для данной конкретной атмеги, правда, не знаю, надо проверять.

А вообще для таких вещей лучше использовать const, но мне доводилось видеть компиляторы, которые размножали константное значение в стольки экземплярах, сколько оно встречалось в исходнике.
+
avatar
  • yurok
  • 04 сентября 2015, 08:50
+3
Жесть! из серии очевидное-невероятное!

#define — директива препроцессора — а это означает что еще перед компиляцией — все дефайны исчезнут из кода, а в коде появятся конкретные значения или выражения!

#define — нисколько не потребляет памяти и не может этого никак делать!
использование define — это тоже самое, что использование констант, конкретных значений

const — это инструкция для избегания ошибок программиста — на память никак не влияет, если будет попытка поменять значение переменной — то программа не скомпилируется — и все. На память эта инструкция никак не влияет! переменная займет столько памяти сколько требует ее тип! В настройках компилятора можно задать оптимизацию, чтобы компилятор встроил константы в код, конечно если это нужно.
+
avatar
  • OreSama
  • 04 сентября 2015, 09:43
0
Про данный конкретный AVR не скажу, но в C++Builder если присваивать переменной типа Extended значение, определённое через #define, оно транслировалось в адский ад из четырёх ассемблерных команд. А если бралось из переменной, оно транслировалось в один fld tbyte «адрес»
+
avatar
-1
вы втираете нам какую-то дичь!
+
avatar
0
да и переменная будет, а это указатель и значение. Сэкономить на define можно только если явно указывать на небольших значениях размерность.
+
avatar
  • OreSama
  • 04 сентября 2015, 12:50
+1
Вы таки не понимаете разницу между const и define. Типизированная константа имеет адрес в памяти и все обращения к ней транслируются в чтение данных по указателю. Define — инструкция препроцессора, она просто подставляет один текст вместо другого. Просто сишечка родилась калечной by design и нормальных констант там не было, а затыкать эту дыру предлагалось дефайнами. Однако даже в те дикие времена до людей уже дошло, что обращаться к популярному 4-байтному значению по 2-байтному адресу часто выходит короче, чем тупо дублировать эти 4 байта каждый раз, когда они нужны. И единственный надёжный способ это сделать заключался в том, чтобы объявить константу как переменную и запомнить, что эту переменную менять нельзя.

В данном МК обращение к 16-битному значению не напрямую, а по 12-битному адресу тоже способно сэкономить память.
+
avatar
0
точно! Я и забыл что это 8ми битка))
+
avatar
  • alkoizh
  • 04 сентября 2015, 11:44
0
Я ленивый радиолюбитель. Заказал MCU готовую плату. Только добавь батарейку.
aliexpress.com/item/Mini-1-8V-3-6V-Built-in-MCU-Broadcast-Signal-Receives-76-108MHz-Stereo-Music-Player/739593225.html
+
avatar
  • Xizel
  • 04 сентября 2015, 23:44
+1
Да здесь не в плате готовой дело- а в том, что бы что то собрать своими руками.
+
avatar
  • Fricker
  • 06 сентября 2015, 12:25
0
+
avatar
  • IGeras
  • 06 сентября 2015, 18:13
0
+
avatar
0
Нашёл продавца с ценой ниже 0.44. Ссылка в обзоре.
+
avatar
0
Ams1117 AMS1117-3.3 SOT223
aliexpress.com/item/AMS1117-AMS1117-3-3-SOT223/32452534417.html

Стабилизатор по 0.03$ поштучно.
+
avatar
0
Стерео FM радио модуль RDA5807M беспроводной модуль профор для Arduino RRD-102V2.0
aliexpress.com/item/FM-Stereo-Radio-Module-RDA5807M-Wireless-Module-Profor-For-Arduino-RRD-102V2-0/32464120964.html
0.41$
+
avatar
0
в мобильной версии 0.39$
+
avatar
  • demonk
  • 13 ноября 2015, 13:28
0
А кто-нибудь может порекомендовать компактный DC-DC модуль на 3.3 для такого радио?
Чтоб вход 3.0-4.2, выход 3.3В. Или хотя бы вход 3,3-4,2, выход 3.0В.
Известные KIS-3R33S и yec-sd200 я так понимаю не годятся, т.к. мин вход 4.75В.
+
avatar
0
поставь стабилизатор на 2.5 в и достаточно.
от 3 до 9 можно питать будет.

Приёмник не любит ни чего импульсного.
Подключал к нему усилитель pam8403, приёмник почти перестал ловить. Подключил аналоговый отлично заловило.
+
avatar
  • demonk
  • 16 ноября 2015, 15:57
0
Вот только с линейным стабилизатором как обычно дофига энергии будет на обогрев атмосферы уходить — при напряжении 4,2В — до 40%, при 9В — аж 72% в трубу. Для аккумуляторного девайса довольно расточительно, хотя и просто.
Да и сам то приемник — внутри цифровой и управляется цифрой и ловит же как то, может имеет смысл DCDC, усилок или приемник в экран поместить и LC-фильтрами огородить и работало бы…
+
avatar
0
Ув. автор в вашем архиве содержится прошивка для тиньки (softi2c_13_radio.cpp.hex) можно ли обойтись без ардуино и прошить через программатор если да то какие фьюзы выставлять? И у меня при компиляции вашего скетча возникает ошибка в строке 85
static uint16_t preset[] PROGMEM= {
ide пишет
In file included from softi2c_13_radio.ino:4:0:
softi2c_13_radio.ino:85:26: error: variable 'preset' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
softi2c_13_radio.ino: In function 'void EEPROM_write(unsigned int, unsigned char)':
softi2c_13_radio.ino:275:20: error: 'EEWE' was not declared in this scope
softi2c_13_radio.ino:278:15: error: 'EEMWE' was not declared in this scope
softi2c_13_radio.ino:279:15: error: 'EEWE' was not declared in this scope
softi2c_13_radio.ino: In function 'unsigned char EEPROM_read(unsigned int)':
softi2c_13_radio.ino:283:20: error: 'EEWE' was not declared in this scope
variable 'preset' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
может подскажите как исправить? Библиотеку поставил вашу.Заранее спасибо.
+
avatar
+1
в принципе можно. только частоты каналов в хекс поменять. мои частоты в исходнике…

фьюзы стоят 0x39

выложу мой ардуино иде в нем компилируется ))
+
avatar
0
Я извиняюсь а не могли бы вы компилировать на вашей программе с моими частотами и скинуть прошивку? Фьюзы 0x39 мне не о чём не говорят есть LOW и HIGH фьюзы 0x39 это что?([email protected])
1 100,4 хит-фм
2 100.8 ХИТ
3 101.7 КИСС
4 102,8 Бест Фм
5 102.8 СТИЛЬНОЕ РАДИО
6 102.8 Ностальжи
7 103.2 РАДИО 1
8 103.6 ЭРА
9 104.0 Европа +
10 104.6 Рокс ФМ
11 105.3 Русское Радио
12 105.8 ЛЮКС
13 105.8 Русское Радио
14 106.5 Наше Радио
15 106.9 ЕВРОПА ФМ
16 107.6 Наше ФМ
+
avatar
  • Fizik
  • 07 января 2017, 20:48
0
Можно Ваш Arduino IDE? При компиляции пишет те же ошибки, что и у sergeyovs1980. Прошить удалось только готовый hex через программатор. (0х39 — LOW и 0хFF — HIGH)
+
avatar
  • vsnet
  • 29 ноября 2016, 14:23
0
у меня так же появляется подобная ошибка если вы решили эту проблему опишите подробно как устранить её и
Wap-tolik вам большое спасибо за обзор, но потрудитесь пожалуйста объяснить как решить проблему с ошибкой
скетча возникает ошибка в строке 85
static uint16_t preset[] PROGMEM= {
ide пишет
In file included from softi2c_13_radio.ino:4:0:
softi2c_13_radio.ino:85:26: error: variable 'preset' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
softi2c_13_radio.ino: In function 'void EEPROM_write(unsigned int, unsigned char)':
и т.д…
+
avatar
0
А почему в скетче нет ссылок на PROGMEM? Она обьявлена но не используеться?
+
avatar
  • ars781
  • 30 апреля 2016, 15:48
0
С Ардуино не знаком. Скачал установил. но не компилирует. Ошибки теже что и у sergeyovs1980.
Просьба обьяснить что к чему или прошить с частотами 100.8,103.4, 106.3 и 104.5.
Пробовал код подправить с кодевижн. Но там много чего надо поправлять. также не справлюсь
+
avatar
  • kotmorse
  • 05 сентября 2016, 12:54
0
авиадиспетчеров слушать можно?
+
avatar
  • RONIN
  • 25 октября 2016, 17:17
0
Квакеров можно!
+
avatar
  • abyrwalg
  • 25 октября 2016, 18:37
0
Читать, потом писать!

ПС. Не те частоты, не та модуляция(авиа=АМ); либо СДР, либо найти «ФМ+АМ» приёмничек 'похуже, но с индикатором частоты', они плохо подавляют паразитную для себя модуляцию, — и «перемотать» катушку, уродуя витки.
+
avatar
+1
cloud.mail.ru/public/4rs6/NNGiVLqrH

Новый код а так же hex
Добавил автопоиск станций, активируется если включить приёмник с зажатой кнопкой настройки.
Так же включаются режим моно и бас. Зажатием при включении vol- (моно) и vol+ (бас)

В 1 посте скетч обновил.
+
avatar
0
Большое спасибо за разработку кода прошивки для ATTINY13! Особенно понравилось то что при включении воспроизводится станция, которая играла перед выключением. Wap-tolik, не могли б вы сделать вариант кода с добавлением кнопки (к выв.1) переключения станций назад и убрав из кода включение моно и баса. Ещё хотелось, чтобы сканирование можно было останавливать кратковременным нажатием кнопки SK.
+
avatar
0
1 вывод ресет. Если его включить на чтение кнопки, то тиньку больше не прошить обычным программатором.

Можно сделать настройку вперёд назад. а громкость по кругу, одной кнопкой.
+
avatar
  • Evgenij
  • 20 ноября 2016, 01:56
0
Подскажите, что поменять в скетче, чтобы приёмник сканировал от 64 МГц?
+
avatar
0
В данной реализации можно искать только в одном диапазоне. 87-108. Тк отсев станций идёт по признаку стерео сигнала.
А в фм диапазоне стерео другой модуляции.
+
avatar
  • Evgenij
  • 23 ноября 2016, 02:11
0
Информация не точная. Я работаю с радиопередатчиками. Так раньше, согласен, передатчики ЧМ (советского диапазона 65-74 МГц) были с полярной модуляцией. А примерно лет пять как стали поставлять и устанавливать радиопередатчики с модуляцией с пилот-тоном как в диапазоне FM, так и ЧМ.
У меня приёмник на RDA5807m и ардуинке работает в двух диапазонах в стерео. Хотелось бы попробовать и на Attiny13. Понимаю, что нужно установить какие-то биты в RDA5807m…
Подскажите, как в этом скетче расширить диапазон поиска.
И ещё, можно ли прописать частоты в епром не сканируя? Дело в том, что при сканировании иногда «ловятся» неправильные частоты, особенно, если РТПС находится недалеко. И было бы лучше, как в старом варианте скетча, иметь возможность прописывать нужные частоты. Или, как вариант, добавить функцию редактирования (удалять ненужную станцию, либо делать пропуск станции, например нажатием одновременно трёх кнопок ).
+
avatar
0
Надо просто переключить диапазон. В set fecurency первая строка закоментирравная в место 0 оставить то что закоментиррвано.
Но будет искать только в УКВ диапазоне.

На тиньке бился за каждый байт, сейчас в епром сохраняются только номера каналов. Работа с частотой занимает много места в коде.
+
avatar
  • Evgenij
  • 09 января 2017, 19:49
0
Пробовал раскомментировать. Ничего не меняется. Не ищет в УКВ диапазоне. А как всё-таки поменять диапазон? Хотя бы в первом варианте скетча?
+
avatar
  • sevals
  • 03 декабря 2016, 14:50
+1
Прошивка идеальна для автономного устройства, а вот для стационарного я бы кнопки + — использовал для переключения каналов, от кнопок громкости отказался совсем и регулировал уровень переменным резисторо, и еще очень не хватает функции удаления ненужных станций. Хватит ли памати на реализацию этих пожеланий.
+
avatar
+1
всех приветствую. собрал, работает. почти собрал блютус колонку, хочу в нее поставить этот приемник. но есть проблема с переключением станций.
Автор, если конечно есть возможность, сделай пожалуйста НЕХ, вместо регулировки громкости нужно переключение станций вперед-назад. буду очень благодарен. процесс допиливания колонки встал из-за этого
+
avatar
  • sepryn
  • 18 февраля 2017, 10:30
0
«всех приветствую. собрал, работает.»
Можно подробнее? Какой Arduino IDE компилировали и шили?
+
avatar
  • sepryn
  • 16 февраля 2017, 15:58
0
А у меня никак не компилируется. Перепробовал разные Arduino IDE, везде разные ошибки при компиляции. Что я не так делаю?
+
avatar
+1
Следует использовать только arduino-1.0.6, в других версиях Arduino IDE у меня не получалось…
+
avatar
  • sepryn
  • 18 февраля 2017, 10:27
0
Спасибо за ответ!.. В arduino-1.0.6 у меня тоже нормально компилируется, без ошибок, только никак не могу добиться, чтобы в подменю «Платы» тинька появилась. Вроде всё везде добавил.
+
avatar
+1
Проверь правильный путь в подкаталогах. У меня так — C:\Program Files\Arduino\hardware\attiny13\cores\core13.
+
avatar
  • sepryn
  • 18 февраля 2017, 12:11
0
Вот мой путь C:\Program Files\Arduino\hardware\attiny13\cores\core13
Всё так и есть. Может библиотеки другие? Ты откуда библиотеку брал?
+
avatar
0
Библиотеки выложил автор статьи- ссылка вверху, под фото печатной платы.
+
avatar
  • sepryn
  • 16 февраля 2017, 21:47
0
Arduino: 1.6.4 (Windows 7), Плата«Arduino Nano, ATmega328»

sketch_feb16a.ino: In function 'void EEPROM_write(unsigned int, unsigned char)':
sketch_feb16a:247: error: 'EEWE' was not declared in this scope
sketch_feb16a:250: error: 'EEMWE' was not declared in this scope
sketch_feb16a:251: error: 'EEWE' was not declared in this scope
sketch_feb16a.ino: In function 'unsigned char EEPROM_read(unsigned int)':
sketch_feb16a:255: error: 'EEWE' was not declared in this scope
'EEWE' was not declared in this scope
+
avatar
  • sepryn
  • 18 февраля 2017, 10:35
0
Вопрос к знатокам. Почему компилируется только в Arduino ID -1.0.6? В других версиях ошибки, причём везде разные.
+
avatar
+1
видимо, библиотеки совместимы только с 1.0.6
+
avatar
  • sepryn
  • 20 февраля 2017, 07:51
0
Всё заработало, спасибо Evgenij77! Компилировать только в Arduino ID -1.0.6 и с библиотекой автора. Спасибо!
+
avatar
+2
Прошивка с полуавтоматическим поиском каналов. Ссылка
Переключение каналов одной кнопкой «CH».
Регулировка громкости кнопками "VOL+" и "VOL-". 15 позиций уровня громкости.
Режим «Поиск Каналов» активируется включением питания с зажатой кнопкой «CH ».
Когда приёмник найдёт канал, поиск остановится на 4 секунды для прослушивания.
Если в это время нажать кнопку «CH » и удерживать не менее 4 секунд- канал запишется в память,
если не нажимать- не запишется. После отпускания кнопки сканирование продолжится.
Режим «Моно/Стерео» переключается включением питания с зажатой кнопкой «VOL -».
Режим «УсилениеБаса» переключается включением питания с зажатой кнопкой «VOL +».
Все установленные режимы записываются в EEPROM.
Кнопки: «VOL +» — 5 нога МК, «VOL -» — 6, «CH» — 7.
+
avatar
0
отлично, спасибо. тестить
+
avatar
+1
"«Когда приёмник найдёт канал, поиск остановится на 4 секунды»" это не работает к сожалению
+
avatar
+1
Странно… и это на двух прошивках? У меня-то всё работает… Проверено, и не раз.
+
avatar
+1
возможно фьюзы. как у вас?
у меня
high:FF
low:39
+
avatar
+1
В моём случае:
high:FF
low:6А
А если выставить low:39, то тактовая частота микроконтроллера в несколько раз больше и поиск останавливается на время около 1 секунды.
+
avatar
+1
ну да, делитель на 8. так и думал. спасибо
+
avatar
  • wrong
  • 01 марта 2017, 08:03
+1
Всем привет.
Evgenij77 как прописать все настройки в EEPROM на стадии программирования.
Имеется ввиду:
1. Какие значения и в какие ячейки прописать Mono-Stereo, Bass on/off, последняя станция.
2. Как рассчитать значения и в какие ячейки прописать частоты радиостанций.
Включил и всё готово.
Успехов.
+
avatar
+1
Собрать приёмник. Включить настроить станции громкость. Считать епром. И во все новые приемники зашивать епром.
+
avatar
+1
Wap-Tolik, как всё-таки в первом варианте скетча поменять диапазон на УКВ (64 — 75 МГц)?
+
avatar
  • wrong
  • 01 марта 2017, 17:02
+1
Сделал копию EEPROM.
подробности в приложении.

Может кто разъеснит непонятки.
+
avatar
  • wrong
  • 02 марта 2017, 11:01
+1
Результаты моих экспериментов. Может кому пригодится.
Все данные в шестнадцатеричном виде.
У меня только не сохраняется радиостанция даже если я и пропишу в EEPROM.
При включении шумы, станция только после нажатия ch+ или ch-. Но это я грешу на микросхему приёмника — RDA5807FP. Хотя в другой конструкции сохранение станции работает.

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

Некоторые размышления: уровень громкости можно прописывать EEPROM, всё равно будет регулироваться перед УНЧ, а на освободившийся порт повесить светодиод, который бы мигал при достижении радиостанции с максимальной частотой-2 раза, при достижении радиостанции с минимальной частотой-1 раз. Переключение по кругу не нужно. Трудно ориентироваться какая станция принимается, а так хоть какой то ориентир, если хватит места в МК. Автопоиск включать одновременным нажатием кнопок ch+ и ch- при включении приёмника, а сохранение долгим нажатием ch+.

Успехов.
+
avatar
+1
Желания-то интересные, но свободной памяти в МК уже нет…
+
avatar
  • wrong
  • 02 марта 2017, 13:24
+1
Спасибо за ответ Evgenij77, такие мысли у меня были.
Попробывал последнию прошивку Wap-tolik, станции сохраняет и стартует с этойстанции. Разобрался что писать в ячейку 00-где сохраняются станции. Там пишется номер станции в шестнадцатеричном виде, начиная с ячейки 05-1, 06-2 и.т.д…
Evgenij77 ёщё раз испытал вашу прошивку с каналами, сохраняет станции правильно.
Но при включении необходимо нажать ch. Если нажать ch+ то то начнёт воспроизводится станция выше сохранённой. Если нажать ch- то то начнёт воспроизводится станция ниже сохранённой.
Проверил также прошивку с громкостью, поведение такое же, как и с каналами.

Успехов.
+
avatar
  • wrong
  • 03 марта 2017, 11:59
+1
Добрый день.

Кто собирал, откликнитесь по поводу сохранённой станции при включения приёмника от Evgenij77.
Может только уменя такой глюк.

Модераторы уберите пост:
wrong 01 марта 2017, 17:02
Сделал копию EEPROM.
подробности в приложении.

Может кто разъеснит непонятки.
Только засоряет. Ниже постом всё описано.

Мои мысли по приёмнику:
1. Убрать кнопку громкость. Уровень громкости прописывается в EEPROM — он не вечен. Для чего: испытывал с разными усилителями НЧ, так для одного 4-5 уровня хватит а для другого и 15 было маловато. А для любителей регулировать громкость кнопками можно сделать такой вариант: длительное удержание — увеличение громкости а кратковременное нажатие — уменьшение громкости.
2. Прописать в EEPROM станцию, которая будет стартовать при включении — EEPROM не вечен.
Можно сделать и такой вариант — при работе длительно удерживать кнопку ch+ чтобы записалась станция.
3. Отключить переключение станций по кольцу. При достижении крайних значений частоты радиостанций — станции не меняются при нажатии кнопки в том же направлении.
У нас в городе 16 станций и когда переключаешь по кольцу то начинаешь путаться.
4. Автопоиск включать одновременным нажатием кнопок ch+ и ch- при включении приёмника, а сохранение долгим нажатием ch-.
5. Басс — при включении приёмника нажата ch+. Можно и в программе включать Басс, при конфигурации регистров микросхемы. Хотя при эсперименте в другой конструкции при включении баса появлялись искажения, при отключении пропадали.
6 Моно/Стерео — при включении приёмника нажата ch-.

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

Evgenij7 или Wap-tolik при хорошем настроении, желании и возможностей МК может сделаете хотя бы часть.

Спасибо. Успехов.
+
avatar
+1
1.- Зачем убирать кнопку? Можно её не использовать выпаять… (а EEPROM на жизнь приёмника хватит...)
2.-Прописать можно и все нужные частоты, только не в EEPROM, а в программе…
Приёмник во всех прошивках стартует с той станции, которая была включена последняя. (если не так, попробуйте поменять RDA, или Attiny 13- встречались глючные…
3.- Можно сделать.
4.- Можно попробовать, если хватит памяти…
5 и 6 оставляем, как было? Правильно понял?
На счёт функции длительного удержания какой-либо кнопки- думаю, не получится- мало памяти.
+
avatar
  • wrong
  • 04 марта 2017, 13:19
+1
Добрый день Evgenij77. Спасибо за ответ.

Прочитал Ваше сообщение, подумал, что то я разогнался в предыдущем собщении.
Чтобы Вам не мудрить, отключите переключение станций по кольцу. Прописка станций в программе не нужно. Пока эспериментировал с приёмником, обнаружил две новые станции, поэтому если появится что то новое — то просто переписать EEPROM. А в программе — надо делать много телодвижений, не все это смогут.
Ниже мои мысли, информация для размышлений:
Если ещё бы получилось с громкостью, то получилась бы конструкция для всех. Если отключить например настройку баса и моно/стерео, прописывать их в EEPROM и при включении настройки считываются. Не запоминать станци при отключении а прописать в EEPROM. Если я правильно понял Wap-tolik станция определяется по наличию стереосигнала, может определять станции по наличию станции, если это требует меньше памяти. Можно сделать регулировку громкости двумя кнопками, удерживая кнопку Vol и нажимая кнопку ch+ или ch- регулируем громкость, если этот метод займёт меньше памяти МК. Может ещё что то сделать чтобы освободить память.
Глюки RDA и ATtiny допускаю что это имеет место. Но испытывая последнию прошивку Wap-tolik станции сохраняет и стартует с этойстанции.

Здоровья и успехов.
+
avatar
+1
Обновлённая прошивка.
Прошивка с полуавтоматическим поиском каналов.
Переключение станций кнопками «CH +» и «CH -». Переключение станций по кругу отключено.
Регулировка громкости одной кнопкой «VOL». 15 позиций уровня громкости- от 1 до 15, потом снова 1.
Режим «Поиск Каналов» активируется включением питания с зажатой кнопкой «VOL».
Когда приёмник найдёт канал, поиск остановится на 3 секунды для прослушивания.
Если в это время нажать кнопку «VOL» и удерживать не менее 3 секунд- канал запишется в память,
если не нажимать- не запишется. После отпускания кнопки сканирование продолжится.
Режим Моно/Стерео переключается включением питания с зажатой кнопкой «CH -».
Режим УсилениеБаса переключается включением питания с зажатой кнопкой «CH +».
Все установленные режимы записываются в EEPROM.
Кнопки «CH +» — 5 нога МК, «CH -» — 6, «VOL» — 7.
+
avatar
+1
Управление громкостью сочетанием кнопок «VOL & CH+» и «VOL & CH-» можно сделать, но в таком случае придётся отказаться от полуавтоматического поиска каналов и установки режимов Моно/Стерео и Усиление_Баса кнопками и устанавливать их в EEPROM вручную.
+
avatar
  • wrong
  • 06 марта 2017, 17:20
+1
Evgenij77 спасибо за внимание.
Проверил прошивку, всё работает, перестал даже путаться в каналах и стала включатся запомненная станция. Единственно что не любит старых кнопок, пришлось к макету подпаивать другие кнопки.
Может можно увеличить задержки после нажатия кнопок или как у Вас компенсируется дребезк кнопок.

По поводу управление громкостью сочетанием кнопок «VOL & CH+» и «VOL & CH-» то если у Вас есть желание то буду очень благодарен. Испытаю и это вариант буду вставлять в корпус.

Успехов.
+
avatar
+1
Прошивка с альтернативной регулировкой громкости
Прошивка с автоматическим поиском каналов.
Переключение станций кнопками «CH +» и «CH -».
Регулировка громкости: сочетанием кнопок «VOL & CH+» и «VOL & CH-».
Режим «Поиск Каналов» активируется включением питания с зажатой кнопкой «VOL».
Режим Моно/Стерео переключается включением питания с зажатой кнопкой «CH -» (но начинает действовать при следующем включении приёмника).
Все установленные режимы записываются в EEPROM.
Кнопки «CH +» — 5 нога МК, «CH -» — 6, «VOL» — 7.
+
avatar
  • wrong
  • 07 марта 2017, 13:29
0
Evgenij77 громадное спасибо за прошивку!!!

Проверил, всё работает. Бас я так понимаю только через EEPROM.

Буду теперь заниматься облагораживанием.

Успехов!
+
avatar
  • raefa
  • 17 ноября 2017, 14:09
0
А в этой версии программный антидребезг есть или тоже конденсаторы ставить? Такое ощущение, что второе.
+
avatar
0
ни в одной из прошивок нет программного антидребезга…
+
avatar
  • wrong
  • 07 марта 2017, 21:59
0
Привет всем.
Выкладываю описание EEPROM, может кому пригодится.
+
avatar
0
Прошивка для радио с управлением двумя кнопками.
Оптимальна для приёмников с регулировкой громкости потенциометром.
Прошивка с полуавтоматическим поиском каналов.
Переключение станций кнопками «CH +» и «CH -». Переключение станций по кругу отключено.
Громкость установлена на средний уровень и не изменяется…
Режим «Поиск Каналов» активируется включением питания с зажатыми кнопками «CH +» и «CH -».
Когда приёмник найдёт канал, поиск остановится.
Если нажать кнопку «CH +», канал запишется в память и сканирование продолжится.
Если нажать кнопку «CH -»,- канал пропустится и сканирование продолжится.
Режим «Моно/Стерео» переключается включением питания с зажатой кнопкой «CH -».
Режим «УсилениеБаса» переключается включением питания с зажатой кнопкой «CH +».
Все установленные режимы записываются в EEPROM.
Кнопки «CH +» — 5 нога МК, «CH -» — 6,
+
avatar
0
Параллельно кнопкам советую подключать конденсаторы 0,01-0,1 мкФ, на программный антидребезг не хватает памяти.
+
avatar
  • raefa
  • 15 ноября 2017, 06:52
0
Ощущение, что перекидывает сразу на 3-5 шагов. Пробую конденсаторы.
Как узнать, что цикл поиска станций закончился?
+
avatar
  • raefa
  • 15 ноября 2017, 07:32
0
С конденсаторами получше стало.
Но другой глючок. Находит около 12 станций, запоминает 7. Какое ограничение на максимум?
+
avatar
0
вроде нет никакого ограничения.
А на других прошивках сколько станций запоминает?
+
avatar
0
Можно получить код (Прошивка с полуавтоматическим поиском каналов) в .ino формате
+
avatar
  • wrong
  • 21 марта 2017, 11:30
0
Проверил прошивку. Работает.

Для большей универсальности можно задавать уровень громкости через EEPROM, если возможно.
Испытывал с разными усилителями. С одним усилителем и уровня 6 за глаза, а с другим и уровня 15 маловато будет.
На данном этапе уже 6 видов прошивок, достаточно на все случаи. Большое спасибо авторам.

С Уважением и успехов в личной жизни и творчестве.
+
avatar
0
Пробовал включать приёмник на значительном расстоянии от РТПС. В принципе, чувствительность хорошая. Ранее настроенные каналы слушать можно, но настроить автоматом ничего нельзя- не записывает каналы.
Сделал прошивку с ручным поиском каналов…
+
avatar
0
Прошивка с ручным поиском каналов.
Переключение станций кнопками «CH +» и «CH -».
Регулировка громкости: сочетанием кнопок «VOL» и «CH +» или «VOL» и «CH -».
(Удерживая кнопку «VOL», нажимать«CH +» или «CH -».)
Режим «Поиск каналов» активируется включением питания с зажатой кнопкой «VOL».
Поиск станций кнопками «CH +» и «CH -». Короткое нажатие соответствует шагу 0,1 МГц.
При удержании кнопки- смена частот со скоростью 2 шага в секунду.
Если в режиме поиска каналов нажать кнопку «VOL», канал запишется в память.
Выход из режима поиск каналов- выключением питания.
Режим «Моно/Стерео» переключается включением питания с зажатой кнопкой «CH -».
Режим «УсилениеБаса» переключается включением питания с зажатой кнопкой «CH +».
Все установленные режимы записываются в EEPROM.
Кнопки «CH +» — 5 нога МК, «CH -» — 6, «VOL» —7 нога.
+
avatar
0
на этой версии у меня не работает автопоиск.
+
avatar
0
Читать внимательно- это прошивка с ручным поиском каналов!!!
В режиме поиска нужно много раз нажимать «CH +», или удерживать до появления звука станции. А для записи в память- нажать «VOL». Поиск начинается с частоты 87,5 МГц и до 108МГц.
+
avatar
0
ок, не сразу понял.
+
avatar
0
Преимущества прошивки в том, что можно записать в память станции в любой последовательности и также те, которые автоматически не записываются.
+
avatar
0
это да. чувствительность слабовата у модуля. даже с длинным проводом (антенной) не особо хорошо берет. думал его в портативную колонку засунуть с внутренней антенной. похоже не прокатит
+
avatar
0
Можно получить код (Прошивка с полуавтоматическим поиском каналов) в .ino формате
+
avatar
  • nadim24
  • 06 ноября 2017, 17:22
0
Evgenij77 — а возможно эту прошивку адаптировать на работу энкодера вместо кнопок. Получится те же три кнопки — но управлять приятней. Собрал на кнопках на основе этой прошивки — все работает спасибо — но было бы не плохо с энкодером.
+
avatar
0
Теоретически, да, неплохо. А практически память области программ уже заполнена до предела и обработку контактов энкодера не вместишь.
Если перевести проект на ардуино, то можно добавить и энкодер и дисплей. Но этот уже совсем другой проект…
+
avatar
  • nadim24
  • 08 ноября 2017, 16:08
0
А у Вас случаем мыслей о новом проекте нет с энкодером и дисплеем? Есть классная тема хочу повторить online radio Ka-Radio32 на основе ESP32, вот было бы классно, если бы в online radio добавить функционал FM радио — получился бы комбайн.
+
avatar
  • nadim24
  • 08 ноября 2017, 18:01
0
Связался с разработчиком Ka-Radio32 он сказал что (No more free gpio on KaRadio32....) — отпадает интеграция. Значит буду вешать дополнительно отдельно. А если перенести этот проект на ATtiny85 — памяти хватит для энкодера без экрана?
+
avatar
0
Конечно, на ATtiny85, думаю, можно реализовать и энкодер и дисплей.
Правда, я этим заниматься не буду- нет ни времени ни желания…
+
avatar
  • wrong
  • 28 марта 2017, 18:10
0
Вот по этой причине я и изучал EEPROM.
В автоматическом поиске не все станции находит. Если прописать в EEPROM, то звучание пропущенных станций вполне приличное.
+
avatar
0
Пробовал заливать разные версии кода. Радио страшно шумит, слышно, что станцию нашло, но работает отвратительно. Потом вкачестве контролера взял Arduino Uno c #include <RDA5807M.h> залил пример и все прекрасно работает. В чем может быть проблема?
+
avatar
0
Один такой случай- это разговор ни о чём. Не указано: по какой схеме собирал приёмник, использовал ли усилитель и какой, использовал ли стабилизатор, конденсаторы по питанию, да и банально- качество пайки, флюс…
+
avatar
0
Так я же без претензий. Есть у меня старый касетный магнитофон. Вот решил переделать его на литий + добавить стерео фм.

с Attiny13a у меня следующая связка: акк 18650 -> начинка от дешевого повербанка на одну ячейку(для зарядки акка) здесь же получаю 5в -> беру 5в для усилителя на PAM8403 DC 5V 2 Channel а также эти 5в идут на ams1117-3.3 для Attiny13a и Rda5807m -> c Rda5807m получаю аудиосигнал и отправляю это все на PAM8403 -> теперь эта вся радость должна играть на динамиках. Но увы с Attiny13a ничего не получаеться, искажения ужасные. А вот с Arduino Uno все ок, играет чисто и приятно. на Attiny13a пробовал заливать разные ваши варианты — результат одинаков. Просто я купил 10 шт Attiny13a и думал куда их приткнуть.
+
avatar
0
PAM8403 с этим радио не работает, у него на выходе шум на MHz

Так же думал сейчас сделаю мини радио. Пришлось ставить аналоговый усилитель 174ун14 с ним хорошо ловит.
+
avatar
  • wrong
  • 05 апреля 2017, 12:01
+1
Для DenBond7.

Читал на форумах что при использовании усилителя PAM8403 приёмник работал плохо, когда подключали аналоговый усилитель то работало хорошо. Попробуйте обычный усилитель а не D класса. Также читал что при использовании усилителя PAM8403 приёмник работал хорошо, но там контроллер ATmega8,
Проведите опыты:
1. Приёмник — аналоговый усилитель.
2. Питание приёмника и PAM8403 от отдельных блоков питания, соединяя только общий провод.
3. Поставьте LC фильтры в питание усилителя, приёмника, контроллера.

Бывает от неудачного рисунка печатных плат

Если что то поможет а дальше решать Вам.

Успехов.
+
avatar
+1
Согласен. Сам использую в приёмнике РАМ8403, Источник питания один, трансформаторный. Разносил плату приёмника и усилитель как можно дальше. Всё нормально.
Преобразователь повербанка может шуметь… Можно запитать плату приёмника со стабилизатором и усилитель от лития напрямую, а зарядку лития производить через платку на ТР4056.
+
avatar
0
Спасибо за ответы. Решил все таки сделать на arduino pro mini. Для этой платы я еще могу код править, для Attiny13a — только заливать умею. 20 мА в час меня не сильно пугают. Понимаю, что это с пушки по воробьях, но зато звук прекрасный, шумов вообще нет. Еще раз спасибо за статтью.
+
avatar
0
Всё-таки разберитесь с шумами- из-за чего они возникают?
Микроконтроллер передаёт команды для конфигурирования приёмника- включения и настроек на канал, громкость и т.д. После настройки приёмника на станцию микроконтроллер можно вытащить из панельки и приёмник будет работать дальше, пока не отключишь питание.
Предполагаю, что помехи проходят по питанию, а в ардуино по питанию стоят конденсаторы и стабилизатор, поэтому и звук чище с ардуино.
+
avatar
0
Добрый день. Спасибо за ваши советы. Приношу свои извенения. Я был не внимателен и не читал детально ваши инструкции. Я просто не проводили настройку, по этому и ничего не играло. Сделал все по инструкции — и ВСЕ КЛАССНО РАБОТАЕТ! Спасибо за ваш труд. Теперь работа на даче будет не скучной )))
+
avatar
0
Подскажите пожалуйста, какое напряжение должно быть на выводах GND и L, GND и R. У меня через arduino по i2c сигналы проходях, а динамик не играет -только шум. Напряжение 0,04 в. Или это из-за того, что не настроена плата, или из-за того, что я спалил порты. Спасибо
+
avatar
+1
На выводах L и R RDA5807M во включенном состоянии напряжение 0,8- 0,9 вольт. Если 0,04- 0,05 вольт, то модуль выключен.
Возможные причины: не залита прошивка в микроконтроллер, неправильно выставлены фьюзы, или перепутаны местами выводы i2c.
+
avatar
0
Подскажите собрать приемник на основе ATTINY85 Digispark получится? — один есть в наличии. И как у приемника RDA5807M с чувствительностью относительно TEA5767 и QN8075?
+
avatar
+1
Получится практически на любой Аттини, в которую поместится код. Заливал hex в ATTINY85 без Digispark, работает также.
Чувствительность этих цифровых приёмников примерно одинакова. Но у них, по сравнению с аналоговыми, избирательность не очень хорошая.
+
avatar
  • gec
  • 24 сентября 2017, 17:22
0
Спасибо за статью!
Подскажите, в характеристика указано "* Полоса частот от 50 МГц до 115 МГц"
Можно ли изменить скетч для приема станций в УКВ диапазоне, на пример 66 МГц, если да то как?
+
avatar
0
хочу скрестить этот модуль с модулем bluetooth krc 86. суть такая:
при отсутствии блютус коннекта на модуле квлючается aux. на него идет сигнал с радио. (тут все ясно, все работает)
к блютус модулю подключены 3 физические кнопки (на замыкание) плей-пауза, вперед, назад. хотел на эти-же кнопки посадить радио. не получается. на радио общий контакт кнопок сидит на земле, а на блюте общий кнопок не на земле. так же на модулях на контактах управления (для кнопок) есть напряжения, и при параллельном подключении кнопок модули сливают напругу управления друг на друга. (решается установкой резисторов 33к). при этом управление радио работает, блютус нет, т.к его общий контакт кнопок сидит на земле.
может кто подскажет как быть в таком случае?
+
avatar
0
Пробуйте использовать оптроны (например РС817) для гальванической развязки.
+
avatar
0
собрал, сделал сенсорное управление, упаковал в корпус портативной колонки. прием очень плохой. антенна телескоп 40см. все копруса, на длинных проводах, навесным монтажем ловил гораздо лучше. экранирование модуля не помогает.
+
avatar
  • nadim24
  • 06 ноября 2017, 17:15
0
Усилитель какой? PAM8403 цифровой усилитель класса D — гасит чувствительность.
+
avatar
  • nadim24
  • 06 ноября 2017, 18:10
0
С усилителем возможно я поспешил. Проверял у себя на ЛБП так чувствительность падала, а от аккумулятора в норме.
+
avatar
0
ta2024. T класс, в общем тот же D. выход приемника идет на темброблок, тонкомпенсацию, далее на усь. питание аккумы естественно. думаю нужно делать согласование штыревой антенны с приемником. да и в даташите как то все мутно написано. согласовывать нужно, но с вч я не в ладах
+
avatar
0
хотя судя по даташнику микрухи расчитаны на работу с кабелем наушников либо же со штырем
+
avatar
0
вот бы уважаемый «Evgenij77» добавил в свою последнюю прошивку с ручным поиском каналов совместимость с дисплеем на контроллере SSD1306, было бы замечательно.
что касается плохого приема, провел эксперимент с установкой дросселей в выходную цепь, стало лучше. скоро придут дроссели, которые из даташита, думаю эффект будет ещё лучше.
+
avatar
0
Вообще-то прошивка не моя, я её только немного корректировал.
Вставить в прошивку больше ничего нельзя (если использовать с аттини 13)- область памяти программ заполнена до предела.
Что касается приёма- пробуйте ставить дроссели и конденсаторы по питанию модуля приёмника. Да и неплохо бы усилитель запитать через дроссель.
+
avatar
0
собрал архив, если эта тема кому ещё интересна…
в архиве печать приемника с сенсорным управлением, ссылка на оригинальный пост с сенсором, прошивка с ручным поиском от Уважаемого «Evgenij77», прошивка сенсора адаптирована под AVR STUDIO 6. как есть, все работает, только нет регулировки громкости. т.к. в прошивке сенсора не реализована возможность одновременной работы пары портов на вывод.(одновременное касание к паре сенсоров — ничего не происходит). возможно кто-нибудь это поправит, у меня не хватает знаний. печать сделана под схему из даташита, с ферритовыми фильтрами. на модуле приемника кондер, идущий от второй лапы микросхемы — закоротить. это антенный вход.
https://drive.google.com/open?id=1iFqruDY2H9dNn81-H8qo7jDgtqd29Z-w
+
avatar
0
с прошивкой ясно. пришли фильтры из даташита. их установка ничего не дала. чуйка у модуля слабая.
+
avatar
0
уважаемый Evgenij77! можно Вас попросить скомпилировать прошивку на основе «прошивки с ручным поиском каналов», только чтоб по умолчанию, со старта, громкость была примерно 90%, включенным усилением басов и стерео режимом. дело в том что иногда, после длительного отключения питания, настройки громкости сбиваются на стоковые, а с моим сенсорным управлением нет возможности её увеличить на самом модуле. заранее спасибо!
+
avatar
0
в идеале конечно реализовать «засыпание» контроллера после выполнения команды, но на это видимо места не хватит
+
avatar
  • nadim24
  • 04 декабря 2017, 13:31
0
почему удаляются комментарии?
+
avatar
0
mySKU.me/page/rules
посмотрите пункт 8.
+
avatar
0
Такой маленький МК надо на ассемблере программировать, а не клянчить байты у ардуино ide