KEEN SIDE успешно заменяет аналогичные продукты таких известных брендов, как Phoenix Contact, Weidmueller, Degson, Winstar, Hsuan Mao, KLS, G-NOR, Mean Well и др.

Азбука Морзе на микроконтроллере Atmel

Atmel ATtiny2313

Захаров Денис, Украина

Азбука Морзе является удобным способом кодирования и передачи текстов, особенно через телеграф или радио. Многие радиолюбители работали в эфире со скоростью 100 - 150 знаков в минуту, а некоторые были способны принимать и передавать до 250 - 300 знаков. Всё это достигалось длительными тренировками. Во время связи радиолюбители обычно записывают только ту часть информации, которую им нужно сохранить, а большую часть передач воспринимают без записи, непосредственно на слух, как обычную речь. Для передачи с большими скоростями вместо простого ключа Морзе часто использовали клавиатуру, однако прием вели все равно на слух – это намного надежнее и удобнее, чем с помощью любых декодирующих устройств.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

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

Но как поступить, если нужно передавать данные без помощи компьютера, не зная азбуки Морзе? Одним из решений будет создание простого устройства на микроконтроллере, который будет преобразовывать слова в звуковой и световой код Морзе.

Для этих целей автор выбрал микроконтроллер серии Atmel ATtiny2313, ресурсов которого для решения поставленной задачи вполне достаточно. Принципиальная схема устройства изображена на Рисунке 1.

Азбука Морзе на микроконтроллере Atmel
Рисунок 1. Принципиальная схема устройства.

Исходные данные поступают от внешнего источника в формате ASCII по аппаратному каналу UART. Сохранение символов происходит в ОЗУ МК с каждым новым прерыванием «USART0, RX». Длина входного пакета данных за одну операцию преобразования может составлять до 100 символов. Конец набора текста должен заканчиваться знаком «Enter» (командой 0x0D). При поступлении этой команды МК начинает преобразование латинских символов в звуковой и световой код Морзе.

В Таблице 1 приведены коды азбуки Морзе, загруженные в память микроконтроллера.

Таблица 1. Код Морзе, загруженный в память МК.
Символ
Код Морзе
Символ
Код Морзе
Символ
Код Морзе
А
• —
M
— —
Y
— • — —
В
— • • •
N
— •
Z
— — • •
C
— • — •
O
— — —
0
— — — — —
D
— • •
P
• — — •
1
• — — — —
E
Q
— — • —
2
• • — — —
F
• • — •
R
• — •
3
• • • — —
G
— — •
S
• • •
4
• • • • —
H
• • • •
T
5
• • • • •
I
• •
U
• • —
6
— • • • •
J
• — — —
V
• • • —
7
— — • • •
K
— • —
W
• — —
8
— — — • •
L
• — • •
X
— • • —
9
— — — — •

На Рисунке 2 изображена диаграмма передачи данных слова «SOS» (…---…). Динамик подключен к ШИМ выходу OCR0B (канал «А»), а светодиод – к порту ввода-вывода PD6 (канал «Б»).

Азбука Морзе на микроконтроллере Atmel
Рисунок 2. Диаграмма передачи данных слова «SOS». 

Для коррекции временных задержек нужно изменять константы, которые приведены в Листинге 1. При изменении директивы «delay_dot» меняется длительность звучания «точки»; при изменении «delay_dash» меняется длительность «тире». Чтобы настроить паузу между «точка-тире», нужно корректировать вставку «delay_paus_dot_dash». Для изменения задержки после пробела (символ «0х20») подбирается значение в «delay_paus_space».


    .equ delay_dot = 4			;пауза «точка»
    .equ delay_dash = 11		;пауза «тире»
    .equ delay_paus_dot_dash = 20	;пауза между «точка - тире»
    .equ delay_paus_space = 35		;пауза пробела

При обработке не более 16 символов за одно преобразование на экране дисплея отображаются вводимые литеры. Если основная задача устройства заключается в быстром преобразовании и отправке данных, то экран можно не ставить. Дисплея нужен только для обучения человека.

Дисплей с драйвером HD44780 может иметь любое количество символов. Рабочая частота микроконтроллера равна 4 МГц. Настройки скорости передачи данных по UART стандартные: 9600 Бод, количество бит – 8, стоп бит – 1.

Программное обеспечение МК и виртуальная модель Proteus  - скачать

