User Tag List

Страница 6 из 31 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 303

Тема: Орион-128: Контроллер PS/2-клавиатуры

  1. #51
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,721
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    87 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Но ведь у нас они работают без кварца, т.е. от встроенного тактового источника? 8МГц ЕМНИП? Он одинаковый у всех или отличается? Или для ATMega168/ATMega328 в схему добавляется кварц?
    Я имел ввиду, что по быстродействию они не отличаются.
    Встроенный генератор у них у всех на 8 МГц.

  2. #52
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    На базе разработки caro из данного топика скомплектованы конструкторы для самостоятельной пайки KEYB&SINC-2 для Орион и Радио-86РК (http://zx.pk.ru/showthread.php?t=14757).
    Последний раз редактировалось zx-kit; 03.02.2012 в 17:27.
    "L-256"

  3. #53
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Попробую завтра сделать на ATMega8.

    У ATMega8 есть 2 ноги (INT0, INT1), изменение напряжения на которых генерирует прерывание. Я подам на ножку INT0 сигнал с 36-ой ноги ВВ55 (это WR). Туда приходит сигнал, когда программа выбирает ряд для сканирования клавиатуры.

    P.S. Это проще, чем найти нужный микроконтроллер мне.
    Последний раз редактировалось vinxru; 18.03.2012 в 23:15.

  4. #54
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,721
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    87 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru
    Попробую завтра сделать на ATMega8.

    У ATMega8 есть 2 ноги (INT0, INT1), изменение напряжения на которых генерирует прерывание. Я подам на ножку INT0 сигнал с 36-ой ноги ВВ55 (это WR). Туда приходит сигнал, когда программа выбирает ряд для сканирования клавиатуры.
    Желательно добавить к WR/ сигнал CS/ (ножка 6 ВВ55),
    иначе придется отрабатывать все сигналы записи и в память и во все порты ввода/вывода.
    Для этого нужен один элемент ИЛИ, например из КР1533ЛЛ1.
    А еще лучше сформировать сигнал записи в порт B PPI (A0=1, A1=0, WR/=0, CS/=0),
    поскольку адрес сканирования изменяется именно после записи в этот порт.

    Цитата Сообщение от vinxru
    P.S. Это проще, чем найти нужный микроконтроллер мне.
    Прошивку надо будет адаптировать под этот вариант схемы.
    Последний раз редактировалось caro; 19.03.2012 в 10:11.

  5. #55
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тут четыре варианта.

    1) Это делаешь ты

    2) Ты даешь исходники, и я первый раз в жизни сажусь на AVR ассемблер.

    3) Ты не даешь исходники, и я дизассемблирую их. Но это маловероятно

    4) Я пишу на си вот такую программу

    Код:
    // Рассчитанный заранее ответ на все 256 комбинаций входного регистра
    unsigned char matrix[256];
    
    // При получении сигнала WR сразу же меняем данные на выходе.
    interrupt [INT_EXT0] onWrChanged() {
      PIND = matrix[(unsigned char)PORTB);
    }
    
    // Нажатые клавиши PS/2 клавиатуры
    const int pressedMax = 8;
    int pressedCnt = 0;
    unsigned char pressed[pressedMax]; // Расширенные коды не учитываем. итого 255 возможных сканкодов.
    
    // Пиемник PS/2. Выполяется в основном коде, что бы прерывание могло максимально быстро отработать.
    void ps() {
      // Контроллируем на входе PS2 CLOCK изменение сигнала. Собираем принятые биты в пакет,
      // проверяем где начинается пакет и заполняем/очищаем массив pressed[]
    }
    
    unsigned char decodeR[256]; // Таблица соответствия, если горит индикатор РУС.
    unsigned char decodeE[256]; // Таблица соответствия, если не горит индикатор РУС.
    
    void mainLoop() {
      while(1) {
        // Выбранная таблица.
        unsigned char* decode = (PINC&4) ? decodeR : decodeE;
        // Рассчитываем ответ для 256 комбинаций входного регистра
        for(int i=0; i<256; i++) {     
          unsigned char d=0;
          for(int j=0; j<pressedCnt; j++) {
            char x = decode[pressed[j]]; // В битах 0..2 зашифрован ряд, в 3..5 столбец.
            if(i & (1<<(x&7)) d |= 1<<((x>>3)&7);
    	ps(); // Обрабатываем PS/2
          }
          matrix[i] = d;
          // Обновляем выход даже без сигнала WR
          if(POTRB==i) PINB = d;
        }
        // Рассчитываем клавиши СС, УС, РУС и СБРОС
        unsigned char d=0;
        for(int j=0; j<pressedCnt; j++) {
          char x = decode[pressed[j]]; // В битах 6..7 зашифрованы эти кнопки
          d |= 1<<(x>>6);
          ps(); // Обрабатываем PS/2
        }
        PINC = d;
      }
    }
    
    // Еще надо поджечь на клавиатуре светодиод в соответствии RUS/LAT
    Итого за 1-2 часа справлюсь.
    Последний раз редактировалось vinxru; 19.03.2012 в 11:09.

  6. #56
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,721
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    87 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru
    Тут четыре варианта.

    1) Это делаешь ты
    Да не проблема.
    Цитата Сообщение от vinxru
    2) Ты даешь исходники, и я первый раз в жизни сажусь на AVR ассемблер.
    3) Ты не даешь исходники, и я дизассемблирую их. Но это маловероятно
    Времени потратишь значительно больше, чем по 4-му варианту.

    Цитата Сообщение от vinxru
    4) Я пишу на си вот такую программу
    .......
    Итого за 1-2 часа справлюсь.
    Здорово, мне пожалуй исправить схему и доработать прошивку за такое время не удастся.
    Попробуй, может у тебя действительно быстрее получится

    PS. Сигналом /RES на выходе контролллера клавиатуры придется пожертвовать, иначе не хватит ножек у МК.
    Последний раз редактировалось caro; 19.03.2012 в 11:32.

  7. #57
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    PS. Сигналом /RES на выходе контролллера клавиатуры придется пожертвовать, иначе не хватит ножек у МК.
    D2 - Вход WR.
    D0-D1,C0,D3-D7 - Выход данных на клавиатуру.
    B0-B7 - Вход данных с клавиатуры.
    С1 - Вход светодиода РУС/ЛАТ.
    С2,С3,С4 - кнопки клавиатуры РУС, СС, УС.
    С5 - Сброс.

    Еще две ноги под порт PS/2 не хватает.

    Подумаю, как регистр/мультиплексор прицепить.

  8. #58
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,721
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    87 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru
    D2 - Вход WR.
    Еще раз говорю, чистый WR не рекомендую, а то на каждую операцию записи придется отвечать.

    Цитата Сообщение от vinxru
    D0-D1,C0,D3-D7 - Выход данных на клавиатуру.
    На выход лучше порт B, данные можно выдать одной командой.

    Цитата Сообщение от vinxru
    B0-B7 - Вход данных с клавиатуры.
    Вход адреса сканирования лучше с порта D, и с одной из линий порта C.
    Цитата Сообщение от vinxru
    С1 - Вход светодиода РУС/ЛАТ.
    Не обязательно, поскольку можно задействовать один из индикаторов клавиатуры, например Scroll Lock.

    Цитата Сообщение от vinxru
    С2,С3,С4 - кнопки клавиатуры РУС, СС, УС.
    С5 - Сброс.
    Еще две ноги под порт PS/2 не хватает.
    Или одной ноги.

    Цитата Сообщение от vinxru
    Подумаю, как регистр/мультиплексор прицепить.
    Можно мультиплексировать адреса и данные, тогда всё влезет, да еще останется
    Но это уже другая схема и прошивка.

  9. #59
    Banned
    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Еще раз говорю, чистый WR не рекомендую, а то на каждую операцию записи придется отвечать.
    Это понятно.

    Цитата Сообщение от caro Посмотреть сообщение
    На выход лучше порт B, данные можно выдать одной командой.
    Вход адреса сканирования лучше с порта D, и с одной из линий порта C.
    Лучше так сделать. Но это не сильно критично. Сканирование клавиатуры производится минимум двумя командами процессора 8080. Запись адреса, чтение данных. Это достаточно большой промежуток времени.

    ---------- Post added at 11:23 ---------- Previous post was at 11:22 ----------

    Мне вот интересно, если я поставлю сдвиговый регистр на сигналы СС, УС, РУС, СБРОС. То заметит ли компьютер момент загрузки новых значений в регистр? Выходные сигналы можно затормозить конденсаторами.

    ---------- Post added at 11:26 ---------- Previous post was at 11:23 ----------

    Я в вашей схеме не заметил входа сигнала РУС/ЛАТ. И в прошивке не заметил разницы между раскладками РУС/ЛАТ.

    А сделать хочется. Это очень хорошая идея, менять прошивки в зависимости от светодиода.

  10. #60
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    107
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Цитата Сообщение от Сообщение от vinxru
    С1 - Вход светодиода РУС/ЛАТ.
    Не обязательно, поскольку можно задействовать один из индикаторов клавиатуры, например Scroll Lock.
    Цитата Сообщение от vinxru Посмотреть сообщение
    Это очень хорошая идея, менять прошивки в зависимости от светодиода.
    Это неважная идея. Орионовский клавиатурный светодиод (атавизм от РК) вообще не надо эмулировать в виду того, что он включается программно, и при этом крайне слабо поддержан в драйверах, отличных от дефолтового (весьма примитивного) драйвера экрана от Монитора F800.
    К примеру, в CP/M многие драйвера с поддержкой не двух регистров как у КОИ7 (РУС-ЛАТ), а четырех регистров как у АЛЬТ или КОИ8 (РУС-рус-ЛАТ-лат) отображают состояние не светодиодом, а формой курсора.
    Последний раз редактировалось Error404; 19.03.2012 в 12:31.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

Страница 6 из 31 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. Ответов: 34
    Последнее: 24.11.2022, 16:05
  2. Ответов: 146
    Последнее: 31.05.2020, 19:00
  3. БезWaitовый контроллер клавиатуры
    от caro в разделе Устройства ввода
    Ответов: 68
    Последнее: 01.07.2015, 05:42
  4. Куплю контроллер клавиатуры
    от AAA в разделе Барахолка (архив)
    Ответов: 121
    Последнее: 01.02.2008, 18:33
  5. Контроллер клавиатуры для Скорпиона
    от Nikolaj Amosov (500:812/02.26) в разделе Scorpion
    Ответов: 1
    Последнее: 15.11.2005, 23:05

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •