CW маяк. пейджер

Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 03 окт 2024, 06:31

Доброго дня всем!
Возникла потребность как-то автоматизировать передачу коротких сообщений через эфир без участия оператора.
Например, раз в день сообщить, какая температура на даче.

Начать решил с самого простого - код Морзе (да, я знаю про RTTY, PSK, FT8 и прочее)
Сформировать передачу маяка довольно просто.

Пиликаем на динамик:
https://dzen.ru/video/watch/66fe0fa8d4064b46fb17eba6

Код для ардуины:
beacon_a02.rar
(1.08 КБ) 72 скачивания
Второй пин я подключил к нулю, чтобы было удобно напаивать буззер.

Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 03 окт 2024, 06:39

Теперь вопрос - как это всё принять и декодировать?
Начнём с микрофонного усилителя. Ардуиновский микрофонный модуль я где-то потерял, поэтому делаем монтажку:
photo_2024-10-02_23-54-08.jpg
.
Тут всё по-старообрядчески :) электретник с питанием, два каскада с ОЭ (Ку ненормируемый максимальный), выпрямитель и RC-фильтр с частотой среза около 300 Гц.

Усиления всё же маловато, но если буззер (с наклеенной бумажкой - уже ночь, все спят) прижать к микрофону, то что-то получается:
https://dzen.ru/video/watch/66fe119fb022c206296e81c3

Видео на дзене сами не открываются. Надо скопировать и вставить ссылку...


Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 03 окт 2024, 18:59

А вот и приём подоспел

в тракте нет полосового фильтра, поэтому реагирует не только на писк, но и на шум подходящей длительности (на щелчки не реагирует)
Жду LM567 - с ним будет веселее

В конце символа добавил раскодировку букв

https://dzen.ru/video/watch/66febebcb022c206296882ef
.
receiver_01.rar
(1.14 КБ) 59 скачиваний

Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 06 окт 2024, 08:33

Продолжаем.
Как говорит один препод:
- Нуль матана, нуль!

Раз у нас есть вычислительный проц, да ещё с возможностью оцифровки - грех не воспользоваться.
К счастью, у нас не стоит задача выделить неизвестные гармоники с ресурсоёмким быстрым преобразованием Фурье.
Частота известна заранее. Нужно всего-то определить её наличие, либо отсутствие.
Поможет нам в этом всем известный простенький алгоритм Гёрцеля :)

Простой цифровой фильтр на Ардуине Нано (АТмега 328р 16 МГц)
Делаем смещение в полпитания на аналоговый пин и подаём на него аналоговый сигнал:
01.JPG
.
Этот скетч определяет уровень сигнала заданной частоты в спектре.
Результат выдаётся текстом в последовательный порт.
decoder16.rar
(2.41 КБ) 52 скачивания
.
Частота настройки - 992 Гц,
ширина полосы ~ 100 Гц,
чувствительность (при отсутствии шумов) - 5 мв.
Оптимальная амплитуда входного сигнала - 100...300 мВ.
Максимальная амплитуда входного сигнала - 2,5 В.
Время измерения ~ 16 мс.

Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 06 окт 2024, 09:35

Ладно, на одном тоне всё ясно.
А если модифицировать скетч для обработки трёх тонов?
Делаем.
Для стабильности показаний выбираем частоты тонов, кратные частоте сэмплирования (8928 Гц):
- 1-ый тон 992 Гц,
- 2-ой тон 744 Гц,
- 3-ий тон 288 Гц.
decoder17.rar
(2.79 КБ) 51 скачивание
.
В схему добавляем простейший узел смешения сигналов.
Sch_02.JPG
.
На входы ничего пока не подаём.
Смотрим, что на выходе
Первое число - время преобразования и вычисления,
второе, третье и четвёртое - амплитуды 1, 2 и 3 тонов (чёрточки - не минусы, а разделители) - значения близки к нулю.
00-1.jpg

Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 06 окт 2024, 10:06

Подаём на вход два тона амплитудой 50 мВ:
002.jpg
.
тоны 1 и 3 (992 и 288 Гц):
01.jpg
получаем:
01-1.jpg
.
тоны 1 и 2 (992 и 744 Гц):
02.jpg
получаем:
02-1.jpg
.
тоны 2 и 3 (744 и 288 Гц):
03.jpg
получаем:
03-1.jpg
.
Вывод:
- амплитуда частоты 288 Гц получилась на 30...50 % ниже, чем 992 и 744 Гц.

Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 06 окт 2024, 12:11

Кажется понял, почему 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 выборок почему-то задать не могу, МК виснет.

Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 06 окт 2024, 12:17

Установил жёстко частоту сэмплирования
decoder18.rar
(1.32 КБ) 54 скачивания
.
Без сигнала:
00.jpg
.
один тон 992 Гц = 50 мВ:
01 992Hz-50mV.jpg
.
один тон 744 Гц = 2,5 В:
02 744Hz-2.5V.jpg
.
два тона 992 Гц = 50 мВ + 744 Гц = 2,5 В:
03 992Hz-50mV 744Hz-2.5V.jpg
.
Вывод:
- Уровни тонов 992 и 744 почти не влияют друг на друга.

Аватара пользователя
ru0aog
Сообщения: 1033
Зарегистрирован: 30 сен 2021, 05:50
Позывной: ru0aog
Город: Красноярск
Имя: Станислав
Благодарил (а): 134 раза
Поблагодарили: 147 раз

CW маяк. пейджер

Сообщение ru0aog » 06 окт 2024, 12:33

8928/992 = 9, 108/9 = 12
8928/744 = 12, 108/12 = 9
8928/330 = 27,05, 108/27,05 = 3,99 - эта частота ближе к целому числу, с ней замеры получаются много точнее, чем на 288 Гц.

Аватара пользователя
R9OFG
Сообщения: 1257
Зарегистрирован: 03 ноя 2019, 22:30
Позывной: R9OFG, ex R0AEK
Город: Новосибирск
Имя: Саша
Благодарил (а): 194 раза
Поблагодарили: 299 раз
Контактная информация:

CW маяк. пейджер

Сообщение R9OFG » 06 окт 2024, 13:38

ru0aog писал(а):
06 окт 2024, 12:11
108 - число выборок. Больше 127 выборок почему-то задать не могу, МК виснет.
Как выборки задаются?

Виснет скорее всего от переполнения чего то, попробуй тип переменной поменять

volatile uint16_t frame[samples]; на volatile uint32_t frame[samples];

Ответить

Вернуться в «Микроконтроллеры и программирование»