|
||||||
Телеграфная клавиатура
На полевом дне неплохо было бы передавать телеграф с клавиатуры - красиво и удобно (особенно с использованием всяких макросов). Можно для этой цели взять компьютер, но его нужно питать => везти с собой дизель => дополнительный шум, да и сам компьютер шумит неслабо. А можно создать такой агрегат на контроллере, например на AVR от Atmel. Эта задача была успешно выполнена автором и в итоге получилась очень хорошая вещь, которая умещается в коробочке от фотопленки (как фотка появится - покажу). Используемый в оригинальной конструкции контроллер AT90S2323 обеспечивает буфер размером 100 символов и энергонезависимую память под макросы - 128 байт, чего вполне достаточно.
Для подключения клавиатуры необходимо было сначала разобраться как она работает. Толковых русскоязычных ресурсов на эту тему я не нашёл, пришлось довольствоваться PC Keyboard FAQ, где информация весьма противоречива. Собственные эксперименты окончательно пролили свет на одну сторону (от клавы в комп) этого вопроса.
В данном чудо-devicе клавиатура для простоты работает в неинтерактивном режиме и всегда передаёт данные, т.е. ноги контроллера всегда являются входами с подтягивающими резисторами. Этого достаточно для получения скан-кодов нажатых клавиш.
Для полного понимания работы устройства необходимо рассмотреть интерфейс клавиатуры. Линия состоит из четырех проводов:
Сигнал Нога DIN Нога PS/2 GND 4 3 +5V 5 4 DATA 2 1 CLOCK 1 5
Нумерация контактов разъёма PS/2 (сторона компа):
^ 6 5 4 3 > 2 1 <
DATA служит для передачи данных, CLOCK - для сигнала синхронизации, остальное понятно. Аппаратно обе стороны линии выполнены так:
А ещё стоят подтягивающие на +5V резисторы.--------------+ | Data In <|-------------o-------------- DATA | | Clock In <|-------------|--------o----- CLOCK | c | | | |/ 2N3904 | Data Out <|---/\/\/---|b (NPN) | | |\ | | e | | | --- | | Gnd | | c _________/ | |/ 2N3904 Clock Out <|---/\/\/---|b (NPN) | |\ | e | | --- | Gnd --------------+
Как выясняется, спалить клавиатуру (так же как и вход компа) не так-то просто, можно даже аккуратно вытащить и вставить её на ходу (проверено), правда при этом не сохранятся настройки скорости повтора и начальной задержки и состояние индикаторов ;-)
Рассмотрим теперь поближе процесс передачи клавиатурой скан-кода нажатой клавиши. С приемной стороны не производится никаких воздействий. После нажатия на клавишу клавиатура коротит на землю линию DATA и, передав стартовый бит, начинает передавать по ней данные, а по линии CLOCK - импульсы синхронизации. В конце передается бит четности PARITY (если число установленных битов в переданном байте четно, то он установлен). Вот документальные съемки, сделанные программой ULogic с графическими пояснениями:
Нетрудно догадаться, что была нажата клавиша со скан-кодом 00101001b = 29h - это пробел. Установлено 3 бита (нечетно) и бит PARITY не установлен.
Необходимо заметить, что при нажатии некоторых клавиш (PageUp, PageDwn, Home... и др. не с NumPad) передается подрят два байта E0h и код клавиши, который совпадает с кодом аналогичной клавиши из NumPad. При отпускании клавиши перед скан кодом передаётся байт F0h. Чтобы определить нажат ли в данный момент SHIFT, нужно отслеживать его состояние: если передано 12h(левый) или 59h(правый), то SHIFT нажали, если F0h 12h или F0h 59h, то его отпустили.
О работе клавиатуры можно почитать (на английском) в PC Keyboard FAQ, там же есть скан-коды всех клавиш.
В используемом контроллере AT90S2323 есть всего 3 ноги для сообщений с внешним миром. Две из них подключаются к клавиатуре (PB0-CLOCK, PB1-DATA), а третья (PB2) используется как выход для передачи телеграфа:
============================== СХЕМА ===================================== --- --- --- | 100n 2k | | 47p --- +----\/\/\----+ --- 100n 8000K --- --- | | --- +------> + __ --- | | +--\/--+ | | +5V KT315 | KEY || | +---O--|1 8|---O---O---> | / +----> - +-||||----O-------------|2 7|-------|------HHHH------|< | | || | | | 1k | \ | | -- +--O-------------|3 6|-----+ | V | | | | +--|4 5|---+ | | KEYBOARD | | +------+ --- | +------+ | | | DIN PS/2 O--+ --- | AT90S2323 | | | +-+-+-------+ | | 47p --- | | +--|5|4| +5v | --- --- | +----|2|1| DATA | +------|1|5| CLOCK | +--|4|3| GND | | +-+-+-------+ --- ========= РАСПАЙКА РАЗЪЁМА ДЛЯ ПРОГРАММИРОВАНИЯ BYTE BLASTERом =========== нога |нога |назначение микрухи |разъёма| --------------------------- 1 | 5 | RESET 7 | 1 | SCK 5 | 9 | MOSI 6 | 3 | MISO 4 | 2,10 | GND 8 | 4 | +5V ==================== НОМЕРА НОГ ДЛЯ AT90S2313 ============================ нога |нога AT90S2323 |AT90S2323 --------------------- 1 | 1 2 | 4 3 | 5 4 | 10 5 | 12 6 | 13 7 | 14 8 | 20
Можно собрать более цивильную схему с гальванической развязкой:
Транзистор - любой кремниевый. Кварц можно использовать любой от 1 до 10 МГц, от его частоты будет зависеть скорость передачи, устанавливаемая при включении (при желании можно подкорректировать начальное значение переменной SPD в программе). Выходные цепи, идущие к трансиверу можно изменить на своё усмотрение. Собственно в схеме нет ничего примечательного, самое главное - программа. Микросхему можно установить на панельку, чтобы иметь восможность обновлять "софт", но лучше впаять намертво и вывести разъемчик для внутрисхемного программирования (его распайка для Altera ByteBlaster дана выше). В этом случае при программировании нужно отсоединять клавиатуру, трансивер не обязательно. Сам контроллер AT90S2323 стоит ~120 рубликов, AT90S2313 подешевле (~80 рубликов) и более распространенный.
Работа похожа на N6TR, но есть возможность передавать русские буквы, переключение раскладки - CapsLock. Скорость изменяется клавишами PageUp и PageDown. Можно записывать 4 сообщения + свой позывной, который можно использовать в сообщениях:
F5 - собственный позывной
F6 - передает 'DE
<СОБСТВЕННЫЙ ПОЗЫВНОЙ>'
F1 - F4 используйте на своё
усмотрение
Запись происходит следующим образом:
1) Нажать '~'(она же 'Ё'). Услышите 'REC'.
2) Выбрать
место для сообщения: F1(32), F2(32), F3(32), F4(16) или F5(16) - в скобках
максимальная длина сообщения. Услышите 'R' (если всё нормально) или '?'
(если нажали что-то не то).
3) Далее набрать текст не болше указанной
выше длины (если набрать больше, то скажет 'AR') и в конце нажать
Enter(при наборе нет самоконтроля). Как подтверждение услышите
'OK'.
4) Всё, прослушать записанное можно нажав соответствующую Fn.
Чтобы записать общий вызов на F1 нужно нажать:
~ 'REC' F1 'R' CQ CQ CQ DE {F5} {F5} {F5} CQ PSE K'OK'
Передачу можно прервать в любой момент клавишей Esc.
Всякие навороченные знаки:
< SK ...-.- = знак раздела -...- + AR .-.-. , запятая --..--
В каждом архиве лежат исходники + скомпилированная программа в формате *.HEX.
Добавлена полноценная поддержка русского регистра, переключение раскладки - CapsLock.
Исправлен глюк с переполнением памяти макросов. Теперь, если набрать больше, чем надо оно скажет 'AR' и остановит запись. Максимальная длина всех макросов увеличена на 1: F1(32), F2(32), F3(32), F4(16), F5(16).
Добавлена поддержка AT90S2313. НЕ ПРОВЕРЕНО! (но по идее может и заработать). Подробнее в README.
Добавлен номер QSO - F8. Можно вставлять в макросы F1 - F4, так же, как и позывной (F5). Для увеличения номера на 1 служит клавиша PrintScreen, её также можно использовать в макросах. Начальная установка номера - ScrollLock. На вопрос NR нужно ввести номер. Эта версия ещё недостаточно оттестирована.
Вот для примера возможная кофигурация:
F1(CQ): CQ TEST DE {F5} {F5} {F5} TEST F2(CQ Ex): _GE UR 5NN {F8} F3(Tu): TU{PrintScreen} {F5} TEST F4(S&P Ex): TU 5NN {F8}{PrintScreen}
Исправлен глюк со съеданием букв из макросов.
Подразумевается, что tavrasm и avreal установлены нормально, название исходного файла не изменено (cwkbd.asm), программатор Altera Byte Blaster висит на LPT1. Скрипт также сохраняет содержимое энергонезависимой памяти (cwkbd_data.hex) и проверяет записанную программу.
О том как разрабатывать программы для AVR и вбивать их в контроллер можно почитать здесь. Если кто-нибудь, когда-нибудь сделает себе такую штуку, убедительная просьба сообщить о впечатлениях.
![]() |
Глас народа |
07.08.2007 20:43 Работает отлично, в том числе и на полевых днях, но прошивку хоте... -- RV3GC 07.07.2006 14:22 Уже не первый год работаем в полевых днях на УКВ коллективкой RK3... -- UA3mez 17.05.2006 15:21 А не подскажешь как AT90S2323 прошить? Мне - то и нужно от него -... -- Ivan 18.02.2005 20:44 Собрал, ааабалденная штуковина.... -- ua4foz Alexand... 28.05.2004 17:26 По всем вопросам обращайтесь к автору (ко мне). На моём сайте леж... -- Антон RK3DOV... 28.05.2004 17:24 По всем вопросам обращайтесь к автору (ко мне). На моём сайте леж... -- Антон RK3DOV... 02.05.2004 17:08 Спасибо.Работает очень хорошо. ... -- EW7EM 24.11.2003 09:22 Оченно интересно! Если есть возможность, то большая просьба проко... -- Андрей |