Skip to the content
2 layers57.2 × 45.5 mmPanasonic typewriter interface v2, the printed circuit board in 3D

Panasonic typewriter interface v2

xunker/panasonic_typewriter_interface18

Allows USB printing to Panasonic KX-R/RK-T/RK-H typewriters, KX-W word processors, and KX-W55 printer. Emulates KX-R60 (working) and RP-K100/RP-K105 (in development) interface adapters

Size
57.2 × 45.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
49
Nets
61
Pads
187
Tracks, vias
487, 24
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
24 Aug 2024
Updated
11 Mar 2025

Overview

Panasonic typewriter interface v2 is an open-source printed circuit board by xunker, from the xunker/panasonic_typewriter_interface repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 57.2 × 45.5 mm with 49 parts on 61 nets, routed with 487 tracks and 24 vias.

It is built around the KMDGX-8S-AS. Its parts include 15 resistors, 15 diodes, 9 connectors, 2 switches and 1 fuse. It belongs with the interfaces and adapters boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

1

README

README.md

Panasonic Typewriter Interface

https://github.com/xunker/panasonic_typewriter_interface

Print text using the Interface Port of your compatible Panasonic KX-R Daisywheel typewriter, KX-W word processor, RK-T "CupWheel" typewriter, or KX-WD55 daisywheel printer. Emulates the serial/RS-232 function of the KX-R60 (currently working), and RP-K100/RP-K105 (in development) interface adapters.

Use your 🏋️heavy🥌 and 🐢slow🐌 typewriter as a noisy, inconvenient, inflexible, single-page printer!

Animation of printing from Panasonic KX-R-435

A complete video of the high low-speed daisywheel action can be found on the TouYubes.

Assembled Adapter

Table of Contents

Compatibility

KX-R series with MiniDIN-8 port

Developed and tested with my KX-R435, and should be compatible with any other Panasonic typewriter with the round, 8-pin MiniDIN port.

KX-W series with DE-9 port

Untested, but should work with machines which have a DE-9 (DB-9) connector. Currently does not work, but is in active development. See rp-k10x_vs_kx-r60.md for research details.

Typewriter Pinout

See PINOUT.md for detailed information about the typewriter connector pinout.

Arduino Wiring

Although this is built around the Arduino Nano, any 5V board which uses the ATmega328 will also work. Any other 5V ATmega MCU should work as as well (such as the ATmega32U4in the Arduino Micro), and clones like the LGT8F328 (tested).

Non-ATmega/AVR boards may work, as long as they are compatible with the libraries used in this project (see "Required Libraries"), have enough pins, and run on 5V (or are 5V-tolerant). I have not tried any of this.

Adapter Board

There's an adapter board available to ease assembly, and to provide additional features.

Connecting Arduino to Typewriter without Adapter Board

Minimum required:

Arduino PinGoes ToPurpose
A0Typewriter ON_LINE pin~ON_LINE signal to typewriter
A1Typewriter TXD_PIN pinTXD_PIN signal to typewriter
A2Typewriter STB_PIN pin~STB_PIN signal to typewriter
A3Typewriter ACK_PIN pin~ACK_PIN signal from typewriter
A6Switch to ground"RUN/HALT" switch (GO_PIN), active low

Optional "Mode" button:

Arduino PinGoes ToPurpose
A7Button to groundMode button (MODE_PIN), optional, active low

Separate USB-to-Serial Adapter: You can use the built-in USB port as the Serial connection, but hardware flow control will not be available. To use hardware flow control you will need to connect up to an external USB to Serial adapter:

Arduino PinGoes ToPurpose
TX1 (D1)RxD on USB Serial ModuleTransmit serial data to USB host
RX0 (D0)TxD on USB Serial ModuleReceive serial data from USB host
11CTS on USB Serial moduleCTS (Clear to Send)
12RTS on USB Serial moduleRTS (Request to Send)

You can also connect some optional additional LEDs for debugging (or because they look neat when they blink):

