Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » Всё остальное » Пятничное » Многоканальный энкодер-декодер кода Морзе


Пятничное » Многоканальный энкодер-декодер кода Морзе

Сообщений 61 страница 84 из 84

1

Простая по постановке задачка, но [наверно] не простая по реализации

Многоканальный энкодер-декодер кода Морзе
N каналов-пинов [пусть будет, например, 4], каждый может быть и передатчиком, и приёмником
По uart-у принимаются текстовые сообщения в формате "<номер канала><пробел><текст><перевод строки>"
Текст передаётся морзянкой по соответствующему каналу
И наоборот - при приёме морзянки по любому каналу, по uart-у передаётся соответствующее сообщение
Длительность точки в общем случае произвольная, но пусть будет, например, 100 мс плюс-минус 20%
Длительности остальных элементов - производные от длительности точки [по стандарту]
Для проверки работы к uart-у подключается терминал, а каналы коммутируются друг с другом

На каком мк и как это проще всего сделать, какие идеи?

61

Я приемники еще даже не начинал делать.

62

vt написал(а):

А можно ли такими передатчиками проверить приёмники, которые должны работать в диапазоне +-20% ?
Если нет, то придётся придумывать какой-то другой способ проверки приёмников

Ну очень даже странный вопрос... даже как для начинающего... Никогда с ТВ-пультом и ИР-датчиком не эксприментировал??? И в чём тут разница???

63

Приёмники должны распознавать импульсы 80-120 мс как точку, импульсы 240-360 мс - как тире, все остальные импульсы - как ошибку
И аналогично для пауз
Как проверить, что приёмники действительно всё распознают правильно?

64

Проверять нужно как обыкновенный USART, если принял в точности то, что передал, значит устройство в целом работает правильно.

65

vt написал(а):

Приёмники должны распознавать импульсы 80-120 мс как точку, импульсы 240-360 мс - как тире, все остальные импульсы - как ошибку
И аналогично для пауз
Как проверить, что приёмники действительно всё распознают правильно?

Как проверить правильность передачи ТВ-пульта на ИР-датчик??? Зависит от развитости ИИ в КА... естественно... кто во что гаразд...
Если не меньше Х и не больше У  то точка... если не меньше ХХ и не больше УУ то тире... иначе считаем за ошибку... Действия в случае ошибки уже другая песня... можно притулить таймер до прихода следующего символа... много чего можно... В случае заголовка... можно даже определять скорость передачи на лету... а можно и без заголовка... тут уже тебе и карты в руки... от главштаба...

66

Тестирование программы методом пристального вглядывания в её текст? )

67

Так сказал уже... начинай с многоканального передатчика... А там на разных каналах можно разные длительности запулить... Что сложного то???

68

Многоканальный прередатчик у нас уже есть, MasterElectric его уже сделал
Мы как раз по твоему совету и идём снизу вверх, потому что моё предложение идти сверху вниз не получило поддержки )

69

Задающий генератор сделан на TIM7. Можно делать запросы ДМА и по табличке менять ARR имитируя девиацию частоты и так по кругу. Сегодня некогда нужно на сименс прошивку написать, завтра начну делать прием, но уже все вырисовывалось в голове как буду делать.

70

MasterElectric написал(а):

Задающий генератор сделан на TIM7.

Имхо, в контексте темы фраза ужасна

HHIMERA написал(а):

Как проверить правильность передачи ТВ-пульта на ИР-датчик???

И эта тоже

Ну ладно, ещё не вечер )

71

TIM7 генерирует прерывания - значит генератор)))

72

MasterElectric написал(а):

TIM7 генерирует прерывания - значит генератор)))

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

73

Да куда там скатываться с такой элементарной задачкой, просто мы говорим не о программе как о программе, а о механизме и процессах в объекте. Как лучше выдавать принятые данные. Подумываю на счет буферов FIFO для приемников морзе типа отправлять или по достижении нного количества или по превышении времени. При этом возникла идея крутить не указатель на символ, а индекс размерностью 8 бит т.е. буфер будет 256 байт длиной (не хочу отслеживать перескок на начало). Декодирование буду делать на лету по факту прихода точек или тире двумя таблицами.

74

MasterElectric написал(а):

Да куда там скатываться с такой элементарной задачкой
...
а индекс размерностью 8 бит т.е. буфер будет 256 байт длиной
...

Эмм
Ну ладно )

75

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

Код:
int seq ( int *pN, int in ) {
    int out;
    if ( *pN > 0 ) {
        if ( in ) {
            out = 0;
            if ( *pN < MAX ) (*pN)++;
        } else {
            out = *pN;
            *pN = -1;
        }
    } else if ( *pN < 0 ) {
        if ( in ) {
            out = *pN;
            *pN = 1;
        } else if ( --(*pN) > MIN ) {
            out = 0;
        } else {
            out = *pN;
            *pN = 0;
        }
    } else {
        out = 0;
        if ( in ) *pN = 1;
    }
    return out;
}

Положительные числа на выходе - длительность импульсов, отрицательные - пауз

Лог для MAX=5 MIN=-5

in out
0 0
0 0
1 0
1 0
1 0
0 3
1 -1
1 0
1 0
1 0
1 0
1 0
0 5
0 0
0 0
0 0
0 -5
0 0
1 0
0 1
0 0
1 -2
1 0
1 0
1 0
1 0
0 5
0 0
0 0
0 0
0 -5
0 0

76

я пока проект поставил на паузу в связи с загрузкой на работе. Но я ловлю только фронты и эти события только и обрабатываю. А судя по твоей функции нужно на каждой выборке делать какие-то расчеты я так понимаю.

77

Печально это всё, третья неделя пошла
Я думал, мы за пару дней кучу решений успеем накидать и обсудить
Получается, либо задачка не элементарная, либо эмбеддеры не программисты )

78

vt написал(а):

Я думал, мы за пару дней кучу решений успеем накидать и обсудить

Возможно проблема в том, что нужно делать, а не неделями обсуждать :)

79

Reflector написал(а):

Возможно проблема в том, что нужно делать, а не неделями обсуждать :)

В формате публичного форума нет смысла молча делать и постфактум выкладывать простыни какого-то кода
Ну или в формате публичного форума нет смысла )

80

vt написал(а):

В формате публичного форума нет смысла молча делать и постфактум выкладывать простыни какого-то кода

MasterElectric ничего и не выкладывал, но передатчик есть именно потому, что он его молча сделал :)

81

Reflector написал(а):

MasterElectric ничего и не выкладывал, но передатчик есть именно потому, что он его молча сделал :)

Возможно, что и кто-то из молчаливых читателей что-то сделал
Наброс в форуме как вызов и мотивация личностного роста? )
Только толку от этого никакого

82

vt написал(а):

Только толку от этого никакого

а если нет смыла, то есть толк заниматься тем, в чем видишь смысл, правда это "видение" тоже может быть лишено смыла :D

83

Толку - от слова "толковать"
И talk )

84

ничего не понял. о чем Вы?
https://dic.academic.ru/dic.nsf/ushakov/1054854
https://dic.academic.ru/dic.nsf/dmitriev/5372/толк
... в принципе не важно. проехали.


Вы здесь » Микроконтроллеры » Всё остальное » Пятничное » Многоканальный энкодер-декодер кода Морзе