Страница 1 из 5
CW маяк. пейджер
Добавлено: 03 окт 2024, 06:31
ru0aog
Доброго дня всем!
Возникла потребность как-то автоматизировать передачу коротких сообщений через эфир без участия оператора.
Например, раз в день сообщить, какая температура на даче.
Начать решил с самого простого - код Морзе (да, я знаю про RTTY, PSK, FT8 и прочее)
Сформировать передачу маяка довольно просто.
Пиликаем на динамик:
https://dzen.ru/video/watch/66fe0fa8d4064b46fb17eba6
Код для ардуины:
Второй пин я подключил к нулю, чтобы было удобно напаивать буззер.
CW маяк. пейджер
Добавлено: 03 окт 2024, 06:39
ru0aog
Теперь вопрос - как это всё принять и декодировать?
Начнём с микрофонного усилителя. Ардуиновский микрофонный модуль я где-то потерял, поэтому делаем монтажку:
.
Тут всё по-старообрядчески

электретник с питанием, два каскада с ОЭ (Ку ненормируемый максимальный), выпрямитель и RC-фильтр с частотой среза около 300 Гц.
Усиления всё же маловато, но если буззер (с наклеенной бумажкой - уже ночь, все спят) прижать к микрофону, то что-то получается:
https://dzen.ru/video/watch/66fe119fb022c206296e81c3
Видео на дзене сами не открываются. Надо скопировать и вставить ссылку...
CW маяк. пейджер
Добавлено: 03 окт 2024, 18:59
ru0aog
А вот и приём подоспел
в тракте нет полосового фильтра, поэтому реагирует не только на писк, но и на шум подходящей длительности (на щелчки не реагирует)
Жду LM567 - с ним будет веселее
В конце символа добавил раскодировку букв
https://dzen.ru/video/watch/66febebcb022c206296882ef
.
CW маяк. пейджер
Добавлено: 06 окт 2024, 08:33
ru0aog
Продолжаем.
Как говорит один препод:
- Нуль матана, нуль!
Раз у нас есть вычислительный проц, да ещё с возможностью оцифровки - грех не воспользоваться.
К счастью, у нас не стоит задача выделить неизвестные гармоники с ресурсоёмким быстрым преобразованием Фурье.
Частота известна заранее. Нужно всего-то определить её наличие, либо отсутствие.
Поможет нам в этом всем известный простенький алгоритм Гёрцеля
Простой цифровой фильтр на Ардуине Нано (АТмега 328р 16 МГц)
Делаем смещение в полпитания на аналоговый пин и подаём на него аналоговый сигнал:
.
Этот скетч определяет уровень сигнала заданной частоты в спектре.
Результат выдаётся текстом в последовательный порт.
.
Частота настройки - 992 Гц,
ширина полосы ~ 100 Гц,
чувствительность (при отсутствии шумов) - 5 мв.
Оптимальная амплитуда входного сигнала - 100...300 мВ.
Максимальная амплитуда входного сигнала - 2,5 В.
Время измерения ~ 16 мс.
CW маяк. пейджер
Добавлено: 06 окт 2024, 09:35
ru0aog
Ладно, на одном тоне всё ясно.
А если модифицировать скетч для обработки трёх тонов?
Делаем.
Для стабильности показаний выбираем частоты тонов, кратные частоте сэмплирования (8928 Гц):
- 1-ый тон 992 Гц,
- 2-ой тон 744 Гц,
- 3-ий тон 288 Гц.
.
В схему добавляем простейший узел смешения сигналов.
.
На входы ничего пока не подаём.
Смотрим, что на выходе
Первое число - время преобразования и вычисления,
второе, третье и четвёртое - амплитуды 1, 2 и 3 тонов (чёрточки - не минусы, а разделители) - значения близки к нулю.
CW маяк. пейджер
Добавлено: 06 окт 2024, 10:06
ru0aog
Подаём на вход два тона амплитудой 50 мВ:
.
тоны 1 и 3 (992 и 288 Гц):
получаем:
.
тоны 1 и 2 (992 и 744 Гц):
получаем:
.
тоны 2 и 3 (744 и 288 Гц):
получаем:
.
Вывод:
- амплитуда частоты 288 Гц получилась на 30...50 % ниже, чем 992 и 744 Гц.
CW маяк. пейджер
Добавлено: 06 окт 2024, 12:11
ru0aog
Кажется понял, почему 288 Гц слабо определяются.
8928/992 = 9, 108/9 = 12
8928/744 = 12, 108/12 = 9
8928/288 = 31, 108/31 = 3,48387 - нет целого числа
8928 - частота сэмплирования,
992, 744, 288 - частота тонов,
108 - число выборок. Больше 127 выборок почему-то задать не могу, МК виснет.
CW маяк. пейджер
Добавлено: 06 окт 2024, 12:17
ru0aog
Установил жёстко частоту сэмплирования
.
Без сигнала:
.
один тон 992 Гц = 50 мВ:
.
один тон 744 Гц = 2,5 В:
.
два тона 992 Гц = 50 мВ + 744 Гц = 2,5 В:
.
Вывод:
- Уровни тонов 992 и 744 почти не влияют друг на друга.
CW маяк. пейджер
Добавлено: 06 окт 2024, 12:33
ru0aog
8928/992 = 9, 108/9 = 12
8928/744 = 12, 108/12 = 9
8928/330 = 27,05, 108/27,05 = 3,99 - эта частота ближе к целому числу, с ней замеры получаются много точнее, чем на 288 Гц.
CW маяк. пейджер
Добавлено: 06 окт 2024, 13:38
R9OFG
ru0aog писал(а): ↑06 окт 2024, 12:11
108 - число выборок. Больше 127 выборок почему-то задать не могу, МК виснет.
Как выборки задаются?
Виснет скорее всего от переполнения чего то, попробуй тип переменной поменять
volatile uint16_t frame[samples]; на volatile uint32_t frame[samples];