Skip to content

laurb9/tiny_scope

Repository files navigation

Arduino PlatformIO

Tiny Scope for Arduino

Features

  • Configurable ADC speed for sampling rates from 10KHz to 300KHz (on UNO)
  • Auto grid on time base from 2ms to 50us (on UNO)
  • Vmax calibration and 3.3-5V detection using internal reference
  • 0V auto trigger
  • Display minimum-maximum voltage of captured signal
  • Square waveforms are displayed properly
  • Auto voltmeter mode when input is steady

The screenshots below are on a two-color display (yellow/blue).

Arduino UNO R3, default ADC settings Arduino UNO R3, default ADC settings, sine wave

Arduino UNO R3, fastest ADC settings Arduino UNO R3, fastest ADC settings, 255us PWM pulse

Voltmeter mode is automatically switched on with a steady voltage signal (when it would be represented by a flat line).

Voltmeter mode

Requires one of the boards below and a Monochrome 0.96" 128x64 OLED graphic display (SSD1306 driver, I2C).

Supported boards

All boards build from this branch (master); the old teensy and feather_m0 branches are historical and no longer needed.

Board Build target Notes
Arduino UNO R3 / ATmega328 arduino:avr:uno / uno tuned ADC driver, 10-300KHz sampling
Teensy 3.1/3.2 teensy:avr:teensy31 / teensy31 tuned ADC driver (pedvide ADC), fastest
Teensy LC teensy:avr:teensyLC / teensylc tuned ADC driver (pedvide ADC)
Adafruit Feather M0 adafruit:samd:adafruit_feather_m0 portable ADC, no EEPROM (mode not saved), button on D6
ESP32 esp32dev (PlatformIO) experimental: compiles, untested on hardware, portable ADC

Connections

  • OLED VCC - 3.3V
  • OLED GND - GND
  • OLED SCL - A5 or SCL (Teensy SCL0 pin 19)
  • OLED SDA - A4 or SDA (Teensy SDA0 pin 18)
  • PROBE WIRE - A1 (defined in tiny_scope.ino) (Teensy pin 15)
  • BUTTON - D7 button to GND (D6 on Feather M0)

Testing

  • A1 to 5V should display 5.00 V
  • A1 to GND should display 0.00 V
  • A1 to D9 (Teensy pin 9) should display a square wave (PWM) with >2ms period and >0.5ms pulse
  • A1 to D5 should display a square wave (PWM) with >1ms period and >0.2ms pulse
  • Momentary (<0.5s) push on D7 switch cycles through available sampling speeds
  • Long >0.5s push on D7 freezes display.

Without hardware, make sim-test boots the UNO firmware on an emulated ATmega328P (simavr) and checks the boot/capture pipeline against a baseline.

Entire project

UNO R3 and Teensy 3.1 (with upside-down display mode).

Tiny Scope running on UNO R3

Tiny Scope running on Teensy 3.1

Parts

Building

With arduino-cli (downloaded automatically into .arduino/):

make setup                # one-time: arduino-cli, board indexes, libraries
make all                  # default TARGET=arduino:avr:uno
make all TARGET=teensy:avr:teensy31
make all TARGET=adafruit:samd:adafruit_feather_m0

With PlatformIO:

pio run                   # all boards: uno, teensy31, teensylc, adafruit_feather_m0, esp32dev
pio run -e uno            # just one

Or use the Arduino IDE with the Library Manager (below), or open the repo in VS Code and "Reopen in Container" for a ready-made build environment.

Libraries

Installed automatically by make setup and PlatformIO; in the Arduino IDE use Library Manager:

  • Adafruit SSD1306 (with its Adafruit GFX / BusIO dependencies)
  • Teensy boards: the ADC library ships with Teensyduino