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

Программирование ATMEL в BASCOM.

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » USB клавиатура и AVR. Как подключить?


USB клавиатура и AVR. Как подключить?

Сообщений 1 страница 19 из 19

1

Друзья! Доброго времени суток!

Есть идея, подключить USB клавиатуру от компа к AVR.
Поиски положительных результатов для BASCOM не дали. Есть что - то похожее но под Ардуину, что не ВАХ как радует :-(

Идея управлять с клавиатуры различными девайсами.

Есть у кого информация по этой теме?

Заранее благодарен.

0

2

И, что Вам мешает это сделать, в Bascom предусмотренна функция, специально для такого дела!

http://avrhelp.mcselec.com/index.html?getatkbd.htm  --  правда прерывание в примере не совсем корректно работает, но это уже мелочи. Вариант правильного прерывания можете попросить у пользователя нашего форума MACTEPok.

http://cxem.net/mc/mc173.php

Отредактировано sasha_1973 (2014-05-02 10:12:01)

0

3

В Help(E) приводится пример работы с клавиатурой PS/2 AT.
Вопрос, как адаптировать USB клавиатуру?
Возможно ли использование USB - PS/2 переходника?

0

4

Выше уже написано что нужен USB хост. Проще говоря, нужно чтобы клавиатура "думала" что подключена к USB порту компа. Знаете в чем отличие обмена по PS/2 и USB?
Лучше найдите PS/2-клавиатуру и используйте ее.

Похожая тема. http://avrproject.ru/forum/9-383-1

0

5

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

Для USB клавиатуры нужно организовывать хост


Контроллер клавиатуры сам выбирает правильный вариант, никакого хоста не нужно.

http://sc.uploads.ru/t/axtJf.jpg

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

Возможно ли использование USB - PS/2 переходника?


Возможно

Отредактировано sasha_1973 (2014-05-02 13:27:36)

0

6

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

Контроллер клавиатуры сам выбирает правильный вариант, никакого хоста не нужно.

Не все контроллеры клав это поддерживают.

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

Возможно

Насколько мне известно, переходники подключаются к USB порту компа и к PS/2 клаве, а не наоборот.

Отредактировано Пётр (2014-05-02 13:26:30)

0

7

Ок! Попробую. Позже отпишусь!

0

8

Пётр написал(а):

Не все контроллеры клав это поддерживают.


Большинство современных клавиатур, включая детские (очень удобно таскать с собой, в 2-3 раза меньше стандартной).

http://sb.uploads.ru/t/yPf2v.jpg http://sc.uploads.ru/t/ZdqaR.jpg
http://sc.uploads.ru/t/n7HQR.jpg http://sb.uploads.ru/t/B3hWi.jpg
http://sa.uploads.ru/t/pJUlu.jpg http://sa.uploads.ru/t/MPNkl.jpg

Отредактировано sasha_1973 (2014-05-02 14:11:15)

0

9

Пётр написал(а):

Насколько мне известно, переходники подключаются к USB порту компа и к PS/2 клаве, а не наоборот.

Не только

http://sa.uploads.ru/t/Vqnfp.jpg

http://sb.uploads.ru/t/e78na.jpg

Отредактировано sasha_1973 (2014-05-02 13:48:50)

0

10

Пипец, спор на пустом месте!

После праздников, будет рабочий вариант, USB клавиатура и любая Atmega

Отредактировано sasha_1973 (2014-05-02 13:35:38)

+1

11

Будет здорово если получится! :-)

0

12

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

Ну и где? За слова нужно отвечать.


А я всё думал, чего это Сергей Шилов молчит?

Не знаю как у вас в России, а у нас в Украине, 9 мая - День Победы, всё ещё считается праздником !!!

0

13

Экспериментировал с 3 типами USB клав, других попросту под руками не было.  О их внутренностях и количествах рабочих протоколов представления не имею. тестировал на Atmega8 и Atmega32.

Код из примера BASCOM с внешним прерыванием. Удалил лишнее в обработчике. Добавил светодиод для индикации нажатия кнопок.

Код:
'----------------------------------------------------------------------------
' Считывание кода нажатой клавиши и отправка в COM
'


$regfile = "m8def.dat"

$crystal = 8000000                                          '                                              '
$hwstack = 32                                               '
$swstack = 10                                               '
$framesize = 40                                             '
'$sim

Config Pind.0 = Input                                       ' Конфигурация вывода RxD, приёмник UART
Config Pind.1 = Output                                      ' Конфигурация вывода TxD, передатчик UART

Config Portb.4 = Output : Portb.4 = 0                       ' Светодиод, индикация нажатия кнопки клавиатуры
Config Pind.2 = Input : Portd.2 = 1                         ' Clock от клавиатуры
Config Pind.3 = Input : Portd.3 = 1                         ' Data от клавиатуры

Led Alias Portb.4

Config Keyboard = Pind.2 , Data = Pind.3 , Keydata = Keydata       ' Конфигурация клавиатуры

'----------------------------  Настройка UART  --------------------------------------
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

' Определение обработчика прерываний INT0
On Int0 Isr0                                                ' по умолчанию настроено на LOW Level

Enable Int0
Enable Interrupts