Arduino PinGoes ToPurpose
8LED +State of ON_LINE pin
6LED +State of STB_LED pin
2LED +State of ACK_LED pin
3LED +State of TXD_LED pin

Code

The included code will read data from the Serial device (usually USB Serial) and relay that to the typewriter in the correct format.

Required Libraries

The following libraries are required by default. They can either be installed manually or via the Arduino IDE:

SerialCmd and MemoryUsage are only needed by the Serial Configuration Terminal (enabled default). AceButton is only needed if the "Mode" button is enabled (enabled by default).

Configure

NOTE: if you are using the included adapter board, you do not need to do any additional configuration. Simply connect your cable and adjust the "Cable Type" jumpers so they are both closest to whichever LED (D1 or D2) is lit up.

Edit panasonic_typewriter_interface.ino and change the following lines as appropriate:

c
#define ON_LINE_PIN A0 // Output, active LOW
#define STB_PIN     A2 // Output, active LOW
#define ACK_PIN     A3 // Input, active LOW
#define TXD_PIN     A1 // Output; HIGH = 1, LOW = 0

#define GO_PIN      A6 // trigger printing to begin when this is pulled low

#define MODE_PIN    A7 // trigger printing to begin when this is pulled low

/* RTS_PIN/CTS_PIN are only needed if `#define ENABLE_RTS_CTS` is uncommented */
#define RTS_PIN 12 // incoming from RTS, active low (for ENABLE_RTS_CTS)
#define CTS_PIN 11 // outgoing to CTS, active low   (for ENABLE_RTS_CTS)

CHECK WHAT KIND OF CABLE YOU HAVE, and remember that a Macintosh-style printer cable likely has several pins swapped.

Once you're done, upload it to your Arduino-compatible MCU.

There is also a "Demo Mode" that will just print text automatically and not wait for input over serial; enable that by uncommenting // #define TEST_MODE in panasonic_typewriter_interface.ino.

Extra LEDs (Optional, default)

By default, there are 4 addition LEDs broken out to show the status of each of the signal lines (in addition to the built-in LED).

c
#define ON_LINE_LED 8
#define STB_LED     6
#define ACK_LED     2
#define TXD_LED     3
#define LED_BUILTIN 13 // "Status" LED

These LEDs will reflect the state of each respective signal. Note, this is a logic state, not the electrical state. That means for active-low pins like ON_LINE, STB, and ACT, a low signal will turn on the appropriate LED.

However, if you do not require these additional LEDs you can comment-out the line #define ENABLE_MULTIPLE_LEDS, and then only the built-in LED will be used.

Printerering (aka, how to use this)

Once the code is uploaded and your Arduino is properly connected to your typewriter, turn on your typewriter and load paper as appropriate.

Set Typewriter to "On-Line Mode"

Then, you must get in to "On-Line Mode". The command varies from model to model, so consult the owners manual for more detail. In the case of the KX-R435, you enter On-Line Mode by holding down the CODE key and then pressing E; the LCD should now say "On-Line Mode". To exit On-Line mode, or to stop printing, press CODE+E again.

Set microcontroller to "RUN" Mode

Once in "On-Line Mode", you'll need to set your Arduino to "Run" mode. If you are using the included adapter board, you do this by switching the "RUN/HALT" switch to "RUN". If you are have wired your own microcontroller, you will connect pin A7 (or whatever pin you assigned to GO_PIN) to ground.

Once you switch to "RUN" mode, reset the microcontroller once to ensure it's now in the correct mode.

As long as that pin is grounded, sentences will keep being sent to the typewriter.

Send text - SLOWLY

Finally, open a serial connection to your MCU (using the built-in Serial Console in the Arduino IDE works well).

The default speed is 300 baud. Yes, you read correctly, 300 baud. Because it's a freakin' TYPEWRITER! It can barely keep up with 30 char/sec. If you want a laser printer, you know where to find one.

Out of the box, the Arduino toolchain only gives the atMega328 a 64 byte serial buffer, which can hold about 2 seconds of data at 300 baud. I'd actually like to set the default speed to 110 baud, but no operating systems have supported that speed for at least 30 years. Yes, not even Linux despite the lies that stty tells you.

