Skip to the content
2 layers38.1 × 27.9 mmATARI CTRL PCB 1.25A UNTESTED BUT FIXED, the printed circuit board in 3D

ATARI CTRL PCB 1.25A UNTESTED BUT FIXED

TENNLab-UTK/neuropong

Neuropong project files

Size
38.1 × 27.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
4
Nets
26
Pads
50
Tracks, vias
74, 4
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
24 Feb 2025
Updated
5 Mar 2025

Overview

ATARI CTRL PCB 1.25A UNTESTED BUT FIXED is an open-source printed circuit board by TENNLab-UTK, from the TENNLab-UTK/neuropong repository on GitHub, published under the BSD-3-Clause licence. It is a 2-layer board of 38.1 × 27.9 mm with 4 parts on 26 nets, routed with 74 tracks and 4 vias.

It is built around the ULN2003A. Its parts include 2 ICs and 2 connectors. It belongs with the retro computing and games boards of this library.

Main components

1

README

README.md

Neuropong

This is the repo contains the NeuroPong project files. NeuroPong is an embedded, neuromorphic Atari (Pong) agent. It marries an event-based camera, TENNLab's Neuromorphic Starter Kit (https://arxiv.org/abs/2211.04526), and an Atari 2600 console. Spiking neural networks are trained on simulated events created from frames generated by the Arcade Learning Environment, and then, those spiking neural networks are put on hardware to examine how they perform in a live setting using real event camera inputs.

Prerequisites

Repositories needed to run existing spiking neural network agents:

(*) You will need to get access to this repo from Jim Plank (jplank@utk.edu) until it is open-sourced.

You will also need Python and a shell of some kind (bash/zsh) on Linux or Mac. It is recommended to set up a python virtual environment (Python <= 3.9) for compatability with Inivation event camera library.

Contents

  • /models: STL models of 3D printed objects used in this project for the presented prototype

  • /kit-code: Contains code used by embedded-neuromorphic/ repo to compile kit code.

  • /pcb: Repo containing KiCad files for the PCB that contains the Atari Translator circuit

  • /scripts: Scripts used to assist with flashing Picos and compiling kit code. calibration.py and event_server.py are used on the Raspberry Pi (or whatever is communicating with the Neuromorphic Starter Kit)

  • /imgs: Contains various diagrams and images detailing parts of the NeuroPong system

  • /networks: Contains the networks generated for the Neuropong paper.

Table of Hardware Materials/Components

