Difference between revisions of "TinyPS2"

From Land Boards Wiki
Jump to navigation Jump to search
 
(121 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[File:TinyPS2_P899_cropped-720px.jpg]]
+
See [[TinyPS2 Revs 1-3]] for ATTiny85 based build
 +
 
 +
[[File:TinyPS2_Front_Rev4_3D.png]]
 +
 
 +
== Introduction ==
 +
 
 +
It is getting difficult to find ASCII serial keyboards for use in Retro-Computer projects. This card fills that need. The card is a PS/2 keyboard to TTL Level Serial adapter. PS/2 keyboards are still widely available.
 +
 
 +
[[file:Keyboard_PS2_MicrosoftNatural.jpg]]
  
 
== Features ==
 
== Features ==
  
* PS/2 keyboard or mouse to TTL Level Serial converter
+
* [[QT_Py_(RP2040_based)|QT Py (RP2040 based)]]
* ATTiny85
+
** Run at 125 MHz
** 8 KB of flash
+
** 2MB of In System Programmable (ISP) flash
** 8-MHz internal RC oscillator that can be used as the default clock
+
** 264KB of SRAM
** 512 bytes of EEPROM
+
* 115,200 baud serial
** 512 bytes of SRAM
+
** 57,600-250,000 are build time options
* 115,200 baud
 
 
* 49x49mm ODAS form factor
 
* 49x49mm ODAS form factor
* 4-40 mounting holes
+
* (4) 4-40 mounting holes
 +
* 3.3V or 5V operation
 +
* Current measurement
 +
** TBD @ 5V (without keyboard)
 +
** TBD @ 5V (including keyboard)
 +
** TBD @ 3.3V (including keyboard)
 +
*** Does not require a keyboard that works at 3.3V
  
=== TinyPS2 ===
+
=== CPU Connections ===
  
[[file:TinyPS2_CPU_Pins.PNG]]
+
[[file:TinyPS2_CPU_Rev4_Conns.PNG]]
 +
 
 +
<pre>
 +
#define DATAPIN 27
 +
#define IRQPIN  26
 +
</pre>
  
 
== Connectors ==
 
== Connectors ==
Line 21: Line 39:
 
=== J1 - TTL Serial Connector ===
 
=== J1 - TTL Serial Connector ===
  
# 5V
+
[[file:TinyPS2_J1_Rev4_Conns.PNG]]
 +
 
 +
# VCC (pin nearest to J1 silkscreem)
 
# SERTX
 
# SERTX
 
# N/C
 
# N/C
Line 30: Line 50:
 
* Standard PS/2 Mini-DIN-6 connector
 
* Standard PS/2 Mini-DIN-6 connector
  
=== H2 - In-System Programming Header ===
+
[[file:TinyPS2_J2_Rev4_Conns.PNG]]
  
* SPI connector to download ATTiny85
+
== Firmware Build Card Rev 4 ==
* 2x3 header
 
* Program ATTiny85 without PS/2 keyboard attached
 
* Pinout
 
  
# KBCLK
+
[[file:asciifull.png]]
# GND
 
# SERTX
 
# KBDAT
 
# RST*
 
# GND
 
  
== Firmware ==
+
=== Arduino ===
  
