Клавиатура на Орион-128 - atmega-168

Подключение клавиатуры на atmega-168 и МТ8816 - матрица аналоговых ключей на Орион-128

Продаю платы и наборы микросхем, куплю микросхемы Платы и комплектующие на ПК Орион-128

Дата обновления информации 12.06.2022

И вот сегодня 12/06/2022 наконец то добрался до такой платки. Платку покупал еще полгода назад у Рустама из Тольтти. Атмегу прошивал Рустам.

Документация опубликована на zx-pk вот ссылка:

Прошивка Атмеги 168

Моя сборка

https://zx-pk.ru/threads/33211-universalnyj-kontroller-ps-2-klaviatury-dlya-kompyuterov-s-matrichnymi-klaviaturami.html

Немного цитирую с сайта:

Универсальный контроллер PS/2 клавиатуры для компьютеров с матричными клавиатурами. Предлагается простая схема и программное обеспечение для универсального безвейтового контроллера PS/2 клавиатуры, подходящего для большинства "древних" бытовых компьютеров типа Спектрум, Орион, Корвет и других, в конструкции которых использовалась матричная клавиатура размером до 8*16. Код написан в среде Ардуино для ядра MiniCore, которое позволяет работать с Атмега8, 48, 168, 328 без кварца , но будет работать и на стандартном Ардуино Нано или Уно. Я использовал Атмегу168. Второй компонент системы - матрица аналоговых ключей MT8816. На Али их продают сотнями по бросовым ценам. Программа проста и написана в индийском стиле. Она содержит массив, который устанавливает соответствие между сканкодом и кодом активации соответствующего ключа матрицы.

Контроллер полностью безвейтовый. Тупо замыкает контакты. Весь секрет в микросхеме MT8816. Это управляемая матрица из 128 ключей. Любой можно замкнуть и разомкнуть. Поэтому контроллеру не требуется никаких сигналов от процессора. Только питание 5В. И он полностью универсальный. Можно настроить для работы с любым компьютером с матричной клавиатурой или даже с несколькими, переключая режимы "горячей" клавишей.

Контроллер клавиатуры Орион128 - atmega168 сборка как собрать контроллер клавиатуры на Орион-128

Ко мне платка пришла уже с впаяной атмегой и прошитой. Мне осталось только дособирать.

Контроллер клавиатуры Орион128 - atmega168 сборка как собрать контроллер клавиатуры на Орион-128

Такая платка у меня

Контроллер клавиатуры Орион128 - atmega168 сборка как собрать контроллер клавиатуры на Орион-128  Скачать схему в *.pdf

Особенности сборки плат универсальных контроллеров PS/2 , C1,C2,C3 - блокировочные конденсаторы. Керамические можно применить емкостью от 0.01мкФ и более.

Кварц -16 мгц

R2- 1 Мом

R1 - 10 ком

C3, C4 -0.1 мкф

Электролитический от 100мкФ 10В. Конкретная емкость в основном зависит от качества источника питания. Контакты J2 и J3 служат для подключения матрицы к компьютеру. Разъем H2 на плате DIP-40 - последовательный порт. Его можно использовать для отладки новых прошивок. Кварц и его обвязку на обеих платах запаивать не нужно - МК работают от внутреннего тактового генератора 8МГц.

И так начинаю сборку...

И так пока кварц и его обвязку не ставлю. (Если не хотим делать отладку). Остальное по мере сборки.

 

 

Прошивка для Ориона-128

#include <PS2KeyRaw.h>
#define AX0 4
#define AX1 5
#define AX2 6
#define AX3 7
#define AY0 8
#define AY1 9
#define AY2 10
#define RSTMT 14
#define CSMT  15
#define DATMT 16
#define STBMT 17
#define DATAPIN 2
#define IRQPIN  3

volatile boolean d = HIGH;

uint8_t table[128] = {127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,0,127,127,32,48,127,127,127,1,17,16,33,49,127,
127,3,2,18,34,51,50,127,127,112,4,19,36,35,52,127,127,115,116,100,20,84,68,127,127,127,114,99,83,67,66,127,
127,127,98,82,81,64,65,127,127,127,127,97,127,80,127,127,127,127,127,127,127,127,127,127,127,113,96,127,127,127,127,127,
127,127,127,127,127,127,64,127,127,127,127,52,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127};

