|
|
ATTINY85V-10SUMICROCHIP
|
x 1 | |
|
|
SSD1306 OLED |
x 1 | |
|
|
Micro USB |
x 1 | |
|
|
430182130816Würth Elektronik
|
x 1 | |
|
|
SMD CAPACTORS |
x 1 | |
|
|
SMD RESISTORS |
x 1 |
|
KiCad 9.0 |
Attiny85-Powered Mini Oscilloscope
This project presents a compact, cost-effective mini oscilloscope PCB powered by the ATtiny85 microcontroller. The design emphasizes simplicity and ease of fabrication, making it particularly suitable for students, hobbyists, and anyone passionate about embedded systems and electronics. Developed entirely in KiCad, the PCB integrates essential components to visualize low-frequency signals without the need for complex instrumentation.
The core of the system is the ATtiny85, chosen for its low power consumption, small footprint, and sufficient capability to handle basic signal acquisition tasks. With minimal external circuitry, this design demonstrates how microcontroller-based solutions can be adapted for fundamental measurement tools. The result is a straightforward but functional oscilloscope platform that encourages experimentation and learning.
Intended primarily as an educational and experimental instrument, this mini oscilloscope is not a replacement for professional lab equipment. Instead, it provides an accessible entry point into signal visualization and embedded measurement systems. By sharing the complete design files and resources, this project invites the community to explore, modify, and improve upon the concept.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
#define OLED_RESET -1
Adafruit_SH1106 oled(OLED_RESET);
// -------- CONFIG --------
#define ADC_SIGNAL A1 // PB2
#define ADC_BUTTON A3 // PB3
#define LED_PIN 4 // PB4
#define REC_LEN 100 // reduced for SRAM safety
int wave[REC_LEN];
// -------- BUTTON STATES --------
enum Button {
BTN_NONE,
BTN_SELECT,
BTN_UP,
BTN_DOWN,
BTN_HOLD
};
bool hold = false;
int vRange = 5;
int hRange = 3;
// -------- BUTTON READ --------
Button readButton() {
int val = analogRead(ADC_BUTTON);
if (val < 80) return BTN_SELECT;
else if (val < 250) return BTN_UP;
else if (val < 450) return BTN_DOWN;
else if (val < 650) return BTN_HOLD;
else return BTN_NONE;
}
// -------- SETUP --------
void setup() {
pinMode(LED_PIN, OUTPUT);
analogReference(INTERNAL); // 1.1V reference
oled.begin(SH1106_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.setTextSize(1);
oled.setCursor(20, 20);
oled.print("Mini Scope");
oled.display();
delay(1000);
}
// -------- READ WAVE --------
void readWave() {
digitalWrite(LED_PIN, HIGH);
for (int i = 0; i < REC_LEN; i++) {
wave[i] = analogRead(ADC_SIGNAL);
delayMicroseconds(200); // basic sampling
}
digitalWrite(LED_PIN, LOW);
}
// -------- PROCESS --------
int minVal, maxVal;
void analyze() {
minVal = 1023;
maxVal = 0;
for (int i = 0; i < REC_LEN; i++) {
if (wave[i] < minVal) minVal = wave[i];
if (wave[i] > maxVal) maxVal = wave[i];
}
}
// -------- DRAW --------
void drawWave() {
oled.clearDisplay();
// grid
for (int x = 0; x < 128; x += 10)
oled.drawFastVLine(x, 0, 64, WHITE);
for (int y = 0; y < 64; y += 10)
oled.drawFastHLine(0, y, 128, WHITE);
// waveform
for (int i = 0; i < REC_LEN - 1; i++) {
int y1 = map(wave[i], minVal, maxVal, 63, 0);
int y2 = map(wave[i + 1], minVal, maxVal, 63, 0);
oled.drawLine(i, y1, i + 1, y2, WHITE);
}
// info
oled.setCursor(0, 0);
oled.print("Min:");
oled.print(minVal);
oled.setCursor(64, 0);
oled.print("Max:");
oled.print(maxVal);
if (hold) {
oled.setCursor(40, 30);
oled.print("HOLD");
}
oled.display();
}
// -------- BUTTON ACTION --------
void handleButton(Button b) {
static unsigned long lastPress = 0;
if (millis() - lastPress < 200) return; // debounce
lastPress = millis();
switch (b) {
case BTN_SELECT:
hold = !hold;
break;
case BTN_UP:
vRange++;
if (vRange > 9) vRange = 9;
break;
case BTN_DOWN:
vRange--;
if (vRange < 0) vRange = 0;
break;
case BTN_HOLD:
hRange++;
if (hRange > 9) hRange = 0;
break;
default:
break;
}
}
// -------- LOOP --------
void loop() {
Button b = readButton();
handleButton(b);
if (!hold) {
readWave();
analyze();
}
drawWave();
}
Attiny85-Powered Mini Oscilloscope
*PCBWay community is a sharing platform. We are not responsible for any design issues and parameter issues (board thickness, surface finish, etc.) you choose.
CERN-OHL-P-2.0 License
Read More⇒
Raspberry Pi 5 7 Inch Touch Screen IPS 1024x600 HD LCD HDMI-compatible Display for RPI 4B 3B+ OPI 5 AIDA64 PC Secondary Screen(Without Speaker)
BUY NOW- Comments(0)
- Likes(2)
-
Engineer
Mar 10,2026
-
MAATHES THILAK K
Jan 26,2026
- 0 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
More by MAATHES THILAK K
-
BLUDIONO - Arduino Accelerated with Bluetooth Module
This project presents a compact Arduino-compatible SMD development board based on the ATmega328P-AU,...
-
Solder-Master-PRO
is a precision soldering station designed to deliver professional-grade temperature control using a ...
-
RP2040 Community-Driven UNO MCU
This project expands an RP2040-based, Arduino UNO–style microcontroller designed to stay familiar wh...
-
4CH_TIMER_RELAY
This 4-channel relay timer controller is built around the ESP32-C3 microcontroller, offering smart a...
-
Spray Bot - 3D MODEL
Spray Bot is an intelligent agricultural robot designed to complement Vision Bot by performing targe...
-
AIR MOUSE CASE
_ is a compact wireless remote mouse built around the ESP32-C3, intended for smart TVs, media center...
-
RS485 based Flight Controller - STM32F411CEU6
This repository documents the design and implementation of a custom STM32F411-based flight controlle...
-
SBUS-Transmitter Made with ESP32
This centroid file is an approximate pick-and-place reference created for early PCB planning of your...
-
Attiny85-Powered Mini Oscilloscope
This project presents a compact, cost-effective mini oscilloscope PCB powered by the ATtiny85 microc...
-
Water Motor Controller - Twin Node
Project DescriptionThe TWIN-NODE Motor Controller is a compact, wireless motor control PCB designed ...
-
BENCH_POWER_SUPPLY-PSU
This project presents a compact bench power supply enclosure designed in Autodesk Fusion 360, tailor...
-
AIR_MOUSE – ESP32-C3 Based Wireless Air-Style Remote
The AIR_MOUSE is a compact wireless air-style remote designed for effortless navigation of TVs and o...
-
Indoor Node - WaterlevelMonitor - Twin Node
The TWIN-NODE Indoor Node is a battery-powered receiver module designed to provide local indication ...
-
Twin_Node_V2.0_WaterLevelMonitor
TWIN-NODE is a two-node, ultra-low-power water level monitoring system engineered for overhead tanks...
-
Twin_Node_V1.0-OUTDOOR
TWIN NODE V1.0 is a low-power, outdoor-ready water level sensor node designed as a practical learnin...
-
Vision Bot V1 – AI rover with pneumatic
Vision Bot V1 is the latest and fully refined iteration of our agricultural monitoring rover, develo...
-
OverEngineered Bread Board Power supply
Over-Engineered Breadboard Power SupplyThis project is a compact, high-current breadboard power supp...
-
USB to UART Converter Board using CP2102
This project presents a simple and compact USB to UART converter board designed around the CP2102 US...
-
-
ARPS-2 – Arduino-Compatible Robot Project Shield for Arduino UNO
1331 0 4 -
-
A Compact Charging Breakout Board For Waveshare ESP32-C3
1858 3 7 -
AI-driven LoRa & LLM-enabled Kiosk & Food Delivery System
1845 2 0 -
-
-
-
ESP32-C3 BLE Keyboard - Battery Powered with USB-C Charging
2019 0 1 -







