Připojení PS/2 klávesnice k PMD85

Ačkoliv jsem si na začátku roku 2019 slíbil, že budu publikovat min. 1 příspěvek měsíčně, po dokončení Magiclandu jsem to úplně vypustil. Trochu se na tom podepsal i fakt, že jsem změnil zaměstnání. Takže nezbývá než normu naplnit třeba i něčím, co už (pro mě) aktuální není, ale jinde se to třeba řeší. 

Jak připojit PS/2 klávesnici? Kouzelná dílna bratří Bórikových nabízí Keyface. Koncept mají výborný – v počítači mohou koexistovat jak PS/2 tak i původní děs běs. Keyface napodobuje originální klávesnici, takže není nutná žádná sw podpora. Před sestavením mě ale napadlo pár vylepšení, jak vypustit některé součástky, a tak jsem vypouštěl a vypouštěl, až zůstal jen jeden mikročip ATtiny2313 a 2 rezistory (pro PS/2), konkrétněji:

  • ke čtení znaků z klávesnice využívám integrovaný UART v mikročipu,
  • mikročip je taktován interním oscilátorem 8MHz,
  • obslužná rutina v rychlé smyčce čte kód sloupce a reaguje na to uzemněním řádků, není nutné sledovat okamžik zápisu do 8255 – odpadá 74LS32,
  • interní pull-up rezistory z mikročipu jsou dost „výživné“ i pro 8255,
  • řádkový výstup z mikročipu je buď logická nula, nebo vstup s pull-up, diody jsou zbytečné.

Abych neřezal šasi péemdéčka, obětoval jsem k připojení klávesnice nejprve DIN konektor pro sériovou linku (s navazující redukcí DIN->mini DIN), později DIN pro připojení monitoru (ten mám připojený jinde). Přímo na konektor jsem připájel pull-up rezistory a tak zbyl jen mikročip ATtiny2313, jenž se v SMD provedení vlezl i s nosnou DPS pod základní desku. Nechal jsem vyčuhovat jen SPI rozhraní pro nějaký update a opravy chyb. Někdy v budoucnu (= a teď už vím, že to nejspíš nikdy nebude) vytvořím nějaký mezikus, který bude zasunovatelný do konektoru, teď to mám na pevno připájené na konektor zespodu.

Klávesnice by měla fungovat ihned po připojení. Využívá se výchozího Scan Code Set 2, který je sice komplikovanější na analýzu, ale za to se nemusí klávesnice nijak konfigurovat, takže je možné ji připojit i za běhu (pokud to ustojí napájecí zdroj). Jev dublování kláves, který podle zpráv vykazoval původní keyface např. v editoru Kassword, se nevyskytuje.

Přiřazení znaků

Reset počítače se vyvolává kombinací kláves SHIFT a ESC, mj. se udělá studený reset i firmwaru mikročipu.

STOP je namapován na obě klávesy CTRL.

EOL je přiřazen klávesám ENTER a to tak, že pravý EOL odpovídá ENTERu v alfanumerické části, levý EOL v numerické části klávesnice (čili pozičně je to naopak, ale přiřadil jsem to podle toho, co se mačká častěji).

Oproti původnímu Keyface nemají Scroll Lock a Num Lock klávesy žádnou funkci.

Schéma zapojení

O schématu se ani nejde bavit. Takže zde dám jen rozpis připojení výstupů ATTiny2313 ke konektoru PMD. 

Připojení ATTiny2313

Zdrojové kódy

Zdrojový kód obsahuje i popis připojení pinů k signálům. Je určen pro překlad ve starém AVR Studio 4. Kód pochopitelně můžete zdarma používat, šířit i modifikovat.

PMDKeyFace.zip

Doplnění

V současnosti už toto zapojení nepoužívám. Opravil jsem klávesnici v PMD sadou na opravu TV ovladačů, tlačítka zpět přišrouboval k desce a keyface vytáhl. Přeci jen je to s původní klávesnicí kompaktnější a retrovější.

 