' Определение переменных
Dim B As Byte                                               ' Переменная для работы функции Getatkbd()
Dim C As Byte                                               ' Переменная с кодом нажатой клавиши
Dim Butt_flag As Bit                                        ' Флаг принятого кода кнопки

Set Led
Waitms 500
Reset Led

Print "Проверка клавиатуры"

'---------------------------------------------------------------------------------------------------
Do
    If Butt_flag = 1 Then                                   ' Если флаг поднят
        Reset Butt_flag                                     ' Сбрасываем флаг
        Set Led                                             ' Зажигаем светодиод для индикации нажатия
        Print Chr(c);                                       ' Выдаем в терминал в строку символы нажатых кнопок
        C = 0                                               ' Обнуляем переменную
        Waitms 100                                          '
        Reset Led                                           ' Гасим светодиод
    End If
Loop
End
'---------------------------------------------------------------------------------------------------

'
Isr0:                                                       ' Результат считывания сохраняется в регистре R24 функцией _getatkbd

 $asm
    push r24           ; Сохраняем регистры
    in r24,sreg
    push r24
    rCall _getatkbd    ; вызываем функцию опроса клавиатуры
    sts {c},r24        ; записали в переменную С содержимое регистра r24
    pop r24            ; Восстанавливаем регистры
    !out sreg,r24
    pop r24
 $end Asm

 If C <> 0 Then Set Butt_flag                               ' Если в переменную C записали код кнопки, поднимаем флаг
Return




B = Getatkbd()                                              ' эта строка обязательна. После основного кода.

' Таблица кодов клавиатуры

Keydata:
' без шифта
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

' с шифтом
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

Фото клавиатур и макетки:
Клава1
Клава1
Клава2
Клава2
Мини
Мини
Макетка
Макетка

+1

14

Видео работы терминала и макетки
Видео

0

15

У меня с этим кодом заработала такая клавиатура:
http://sb.uploads.ru/t/r6fc2.gif
http://sa.uploads.ru/t/iK46O.gif
Это макет, паял и для PS/2, и для USB.
http://sc.uploads.ru/t/52s7I.gif
Преобразователь от телефонного шнурка, на его выводах паразитное питание присутствует для Меги.
Поэтому при первом старте девайса шнурок нужно отключать, иначе клавиатура не инициализируется.
Для PS/2 такой проблемы не наблюдал.
Очевидно, что не все клавиатуры будут работать, а только те, которые имеют двойной протокол.
Интересно, что в данной клавиатуре все допольнительные мультимедийные клавиши и даже энкодер громкости работают.
Правда кое где код всегда "0", но это и понятно - таблица перекодировки в программе "куцая".

0

16

Если кому надо таблицы перекодировки из скан-кода в ASCII, то можно взять отсюда и переделать под bascom:
https://mysvn.ru/schoolbell/pbiidemo/PCKeyboard.cpp

0

17

radan
Доброго .... Ваш последний пост по этой Теме - 2014 датирован ....Но ничего не открывается . уже . Если не трудно - продублируйте  (меня интересует именно подключение клавиатур  USB , возможно двухрежимных к AVR....именно аппаратная часть , язык меня не интересует - я на C пишу .(Боле конкретно - как в PS/2 перевести клавиатуру  (HID не интересен))) Заранее Спасибо.

Отредактировано OlegNZH (2017-02-05 06:30:57)

0

18

sasha_1973 написал(а):
Пётр написал(а):

Насколько мне известно, переходники подключаются к USB порту компа и к PS/2 клаве, а не наоборот.

Не только

http://sa.uploads.ru/t/Vqnfp.jpg

Там электроники нет, а только пара проводков. Т. е. если контроллер клавиатуры или мышки не поддерживает USB и PS/2, то работать не будет.

0

19

Пётр написал(а):

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

    Пётр написал(а):

        Насколько мне известно, переходники подключаются к USB порту компа и к PS/2 клаве, а не наоборот.

    Не только

    http://sa.uploads.ru/t/Vqnfp.jpg

Там электроники нет, а только пара проводков. Т. е. если контроллер клавиатуры или мышки не поддерживает USB и PS/2, то работать не будет.

В USB -  есть хитрые моменты . Подтяжки , по которым всё определяется (даже пусть два провода  (D+ D-), но резистор должен показывать, в каком режиме будет порт находиться )  Это совсем другая История , а может и не совсем ....История простая - ну не хочется мне планку на клаве гробить , подпаиваться ,  всего-то - отдельная цифровая боковушка  USB-ная, выбрать цифирь , обработать процессором.дальнейшее- Сам.(Элементарно эту плёночную состыковать программно  с AVR , но внешний вид будет страдать - переделывать , когда можно , теоретически перекинуть в PS/2, и спокойно снимать данные) (Недавно разбирал клавы , на которые Внучки разные ПОПИСАЛИ (натурально! :) ) так там  распайка половинчатая - полу-USB , полу- PS/2 - то есть интеллектуальные  , нужно просто обозначить - в какой режим перейти)  Я об этом и спрашиваю .... Никто не сталкивался?
PS Если не очень понятно , то дополняю - цоколёвка(маркировка) на плате под PS/2 , и цвета не соответствуют USB , но клава работает именно в режиме  USB (есть пустые места под SMD)

Отредактировано OlegNZH (2017-02-08 17:18:25)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » USB клавиатура и AVR. Как подключить?