\главная\р.л. конструкции\трансиверы\...

Телеграфная клавиатура

На полевом дне неплохо было бы передавать телеграф с клавиатуры - красиво и удобно (особенно с использованием всяких макросов). Можно для этой цели взять компьютер, но его нужно питать => везти с собой дизель => дополнительный шум, да и сам компьютер шумит неслабо. А можно создать такой агрегат на контроллере, например на 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.


Версия 3.0 - 2 ноября 2003

Добавлена полноценная поддержка русского регистра, переключение раскладки - CapsLock.

Исправлен глюк с переполнением памяти макросов. Теперь, если набрать больше, чем надо оно скажет 'AR' и остановит запись. Максимальная длина всех макросов увеличена на 1: F1(32), F2(32), F3(32), F4(16), F5(16).

Добавлена поддержка AT90S2313. НЕ ПРОВЕРЕНО! (но по идее может и заработать). Подробнее в README.

cwkbd-30.zip


Версия 2.0 - 7 июня 2003

Добавлен номер 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}

cwkbd-20.zip


Версия 1.2 - 7 июня 2003

Исправлен глюк со съеданием букв из макросов.

cwkbd-12.zip


Скрипт прошивки контроллера под Linux

Подразумевается, что tavrasm и avreal установлены нормально, название исходного файла не изменено (cwkbd.asm), программатор Altera Byte Blaster висит на LPT1. Скрипт также сохраняет содержимое энергонезависимой памяти (cwkbd_data.hex) и проверяет записанную программу.

cwkbd-go


З.Ы.

О том как разрабатывать программы для AVR и вбивать их в контроллер можно почитать здесь. Если кто-нибудь, когда-нибудь сделает себе такую штуку, убедительная просьба сообщить о впечатлениях.


www.qsl.net/rk3dov



Глас народа
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 Оченно интересно! Если есть возможность, то большая просьба проко...  --  Андрей

Возврат