* [https://github.com/land-boards/lb-Arduino-Code/tree/master/LBCards/TinyPS2 GitHib Repo for TinyPS2 Firmware]
+
* Card rev 4 uses a QTPy or XAIO RP2040 CPU
* Add to Prefernces
+
* Arduino Library
 +
** [https://github.com/techpaul/PS2KeyAdvanced PS2KeyAdvanced]
 +
* [https://github.com/land-boards/lb-Arduino-Code/blob/master/LBCards/TinyPS2/TinyPS2_PCB_Rev4_AdvKbd/TinyPS2_PCB_Rev4_AdvKbd.ino TinyPS2_PCB_Rev4_AdvKbd] - code
 
<pre>
 
<pre>
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
+
#define DATAPIN 27
 
+
#define IRQPIN  26
 
</pre>
 
</pre>
  
[[file:ATtiny45-85.png]]
+
* Example code produces warning
  
=== TinyPS2V01 ===
 
 
* [https://www.pjrc.com/teensy/td_libs_PS2Keyboard.html PJRC PS/2 library]
 
* [https://github.com/land-boards/lb-Arduino-Code/tree/master/LBCards/TinyPS2/TinyPS2V01 Read PS/2 print to screen]
 
* Resources (Arduino UNO)
 
 
<pre>
 
<pre>
Sketch uses 3334 bytes (10%) of program storage space. Maximum is 32256 bytes.
+
WARNING: library PS2KeyAdvanced claims to run on avr, sam, samd1, stm32, esp32 architecture(s) and may be incompatible with your current board which runs on rp2040 architecture(s).
Global variables use 377 bytes (18%) of dynamic memory, leaving 1671 bytes for local variables. Maximum is 2048 bytes.
+
Sketch uses 82336 bytes (0%) of program storage space. Maximum is 16777216 bytes.
</pre>
+
Global variables use 43096 bytes (15%) of dynamic memory, leaving 227240 bytes for local variables. Maximum is 270336 bytes.
 
 
=== TinyPS2V02 ===
 
 
 
* Read PS/2 keyboard, write Serial (9600 baud)
 
* [https://www.pjrc.com/teensy/td_libs_PS2Keyboard.html PJRC PS/2 library]
 
* [https://docs.arduino.cc/learn/built-in-libraries/software-serial Software Serial library]
 
* Code
 
 
</pre>
 
</pre>
#include <SoftwareSerial.h>
 
#include <PS2Keyboard.h>
 
  
const int DataPin = 0;
+
* Code works well!
const int IRQpin =  1;
 
  
#define rxPin 3
+
=== C++ ===
#define txPin 2
 
  
// Set up SoftwareSerial and PS/2 objects
+
* [https://github.com/tvlad1234/pico-ps2Driv pico-ps2Driv] - SDK C code
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
 
PS2Keyboard keyboard;
 
  
void setup() {
+
=== CircuitPython ===
  
  pinMode(rxPin, INPUT);
+
* CircuitPython support issues
  pinMode(txPin, OUTPUT);
+
** [https://docs.circuitpython.org/en/latest/shared-bindings/ps2io/index.html PS/2 Library] - Not in Pico core modules
  mySerial.begin(9600);
 
 
 
  keyboard.begin(DataPin, IRQpin);
 
}
 
  
void loop() {
 
  if (keyboard.available())
 
  {
 
   
 
    // read the next key
 
    char c = keyboard.read();
 
    mySerial.write(c);
 
  }
 
}
 
</pre>
 
* Resources (ATTiny85)
 
 
<pre>
 
<pre>
Sketch uses 3126 bytes (38%) of program storage space. Maximum is 8192 bytes.
+
>>> import ps2io
Global variables use 241 bytes (47%) of dynamic memory, leaving 271 bytes for local variables. Maximum is 512 bytes.
+
Traceback (most recent call last):
 +
  File "<stdin>", line 1, in <module>
 +
ImportError: no module named 'ps2io'
 
</pre>
 
</pre>
 
== Other People's Videos ==
 
 
<video type="youtube">cSaBCtcUoq4</video>
 
 
<video type="youtube">PmJlDlI-Pb4</video>
 
  
 
== Schematic ==
 
== Schematic ==
Line 122: Line 99:
 
== Issues ==
 
== Issues ==
  
* Missing pull-up resistors on PS/2
+
* [[TinyPS2_Revs_1-3|Revs 1-3 are documented here]]
** Rev 2 - add pull-up resistors
+
 
* Missing C3 cap in sequence
+
=== Rev 4 ===
** Rev 2 - change C4 => C3
+
 
 +
* Changed CPU
 +
** Was 8 MHz ATTiny85
 +
** Changed to QT PY or XAIO
 +
* Changed pin usage
 +
* Uses Hardware Transmitter in CPU
 +
* Keyboard runs at 5V
 +
* CPU runs at 3.3VV
 +
* 3.3V to 5V level shifter
  
 
== Assembly Sheet ==
 
== Assembly Sheet ==
  
* [[TinyPS2 Assembly Sheet]]
+
* [[TinyPS2 Rev 4 Assembly Sheet]]

Latest revision as of 16:51, 15 August 2022

See TinyPS2 Revs 1-3 for ATTiny85 based build

TinyPS2 Front Rev4 3D.png

Introduction

It is getting difficult to find ASCII serial keyboards for use in Retro-Computer projects. This card fills that need. The card is a PS/2 keyboard to TTL Level Serial adapter. PS/2 keyboards are still widely available.

Keyboard PS2 MicrosoftNatural.jpg

Features

  • QT Py (RP2040 based)
    • Run at 125 MHz
    • 2MB of In System Programmable (ISP) flash
    • 264KB of SRAM
  • 115,200 baud serial
    • 57,600-250,000 are build time options
  • 49x49mm ODAS form factor
  • (4) 4-40 mounting holes
  • 3.3V or 5V operation
  • Current measurement
    • TBD @ 5V (without keyboard)
    • TBD @ 5V (including keyboard)
    • TBD @ 3.3V (including keyboard)
      • Does not require a keyboard that works at 3.3V

CPU Connections

TinyPS2 CPU Rev4 Conns.PNG

#define DATAPIN 27
#define IRQPIN  26

Connectors

J1 - TTL Serial Connector

TinyPS2 J1 Rev4 Conns.PNG

  1. VCC (pin nearest to J1 silkscreem)
  2. SERTX
  3. N/C
  4. GND

J2 - PS/2

  • Standard PS/2 Mini-DIN-6 connector

TinyPS2 J2 Rev4 Conns.PNG

Firmware Build Card Rev 4

Asciifull.png

Arduino

#define DATAPIN 27
#define IRQPIN  26
  • Example code produces warning
WARNING: library PS2KeyAdvanced claims to run on avr, sam, samd1, stm32, esp32 architecture(s) and may be incompatible with your current board which runs on rp2040 architecture(s).
Sketch uses 82336 bytes (0%) of program storage space. Maximum is 16777216 bytes.
Global variables use 43096 bytes (15%) of dynamic memory, leaving 227240 bytes for local variables. Maximum is 270336 bytes.
  • Code works well!

C++

CircuitPython

  • CircuitPython support issues
>>> import ps2io
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: no module named 'ps2io'

Schematic

Issues

Rev 4

  • Changed CPU
    • Was 8 MHz ATTiny85
    • Changed to QT PY or XAIO
  • Changed pin usage
  • Uses Hardware Transmitter in CPU
  • Keyboard runs at 5V
  • CPU runs at 3.3VV
  • 3.3V to 5V level shifter

Assembly Sheet