Difference between revisions of "TinyPS2"
Jump to navigation
Jump to search
Blwikiadmin (talk | contribs) |
Blwikiadmin (talk | contribs) |
||
Line 28: | Line 28: | ||
=== CPU Connections === | === CPU Connections === | ||
− | [[file: | + | [[file:TinyPS2_CPU_Rev4_Conns.PNG]] |
== Connectors == | == Connectors == |
Revision as of 09:26, 15 August 2022
See TinyPS2 Revs 1-3 for ATTiny85 based build
Contents
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.
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
Connectors
J1 - TTL Serial Connector
- VCC (pin nearest to J1 silkscreem)
- SERTX
- N/C
- GND
J2 - PS/2
- Standard PS/2 Mini-DIN-6 connector
H2 - In-System Programming Header
- SPI connector to download ATTiny85
- 2x3 header
- Program ATTiny85 without PS/2 keyboard attached
- Pinout
- KBCLK
- VCC
- SERTX
- KBDAT
- RST*
- GND
Firmware Build Card Rev 4
- Card rev 4 uses a QTPy or XAIO RP2040 CPU
- Arduino Library
- Example code built with 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.
- CircuitPython support issues
- PS/2 Library - Not in Pico core modules
>>> import ps2io Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: no module named 'ps2io'
Firmware Builds Card Revs 1-3 (ATTiny85)
Two software builds:
- Scott Baker's build
- Arduino IDE port
Scott Baker's Software Build
- Scott Baker's Build BLOG page
- Scott's demo video
- Scott's GitHub page
- Scott appears to have used Crosspack for AVR software development
- Scott uses two libraries from other projects
- ATTiny85 UART Library - The Garage Lab
- Interrupts: Interfacing a Microcontroller with a PS/2 Keyboard - PS/2 Keyboard Library
Programming Scott's Build
- Used TL866ii Plus Programmer
- Scott has serkey.hex file
- FUSES = -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
- Used Fuse bits from Programmer
- Matched lfuse values already
Tested Scott's Build
- Works really well
- 115,200 baud
- Works at 3.3V or 5V
- Drops out around 3.15V - may need BOD bit changed?
TinyPS2 Software Build Using Arduino IDE
- Converted Scott Baker's build to the Arduino IDE
- Move main init code to setup()
- Move main inner loop to loop()
- Compiled fairly easily
- GitHub Software Repo
- Resources (Arduino UNO)
Sketch uses 850 bytes (10%) of program storage space. Maximum is 8192 bytes. Global variables use 15 bytes (2%) of dynamic memory, leaving 497 bytes for local variables. Maximum is 512 bytes.
Setting Baud Rate
- The implementation is optimized for higher baud rates - please don't use anything below 57600 on an 8MHz clock
- It does work at up to 250000 baud but you may experience a small amount of dropped packets at that speed.
- Set in TinyPS2.ino file
#define BAUD_RATE 115200
Arduino IDE Setup for ATTiny85
- Programming procedure is taken from here
- Add ATTiny Board support to Preferences, Path:
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
Programming Card (Arduino IDE)
- Select ATTiny85, 8 Mhz
- Burn bootloader - Otherwise clock is way off
- ATProgHead
- Running Arduino as ISP
- Can program from an Arduino UNO like this:
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
Rev 3
- Added D3 to J1 connector
- Change from SMT parts to through hole parts
- Silkscreen cleanups
- Added ISP VCC/GND to silkscreen
- Added silkscreen to J1 pins
Rev 2
- Fixed issues below
Rev 1
- Missing pull-up resistors on PS/2
- Rev 2 - add pull-up resistors
- (There's pullups in the part so this may not be needed)
- Missing C3 cap in sequence
- Rev 2 - change C4 => C3