Send some text! With luck, you'll see it appear in your paper! Eventually!

Serial Configuration Terminal

See SERIAL_CONFIG.md.

Known Problems

Can't keep up with 300 baud without hardware flow control

The default speed is 300 baud (see "Send text - SLOWLY" for reasons), and even that has problems unless you use hardware flow control (RTS/CTS) and text will start to be dropped in about 2 lines.

This is because of two things issues:

  • the Arduino Serial buffer is only 64 bytes, on the ATmega328
  • Even the fastest Panasonic Daisywheels can only print 15 characters/sec, which is only half the speed of 300 baud, and most models can only print 12 CPS

There are two solutions:

  • Use hardware flow control
    • On USB, this requires use of a separate USB-to-Serial adapter because the IC included on Arduino Nano does not connect any lines besides TxD, RxD, and DTR
    • The current Adapter Board can use a separate USB-to-Serial adapter connected to J4, with CTS connexted to "TX1" and RTC connected to "RX1"
    • Future versions of the adapter board will include footprints for a separate USB-to-serial converter
  • add a "character delay" when you send, greater than 30ms/character
    • CoolTerm can do this: Options->Transmit->Use Transmit Character Delay

Reboot required when switching from from HALT to RUN with Serial Console

If Serial Console support is compiled in (the default), a reboot (via reset button) is require when going from HALT mode to RUN mode.

Mode button doesn't do anything

The "Mode Button" is currently GN/DN (goes nowhere & does nothing).

Theory of Operation

See rp-k10x_vs_kx-r60.md for a detailed sequence diagram.

TODO

Need

Rough order of importance:

  • Working emulation of RP-K100 and RP-K105 adapters
  • Use .h files properly; move code out of those
  • Finish V2 adapter board which will give RTS/CTS and RS-232 options
    • must get RP-K100 and RP-K105 workign first
  • Get special/accented character conversion functioning
  • Convert special characters like tab ("\t") to spaces, to prevent typewriter from going crazy if no tabs have been set
    • ability to set tab-to-space count in serial console

Want

In no particular order:

  • DTR/DSR support, for compatibility with older hosts that didn't use RTS/CTS
    • Ex: Apple II, C64, TRS80, etc.
  • Transceivers or driver/receiver pairs for typewriter connection, for buffering and for possible 3.3v operation
    • 3x active-low drivers
    • 1x active-low receiver
  • Better serial buffering
    • Default 64 byte buffer doesn't even do 300 baud well
    • Implement a 1K ring buffer? We have the free SRAM
    • This is less of an issue with RTS/CTS support
  • Support alt Serial on LGT8F328 with Rx/Tx pins 5 & 6
  • Separate serial interface for debugging output on different pins, with different baud rate
    • Software serial, or SERIAL1 on 328PB or LGT8F328
  • I2C display support
    • in software, alreadu have hardware support via Stemma connector
  • Automatically insert correct line-breaks, depending on CPI switch setting
  • Automatically pause printing to insert next sheet of paper, based on line-spacing switch setting
    • MODE button becomes "Continue" button
  • mode button cycles through CPI/Line Space settings? Need display for this?

License

GNU GPL 3

Parts