15 komentářů

  • „Opravil jsem klávesnici v PMD sadou na opravu TV ovladačů, tlačítka zpět přišrouboval k desce“
    Mám jiný problém, klávesy drhnou po delší době používání. Snad by je chtělo trochu máznout na dříku, ale nemám s tím žádnou zkušenost, takže zatím váhám.

    • Libor L.A.

      Řešil jsem podobný problém. Raději jsem celý dřík vytáhl z domečku sundal „kříž“ v horní části dříku a všechny díly vyčistil štětcem a „vyleštil“. Tato oprava pomohla, klávesnice chodí jako nová. Je taky ovšem možné, že pokud klávesy nechodí a vy jste je ještě neotevíral (ty domečky), tak jsou jen vzpříčené kontaktní gumičky vypadlé z dolní části dříku. Rozhodně bych to nemazal ani vazelínou ani suchým mazivem – skončilo by to na plošném spoji. Při montáži domečků zpět na plošný spoj jsem tyto domečky otočil o 90° a pro jejich montáž použil vruty, velikost tuším byla 1,6 nebo 1,8mm. Domečky jsou pro tuto Re-montáž pomocí vrutů geniálně přizpůsobeny.

      • Zdeněk (maximalne.8u.cz)

        Taky to tak mám přišroubované. Jen bych dodal, že po smontování klávesnice se mi deska poněkud zkroutila a kvůli pnutí některé klávesy taky dost drhly (po zamáčknutí se už nevrátily zpět). Takže jsem ty šroubečky (držící klávesy) zase povolil a utáhl. Možná to je důvod i u původní klávesnice, proč drhnou. Rovněž jsem nic nemazal a klávesnice už 1,5 roku funguje. Ale je fakt, že jsem tlačítka vybíral z více klávesnic (tedy hlavně pružinky).

  • 👍
    “ … Vy jste se v tom zase vrtal pane doktore … “
    http://vyhlasto.cz/h/1j31

  • Mám otázku ohľadom napálenia ATtiny2313. Predpokladám, že je nutné ešte nastaviť Fuse bits, Lock bits, Memory adr., atď. Ako to teda treba v software programatora nakonfigurovať ?

    • Zdeněk (maximalne.8u.cz)

      Attiny2313 má být nakonfigurovaný na interní 8MHz RC oscilátor, tj. pokud stačí jen hexa údaje pojistek:
      LOW = 0xE4
      HIGH = 0xDF
      EXTENDED = 0xFF

      Nejedná se o výchozí nastavení z výroby, tam je zapnutá navíc i interní dělička frekvence 8.
      Budu rád za zpětnou vazbu o úspěšnosti nasazení, přeci jen jsem to zkoušel jen jednou.

      • Takže, po správnom nastavení poistiek sú PS/2 klavesnice funkčné, ale PMD85 neresetujú. Signál „PMD RESET“ som priviedol do PMD85 ako /RESIN, a na „AVR RESET“ som zapojil klasický RC člen (10K/1uF). Je to správne ?

        • Zdeněk (maximalne.8u.cz)

          Ano, signál PMD RESET (PD1) přijde připojit na pin 3 klávesnicového konektoru – který je spojen s /RESIN obvodu 8224. AVR RESET může zůstat i nezapojený, podle katalogu je uvnitř pull-up.
          V programu generuji resetovací signál o délce 128us. To je asi málo, i když mě to třeba fungovalo. Možná by pomohlo signál prodloužit – upravený hex je tady:
          http://maximalne.8u.cz/wp-content/uploads/2019/11/PMDKeyFace.zip

          • Ani to nepomohlo, a teraz zisťujem, že aj „Shift“ je bez funkcie, „Stop“ ale funguje. Spoje medzi ATtiny a 8255 som premeral. Možno treba pozrieť v assembleri, či sa tvoria signaly pre PA0 a PD1. V horšom prípade bude vadný ATtiny 🙂 ale to asi nie.

          • Opravujem a beriem späť chybu resetu, pretože som prehliadol riadok, kde sa píše kombinácia SHIFT a ESC pre Reset PMD85, a to samozrejme funguje. Išiel som totiž automaticky podľa Romanového keyface, kde sa používa klasický ALT+CTRL+DEL.
            Stále ale ostáva záhadou nefunkčnosť SHIFTu – pin 5 (PA0) ATtiny. Aj po merani zisťujem, že na pine 5 ostáva log.1 aj po stlačení SHIFT. Ale napr. na pine 4 (PA1) sa po stlačení STOP mení úroveň na log.0. Skúšal som tiež viac PS/2 klávesníc.

          • Zdeněk (maximalne.8u.cz)

            Taky jsem na to koukal, co by s tím mohlo být. Ještě jednou jsem si ověřil, že SHIFT posílá kódy 0x12 (levý) a 0x59 (pravý), s oběma hodnotama počítám. Pokud ale funguje SHIFT+ESC, tak se klávesa zpracovává, jen se nenastavuje PA0. Buď mu nastavení pojistek přiřadilo nějakou jinou funkci nebo je vadný pin. Zdrojáky jsem procházel, chybu nenašel, ale ještě někde pohledám ATtiny2313 a vyzkouším si to.
            Mimochodem, shift v PMD funguje? Třeba s původní kaávesnicí?

          • Áno, original Shift na PMD funguje, malé písmená a iné znaky cez shift zobrazuje. Neskôr tiež vyskúšam druhé ATtiny, lebo všetko je možne.

  • Tak, a chyba je odhalená. Mám totiž zaradené pull-up odpory na PB0-PB4, Stop a Shift. Prekvapením bolo zistenie vadného pull-up na Shift, ktorý mal sice normálnu hodnotu, ale po zapnutí PMD išiel takmer do skratu, po vypnutí tiež, no keď som ho nahrial pájkou, tak mal zase svoju hodnotu. Zmenilo sa to opäť až po zapnutí PMD, išiel do skratu, atď…. Tak som ho vymenil, a už ide Shift tak, ako má 🙂

    • Zdeněk (maximalne.8u.cz)

      Super! Takže vyřešeno a ani jsem se nezapotil 🙂

      • Dobrou správou je aj fakt, že fungujú všetky PS/2 klávesnice, ktoré mám, a prakticky by mali ísť aj AT klávesnice, len musím niekde vyhrabať redukciu 🙂