Клавиатура и NedoPC-90

8-битные микроконтроллеры AVR (AT90, ATtiny, ATmega) от Atmel (в настоящий момент принадлежит Microchip)

Moderator: Shaos

SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Клавиатура и NedoPC-90

Post by SfS »

Буду тут писать все касательно клавиатуры, присланной Shaos'ом.

Итак.

Подключил клавиатуру к питанию +5В. Чтобы получить +3.3 вольта из +5 вотккнул 3 диода КД522 последовательно. Между контактами +3.3вольта (Vcc на плате) и землей (GND на плате) воткнуты в параллель конденсатор 0.1мкф и резистор 5.1КОм. Резистор нужен обязательно! Иначе напряжение будет около +4Вольт.

Осциллом посмотрел выход.
Полярность интерфейса клавиатуры - обратная UARTу. То есть, при отсутствии сигнала (ни одна кнопка не нажата) - на выходе 0вольт. При нажатии кнопки - импульсы уровня +3.3Вольта.
Насколько я могу судить - автоповтора при длительном нажатии нет.

Длительность пачки импульсов (очень приблизительно, на глаз) - 1-2миллисекунды. то есть скорость передачи примерно около 5-10Кбит/сек. Скорее всего (если стандартная) - 4800 или 9600 (проверять сегодня вечером буду).

Очень смущает обратная полярность. Хотя мне это на руку - для адаптации к ТТЛ уровням достаточно воткнуть один транзистор КТ315 и резистору в базу и коллектор - и все.

Ну вот пока и все что выяснил. Завтра, надеюсь, еще напишу.
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Чуйствую пора мне делать легковесный интерпретатор RW0-байткода для того чтобы вкмопилировать его в AVR - напомни каков размер int в этом компиляторе?
Я тут за главного - если что шлите мыло на me собака shaos точка net
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Post by SfS »

Shaos wrote:Чуйствую пора мне делать легковесный интерпретатор RW0-байткода для того чтобы вкмопилировать его в AVR - напомни каков размер int в этом компиляторе?
16бит, как и для всех 8битных процов обычно. а вообще sizeоf() тебе в помощь :)
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SfS wrote:
Shaos wrote:Чуйствую пора мне делать легковесный интерпретатор RW0-байткода для того чтобы вкмопилировать его в AVR - напомни каков размер int в этом компиляторе?
16бит, как и для всех 8битных процов обычно. а вообще sizeоf() тебе в помощь :)
Это хорошо, так как виртуальная машина RW0 - шестнадцатибитная
Я тут за главного - если что шлите мыло на me собака shaos точка net
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Post by SfS »

Попытался погонять на стандартных скоростях. Нету толку - шнягу какуюто выдает. Попробую на нестандартных. В общем скорее всего я чегото пока не догоняю. Завтра напишу что получилось.
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Post by SfS »

Мда :) Видать не дурак был, сдавший клавиатуру в магазин.

Поведение у нее странное. На одну и ту же клавишу выдает то некий код, то два. Как я понял должен быть код нажатия и отпускания. а иногда она впадает в странный ступор и начинает выдавать на все клавиши код 0x09 (на скорости 9600).

В общем явно "нестабильная работа" - это очень верно подмечено. Кондеры у кварца не помогли (22пф). Сегодня попробую другие.

В общем в этой маленькой штуке - столько интересного :) Правда пока толку мало.
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SfS wrote:Мда :) Видать не дурак был, сдавший клавиатуру в магазин.

Поведение у нее странное. На одну и ту же клавишу выдает то некий код, то два. Как я понял должен быть код нажатия и отпускания. а иногда она впадает в странный ступор и начинает выдавать на все клавиши код 0x09 (на скорости 9600).

В общем явно "нестабильная работа" - это очень верно подмечено. Кондеры у кварца не помогли (22пф). Сегодня попробую другие.

В общем в этой маленькой штуке - столько интересного :) Правда пока толку мало.
Странно. Может быть надо кол-вом стартовых-стоповых битов и четностью поиграть?

Кстати твой экземпляр - новёхонький, прям из упаковки ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Post by SfS »

Shaos wrote: Странно. Может быть надо кол-вом стартовых-стоповых битов и четностью поиграть?

Кстати твой экземпляр - новёхонький, прям из упаковки ;)
Четностью - смысла не имеет. Если четность отключена - то бит четности просто игнорируется.

Количеством бит - попробую, конечно. Но всетаки странно както она себя ведет. Хотя если новая - то я сам чтото наверное недогоняю.
В любом случае - при нажатии одной и той же клавиши должен быть одинаковый результат. При любой скорости. Только что при неверной скорости результат неверный будет - но все равно одинаковый...

Кстати - UART использую программный - может в нем еще ошибка. Ладно - разберемся. И не такое ломали :)

И клавиатрура после вставления в нее диодов и КТ315го новую не напоминает :)
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Я в свое время при изучении всяких таких девайсов (в том числе и пультов) просто записывал сигнал. Причем простым SoundForge'м и с помощью простой звуковой карты. А потом анализировал эпюру. Думаю, согласовать сможешь сам, скоростя низкие, поэтому 44кГц тебе хватит. Попробуй - реально помогает. Причем, ты можешь записать сигналы всех кнопок и совместить их по началу стартового бита. Сразу все видно. =)
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Post by SfS »