49
QtyValueFootprintReferences
15LEDLED_SMD:LED_0805_2012MetricD1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15
131KResistor_SMD:R_0805_2012MetricR3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15
4MountingHoleMountingHole:MountingHole_2.2mm_M2_DIN965H1, H2, H3, H4
21.2KResistor_SMD:R_0805_2012MetricR1, R2
2Conn_01x09_SocketConnector_PinSocket_2.54mm:PinSocket_1x09_P2.54mm_VerticalJ6, J7
1Arduino_Nano_v3.xModule:Arduino_NanoA1
1CCSymbol:Symbol_CreativeCommons_CopperTop_Type2_SmallFID1
1Conn_01x04_MountingPinConnector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalJ5
1Conn_01x06_MountingPinConnector_Molex:Molex_PicoBlade_53261-0671_1x06-1MP_P1.25mm_HorizontalJ3
1Conn_01x08_MountingPinConnector_Molex:Molex_PicoBlade_53261-0871_1x08-1MP_P1.25mm_HorizontalJ4
1Conn_01x09Connector_Dsub:DSUB-9_Female_EdgeMount_P2.77mmJ10
1Conn_01x10_PinConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ8
1Conn_02x03_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical_SMDJ2
1Jumper_2_BridgedJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1
1KMDGX-8S-ASKMDGX-8S-AS:KYCON_KMDGX-8S-ASJ1
1PolyfuseFuse:Fuse_1206_3216MetricF1
1SW_PushButton_Switch_SMD:SW_SPST_FSMSMSW2
1SW_SPDTButton_Switch_SMD:SW_SPDT_PCM12SW1

More from xunker/panasonic_typewriter_interface

2
  • 2 layers37.2 × 45.7 mmPanasonic typewriter interface, the printed circuit board in 3D

    Panasonic typewriter interface

    xunker/panasonic_typewriter_interface

    Allows USB printing to Panasonic KX-R/RK-T/RK-H typewriters, KX-W word processors, and KX-W55 printer. Emulates KX-R60 (working) and RP-K100/RP-K105 (in development) interface adapters

    28 parts18GPL-3.0
  • 2 layers18.3 × 34.9 mmRs232 sled, the printed circuit board in 3D

    Rs232 sled

    xunker/panasonic_typewriter_interface

    Allows USB printing to Panasonic KX-R/RK-T/RK-H typewriters, KX-W word processors, and KX-W55 printer. Emulates KX-R60 (working) and RP-K100/RP-K105 (in development) interface adapters

    15 parts18GPL-3.0

Similar boards

  • 2 layers173 × 122.5 mmCapBank, the printed circuit board in 3D

    CapBank

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    49 parts915
  • 2 layers85.1 × 49.8 mmAvrcraft m644, the printed circuit board in 3D

    Avrcraft m644

    cnlohr/avrcraft

    Minecraft server optimized for 8-bit devices.

    49 parts471
  • 2 layers50 × 90 mmMouse, the printed circuit board in 3D

    Mouse

    biomurph/Mouse

    Repository for Open Source Mouse Firmware and Hardware

    49 parts362MIT
  • 2 layers126.4 × 15.2 mmV5probe, the printed circuit board in 3D

    V5probe

    Architeuthis-Flux/JumperlessV5

    The next generation jumperless breadboard

    49 parts332
  • 2 layers43 × 92.3 mmDSKY driver, the printed circuit board in 3D

    DSKY driver

    benkrasnow/DSKY_EL_replica

    Schematic, PCB layout, mechanical CAD, and firmware to create a replica of the DSKY with electroluminescent display

    49 parts261MIT
  • 2 layers58 × 110 mmUtils output ui, the printed circuit board in 3D

    Utils output ui

    shmoergh/moduleur

    Fully analog DIY-friendly modular synth

    49 parts222
  • 2 layers61 × 42.5 mmShutter, the printed circuit board in 3D

    Shutter

    eddyem/stm32samples

    Code samples and ready projects based on bare-metal STM32

    49 parts208
  • 2 layers31 × 38 mmEmbedded, the printed circuit board in 3D

    Embedded

    blakesmith/embedded

    Blake's embedded projects

    49 parts167

Questions

How big is the Panasonic typewriter interface v2 PCB?

It measures 57.2 × 45.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Panasonic typewriter interface v2 use?

49 parts, built around the KMDGX-8S-AS. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Panasonic typewriter interface v2 KiCad files?

From the xunker/panasonic_typewriter_interface repository on GitHub, at the commit this page was made from: the board is adapter_boards/panasonic_typewriter_interface_v2/panasonic_typewriter_interface_v2.kicad_pcb and its schematic adapter_boards/panasonic_typewriter_interface/panasonic_typewriter_interface.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Panasonic typewriter interface v2 design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).