|
|||
Телеграфная клавиатура
На полевом дне неплохо было бы передавать телеграф с клавиатуры - красиво и удобно (особенно с использованием всяких макросов). Можно для этой цели взять компьютер, но его нужно питать => везти с собой дизель => дополнительный шум, да и сам компьютер шумит неслабо. А можно создать такой агрегат на контроллере, например на 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 - для сигнала синхронизации, остальное понятно. Аппаратно обе стороны линии выполнены так:
--------------+
|
Data In <|-------------o-------------- DATA
| |
Clock In <|-------------|--------o----- CLOCK
| c | |
| |/ 2N3904 |
Data Out <|---/\/\/---|b (NPN) |
| |\ |
| e | |
| --- |
| Gnd |
| c _________/
| |/ 2N3904
Clock Out <|---/\/\/---|b (NPN)
| |\
| e |
| ---
| Gnd
--------------+
А ещё стоят подтягивающие на +5V резисторы.
Как выясняется, спалить клавиатуру (так же как и вход компа) не так-то просто, можно даже аккуратно вытащить и вставить её на ходу (проверено), правда при этом не сохранятся настройки скорости повтора и начальной задержки и состояние индикаторов ;-)
Рассмотрим теперь поближе процесс передачи клавиатурой скан-кода нажатой клавиши. С приемной стороны не производится никаких воздействий. После нажатия на клавишу клавиатура коротит на землю линию 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 Оченно интересно! Если есть возможность, то большая просьба проко... -- Андрей |