Поздно советовать :) Усе уже кончено :) Сидение с кофием до 03.00 ночи все решило:) Итак:
----------------------------------------------------------------------------------------
40-кнопочная 3хвольтовая клавиятура с последовательным выходом.
------------------------------------------------------------------------------
Контакты:
2 - Vcc=+3.3V
3 - SO - выходной сигнал
10- общий (0V)
------------------------------------------------------------------------------
Замечания:
Выход SO (конт. 3 разъема) - инверсный.
Т.е. на нем постоянно 0, а данные передаются импульсами +3.3вольта.
Схема сопряжения инвертирует сигнал и согласует его с ТТЛ уровнями, что позволяет подключать клавиатуру к любому встроенному UARTу микроконтроллеров.
Скорость обмена - 9600.
------------------------------------------------------------------------------
Таблица кодов клавиш (коды нажатий - однобайтовые):

Для всех клавиш при отпускании вырабатывается код (0x85,0x85),
кроме клавиши Fn, для неё код отпускания (0x9e,0x9e)
------------------------
Символьные Служебные
A = 0x4d B = 0x4b Fn = 0x01 (код отпускания 0x9e,0x9e)
C = 0x65 D = 0x28 BSpc (<-) = 0x17
E = 0x12 F = 0x29 Del = 0x48
G = 0x2a H = 0x2b Enter(<-|)= 0x2c
I = 0x68 J = 0x14 Left = 0x2d
K = 0x15 L = 0x16 Right = 0x2e
M = 0x49 N = 0x4a Up = 0x63
O = 0x4f P = 0x4e Down = 0x1b
Q = 0x10 R = 0x13 Phone = 0x18
S = 0x4c T = 0x6b ToDo = 0x1a
U = 0x69 V = 0x64 Date = 0x2f
W = 0x11 X = 0x66 Memo = 0x62
Y = 0x6a Z = 0x67

Speace = 0x19 (оба)
------------------------------------------------------------------------------
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Post by SfS »

Вот тут лежит версия NedoPC-90.AVROS с поддержкой клавиатурки.

http://www.nedopc.org/nedopc/upload/Ned ... st.tar.bz2

Она полностью сконфигурирована для тестовой программки по AT90S8535. Программка читает символ с клавиатуры и
(с учетом CapsLook и Fn) выводит его в поледовательный порт.
Клавиатура подключается к ноге INT0 процессора.

Коды всех служебных клавиш можно посмотреть в файле ../hl/keypad40.h

Схема сопряжения и коды всех клавиш лежат в ../hl/doc.hl/keypad40.txt

Также добавлен модуль поддержки таймера-1.
Клавиатура пока работает только через программный UART, который настроен только на прием (в общем не UART, а UAR :) ).

Как появится макет с двумя UARTами добавлю поддержку клавиатуры через аппаратный UART.

В общем "на посмотреть" все работает - но кое что еще буду править. Всетаки за несколько часов все не отладить :)
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Post by SfS »

Да! Еще забыл!

Одновременно допускается только нажатие клавиши Fn и любой другой. Две любые другие клавиши нажаты одновременно быть не могут.

Коды в таблице - те, что шлет клавиатура.

Модуль автоматом преобразует их в ASCII. Для несимвольных клавиш используются коды из области 0x01..0x1F.

Ну теперь вроде все. Скачивайте, смотрите. И не пинайте за кривоватый код - он еще сырой. Главное - работает.

Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?
acidrain
Senior
Posts: 159
Joined: 28 Feb 2005 02:31
Location: Krasnodar, Russia

ir-keyboard

Post by acidrain »

Вот интересно, у меня есть клавиатура Луч-803 инфракрасная, как угадать с какой частотой идет обмен? В данный момент использую ее с моим pocketpc, но планирую также использовать со своим программно-вычеслительным комплексиком ;)))
Да и вообще, есть идея сделать переходник ps/2->ирда. Но планов много, пока налаживаю ir приемник на ATmega8515
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Re: ir-keyboard

Post by SfS »

acidrain wrote:Вот интересно, у меня есть клавиатура Луч-803 инфракрасная, как угадать с какой частотой идет обмен? В данный момент использую ее с моим pocketpc, но планирую также использовать со своим программно-вычеслительным комплексиком ;)))
Да и вообще, есть идея сделать переходник ps/2->ирда. Но планов много, пока налаживаю ir приемник на ATmega8515
Почитать стандарты на IRDA прежде всего. Я думаю нет ничего невозможного :)
User avatar
Shaos
Admin
Posts: 24086
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SfS wrote:Да! Еще забыл!

Одновременно допускается только нажатие клавиши Fn и любой другой. Две любые другие клавиши нажаты одновременно быть не могут.

Коды в таблице - те, что шлет клавиатура.

Модуль автоматом преобразует их в ASCII. Для несимвольных клавиш используются коды из области 0x01..0x1F.

Ну теперь вроде все. Скачивайте, смотрите. И не пинайте за кривоватый код - он еще сырой. Главное - работает.

Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?
Браво, SfS! Теперь у нас все есть, чтобы воплотить проект NedoPC-PROTO2 в жизнь! Статью конечно пиши - опубликуем.
Я тут за главного - если что шлите мыло на me собака shaos точка net