70 предложений от 35 поставщиков
микроконтроллер архитектуры AVR, 2 кБ Flash ROM, 128 Б EEPROM, 128 Б RAM. ISP, SelfProg, 18 выводов в/в. USI, UART. 8/16...
Элитан
Россия
BAL74
NXP
2.71 ₽
Контест
Россия
ATTINY2313-20SI
15 ₽
AiPCBA
Весь мир
ATTINY2313A-SU
Atmel
89 ₽
ЭК ЗИП
Россия
ATTINY2313-20SU
Microchip
от 393 ₽
Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Судя по диаграмме, сигналы формируются неправильно. Длительность тире = длительности трех точек, между отдельными знаками одного символа пауза с длительностью точки, между отдельными символами пауза с длительностью тире. Это я точно помню, не помню паузу между отдельными "словами".
  • Ну это каноны. А был же и радио-почерк. Может у автора именно такой.
  • "И чё? Может я под виброплекс косю...":)
  • вставлю свои пять копеек. насколько мне известно от радиотелеграфа отказались, как от класса передающих устройств. перестали готовить радиотелеграфистов. скоро сойдет на нет и скоростная радиотелеграфия (прием и передача). хорошо это или плохо - покажет время. я думаю, что это не правильно. готовить надо. события на украине это доказали. и автор оттуда родом. и алфавит у него правильный для украины и способы формирования сигнала по стандарту обучения войск НАТО, так что в этой части противоречий нет. прога есть. так, что если и обсуждать то только способы формирования сигналов русского алфавита. кстати программы для обучения на компе имеются и уже давно, а это на МК. в кармане может лежать....
  • А мне интересно. Я как раз хотел изготовить прибор электрика с минимумом индикации: светодиод зуммер. Всяких "многомеров" достаточно, но использование ЖК или 7сег. индикаторов делают прибор громоздким. А так и измерения и обучение морзе.
  • Давно используем. Случаются ситуации, где нужна мало-мальская информативность при минимуме телодвижений - морзе спасает. Беда только что понимает его "узкий круг ограниченных людей".))
  • Как всегда чувствуется дефицит актуальных тем. Устройство малополезное в виду того, что трудно найти область его применения. Если только доработать прошивку, чтобы она выдавала заранее записанные фразы и использовать его как эдакие морзе-метки для ностальгирующих радиолюбителей.
  • На этот случай нужно обращаться к приведенному листингу, где показано как меняя константы можно добиться разных длин звучания точки и тире. Вообще не состоит труда залить в МК готовые фразы и по определенных событиям их выдавать. Код принципе открытый. В главном файле специально минимум программы, чтобы удобно было потом дорабатывать. Все выполняется в подпрограммах, которые лежат в отдельном файле.:)
  • да и набор фраз уже имеется продуманный. еще году в 86 на РФ2,5 такие вещи заливали...
  • Думаю не стоит останавливаться и замутить что то с дымом костров. Ибо даже гелиограф как то не кошерен. В свете дальнейшего развития темы. :D Тамтамы! Тамтамная связь :D
  • Немного поменял проект. Там в списке были литеры с нижним индексом, сейчас добавил заглавные. Принимая во внимания замечания о формировании сигналов, внес изменения в блоке вставок, теперь выглядит так [code] .equ delay_dot_ms = 50 ;время длительности сигнала "точка" .equ delay_dash_ms = 150 ;время длительности сигнала "тире" .equ delay_paus_dot_dash_ms = 150 ;пауза между "точка" "тире" .equ delay_paus_space_ms = 250 ;пауза пробела, между словами[/code] Константы задаются в мс
  • и это тоже уже давно реализовано в железе...и заранее записанные фразы и радиометки...
  • Добавил функцию повтора. После того, как набрали сообщение на компьютере, оно будет повторяться с периодичностью [U]delay_paus_repeat[/U] секунд. [code] .equ delay_dot_ms = 50 ;время длительности сигнала "точка" .equ delay_dash_ms = 150 ;время длительности сигнала "тире" .equ delay_paus_dot_dash_ms = 150 ;пауза между "точка" "тире" .equ delay_paus_space_ms = 250 ;пауза пробела, между словами .equ delay_paus_repeat = 10 ;пауза для повтора [/code] Память МК загружена на 70%, при желании можно дорабатывать
Полный вариант обсуждения »