PartQuantityCost
PCB Design1$4.11
AD52421$4.55
ULN20081 (unused)$3.95
Female pin strips2$26.00
Raspberry Pi 41$75.00
MicroSD Card1$13.50
Breakout Cable1$20.00
Neuromorphic Starter Kit
PCB Design1$10.65
Raspberry Pi Pico3$15.00
Power Supply1$7.69
Total$180.45
  • The Atari 2600 console and VideoOlympics cartridge together were ~$20.00.
  • The DAVIS346 camera used for this project was purchased from [Inivation] (https://shop.inivation.com/).

Running the Hardware Setup

  1. Turn on monitor, put VideoOlympics cartridge in Atari 2600 console, and turn on the Atari console.
    • You should see the Pong game appear on the screen.
  2. Plug NeuroPong controller into the back of one of the Atari controller ports.
    • NOTE: you will need to make the NeuroPong cable. An detailed construction diagram can be found in the /imgs folder
  3. Power on the Raspberry Pi, and plug DAVIS346 camera into one of the USB ports on the Raspberry Pi.
  4. Compile the network using app_compile from the embedded_neuromorphic/ repo
    • Ex: ./bin/app_compile -j network_file -o kit-code/pico-pong_observations.c -a kit-code/pico-pong_actions[2,3].c -s
  5. Flash the three Raspberry Pi Picos on the kit with the appropriate encoder, decoder, and network.
  6. Power on the Neuromorphic Kit
  7. On the Raspberry Pi, run scripts/calibration.py to assist with focusing the lens and cropping the camera's FOV to the screen.
    • The output produced by scripts/calibration.py is the command that is used to run scripts/event_server.py.
      • It figures out what the crop coordinates are and what the downsampling parameters need to be to match whatever the target downsampled resolution is. Target resolution is specified via global variables in the scripts/calibration.py program.
  8. Run the command output by scripts/calibration.py
    • Ex: python3 event_server.py --crop ...
  9. Wait 20-30 seconds for the system to initialize. If it's unreponsive, CTRL-C the event_server process and rerun it.
  10. Begin the Atari game by toggling the ``Game Reset'' switch on the Atari system.

Running the networks in the framework-open processor_tool

You may want to run the networks using framework-open/bin/processor_tool in order to view spike rasters for a network at each timestep during an episode of that network playing Pong in the Arcade Learning Environment. In networks/processor_tool_commands are the commands for the processor tool, for each of the 32 networks, for one 2000 frame Pong episode each. Each file in networks/processor_tool_commands contains the Apply_Spike (AS) commands that communicate the event simulated and downsampled representation of each frame as they're generated by the ALE online. To run, do the following:

text
        ```
        UNIX> pwd
        .../neuropong
        UNIX> ./framework-open/bin/processor_tool_risp < networks/processor_tool_commands/pong0.txt
        0   INPUT  :    // No inputs are provided to the network during the first frame or timestep, so the spike raster is empty
        1   INPUT  : 
        2   INPUT  : 
        3   INPUT  : 
        4   INPUT  : 
        5   INPUT  : 
        6   INPUT  : 
        7   INPUT  : 
        8   INPUT  : 
        9   INPUT  : 
        10  INPUT  : 
        11  INPUT  : 
        12  INPUT  : 
        13  INPUT  : 
        14  INPUT  : 
        15  INPUT  : 
        16  INPUT  : 
        17  INPUT  : 
        18  INPUT  : 
        19  INPUT  : 

More information about processor_tool_risp can be found in the framework-open/markdown/ directory. This is provided as a method for you to see how the network acts when provided event-simulated and downsampled ALE frames.

Parts

4
QtyValueFootprintReferences
2Conn_01x09_SocketConnector_PinSocket_2.00mm:PinSocket_1x09_P2.00mm_VerticalJ1, J2
1AD5282Package_SO:TSSOP-16_4.4x5mm_P0.65mmU2
1ULN2003APackage_SO:SOIC-16_3.9x9.9mm_P1.27mmU1

More from TENNLab-UTK/neuropong

1

Similar boards

  • 2 layers107 × 54 mmInterface board 1, the printed circuit board in 3D

    Interface board 1

    Green-bms/SmartBMS

    Open source Smart Battery Management System

    63 parts756
  • 4 layers93.3 × 60.3 mmArduino 386EX V5, the printed circuit board in 3D

    Arduino 386EX V5

    dbalsom/arduinoX86

    An interface between an Arduino Due or Arduino GIGA and 8088, 8086, V20, V30, 186 or 286 CPUs

    56 parts114
  • 2 layers52 × 61 mmArduino motorfocus, the printed circuit board in 3D

    Arduino motorfocus

    fehlfarbe/arduino-motorfocus

    Arduino motorfocus with moonlite protocol for telescopes

    23 parts58MIT
  • 4 layers199.9 × 69.3 mmZaphod controller, the printed circuit board in 3D

    Zaphod controller

    Scottapotamas/zaphod-bot

    A DIY high performance delta-bot for fun, and lightpainting...

    251 parts53
  • 4 layers285.1 × 48.1 mmAyab esp32, the printed circuit board in 3D

    Ayab esp32

    AllYarnsAreBeautiful/ayab-hardware

    Contains the schematics and layouts for the AYAB Arduino shield

    246 parts50CC-BY-SA-4.0
  • 2 layersDrehorgel20, the printed circuit board in 3D

    Drehorgel20

    bixb922/crank-organ

    MIDI based crank organ software and hardware

    14 parts47MIT
  • 2 layers40 × 80 mmSplitflappcb, the printed circuit board in 3D

    Splitflappcb

    codingcatgirl/split-flap-fae-pcb

    Alternative drop-in replacement PCB for David Kingsman's split-flap display

    46 parts31Apache-2.0
  • 2 layers177.9 × 187.4 mmAudio board 0033 rev.a, the printed circuit board in 3D

    Audio board 0033 rev.a

    palazzol/CyberamicControlCenter

    Repo for docs and info about the Cyberamic Control Center

    105 parts16

Questions

How big is the ATARI CTRL PCB 1.25A UNTESTED BUT FIXED PCB?

It measures 38.1 × 27.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ATARI CTRL PCB 1.25A UNTESTED BUT FIXED use?

4 parts, built around the ULN2003A. 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 ATARI CTRL PCB 1.25A UNTESTED BUT FIXED KiCad files?

From the TENNLab-UTK/neuropong repository on GitHub, at the commit this page was made from: the board is pcb/pcb_v1_25A/ATARI_CTRL_PCB_1.25A_UNTESTED_BUT_FIXED.kicad_pcb and its schematic pcb/pcb_v1_25A/ATARI_CTRL_PCB_1.25A_UNTESTED_BUT_FIXED.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ATARI CTRL PCB 1.25A UNTESTED BUT FIXED design in my own project?

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