PS2KeyRaw keyboard;
void setup() {
  //Инициализация портов
  pinMode(AX0, OUTPUT);   //AX0
  pinMode(AX1, OUTPUT);   //AX1
  pinMode(AX2, OUTPUT);   //AX2
  pinMode(AX3, OUTPUT);   //AX3
  pinMode(AY0, OUTPUT);   //AY0
  pinMode(AY1, OUTPUT);   //AY1
  pinMode(AY2, OUTPUT);   //AY2
  pinMode(RSTMT, OUTPUT); //RES
  pinMode(CSMT, OUTPUT);  //CS
  pinMode(DATMT, OUTPUT); //DAT
  pinMode(STBMT, OUTPUT); //STB
  //Инициализация клавиатуры
  keyboard.begin( DATAPIN, IRQPIN );
  //Инициализация MT8816
  SetAddr(0);
  digitalWrite(RSTMT, LOW);
  digitalWrite(CSMT, LOW);
  digitalWrite(DATMT, LOW);
  digitalWrite(STBMT, LOW); //инициализация
  digitalWrite(CSMT, HIGH); //выбор чипа
  digitalWrite(RSTMT, HIGH);
  digitalWrite(RSTMT, LOW);  //сброс
  digitalWrite(CSMT, LOW);
  
  SetAddr(table[0x12]);
  SetKey(LOW);
}
void SetAddr(uint8_t addr) {
  digitalWrite(AX0,bitRead(addr,0));
  digitalWrite(AX1,bitRead(addr,1));
  digitalWrite(AX2,bitRead(addr,2));
  digitalWrite(AX3,bitRead(addr,3));
  digitalWrite(AY0,bitRead(addr,4));
  digitalWrite(AY1,bitRead(addr,5));
  digitalWrite(AY2,bitRead(addr,6));
}
void SetKey(boolean data){
   digitalWrite(CSMT, HIGH); //выбор чипа
   digitalWrite(STBMT, HIGH); //строб on
   digitalWrite(DATMT, data); //данные
   digitalWrite(STBMT, LOW); //строб off    
   digitalWrite(CSMT, LOW);   
}
void loop()
{
  if( keyboard.available() ){
    int c = keyboard.read(); //чтение кода
    switch (c) {
      case 0xE0:              //если считался префикс 0xE0
        break;
      case 0xF0:              //если считался префикс 0xF0 (отпускание клавиши)
        d = LOW;
        break;
      case 0x66:              //если считался код 0x66 [BS]
        SetAddr(table[0x12]);
        SetKey(d);
        SetAddr(table[0x45]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x6B:              //если считался код 0x6B [Left]
        SetAddr(table[0x12]);
        SetKey(d);
        SetAddr(table[0x2E]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x72:              //если считался код 0x72 [Down]
        SetAddr(table[0x12]);
        SetKey(d);
        SetAddr(table[0x36]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x75:              //если считался код 0x75 [Up]
        SetAddr(table[0x12]);
        SetKey(d);
        SetAddr(table[0x3D]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x74:              //если считался код 0x74 [Right]
        SetAddr(table[0x12]);
        SetKey(d);
        SetAddr(table[0x3E]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x76:              //если считался код 0x76 [Edit]
        SetAddr(table[0x12]);
        SetKey(d);
        SetAddr(table[0x16]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x58:              //если считался код 0x58 [Caps lock]
        SetAddr(table[0x12]);
        SetKey(d);
        SetAddr(table[0x1E]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x0D:              //если считался код 0x0D [Ext mode]
        SetAddr(table[0x12]);
        SetKey(d);
        SetAddr(table[0x59]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x41:              //если считался код 0x41 [,]
        SetAddr(table[0x59]);
        SetKey(d);
        SetAddr(table[0x31]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x49:              //если считался код 0x49 [.]
        SetAddr(table[0x59]);
        SetKey(d);
        SetAddr(table[0x3A]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x4C:              //если считался код 0x4C [;]
        SetAddr(table[0x59]);
        SetKey(d);
        SetAddr(table[0x44]);
        SetKey(d);
        d = HIGH;
        break;
      case 0x52:              //если считался код 0x52 ["]
        SetAddr(table[0x59]);
        SetKey(d);
        SetAddr(table[0x4D]);
        SetKey(d);
        d = HIGH;
        break;
      default:  
        SetAddr(table[c]);
        SetKey(d);
        d = HIGH;
    }
  }
}

Клавиатура РК86

Микроклавиатура на микрокнопках РК86

Клавиатуры на Atmega48 PC/2 от IBM в ДИПе

Подключение клавиатуры МС7007

Клавиатура РК86 на механических кнопках

Клавиатура от Корвета

Клавиатура на Атмега168

Клавиатура РК86+PC на механических кнопках

 

Купить платы, наборы микросхем на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу