100+ Projects on ATtiny13

ATtiny13 is my favorite tiny uC. That’s why I decided to design and assemble 100+ projects based on this chip. Why I like ATtiny13?

  • advanced RISC architecture (up to 1MIPS/1MHz, easy to learn Assembler – only 120 instructions)
  • pin-compatible with the ATtiny*5 series so if 1K bytes of FLASH and/or 64 bytes of RAM turns out too restrictive, it’s easy to swap in up to 8K without a layout redesign
  • operating voltage range (1.8V to 5.5V) and industrial temperature range (-40ºC to +85ºC)
  • basic peripheral features like timer, 4-channel ADC, Watchdog or Analog Comparator
  • AVR-GCC compiler and many other developer tools that are open-source and free
  • very-very low price for such computing power!

pingout_attiny13

Here are the ATtiny13 – manual, the example ATtiny13 – development board, little guides about how to  compile and burn the code to ATtiny13 (ANSI C) and how to install AVR assembler (AVRA) on Linux. And more:

My Projects

[001] ATtiny13 – blinky with delay function
[002] ATtiny13 – LED fading with delay function (Software PWM)
[003] ATtiny13 – randomly flashing LED with PRNG based on LFSR
[004] ATtiny13 – blinky with timer OVF (Overflow)
[005] ATtiny13 – blinky with Watchdog Timer
[006] ATtiny13 – blinky with timer COMPA
[007] ATtiny13 – tone generator
[008] ATtiny13 – software UART (debug logger)
[009] ATtiny13 – pseudo random numbers (lightweight library)
[010] ATtiny13 – controlling LED RGB (fancy light effects)
[011] ATtiny13 – IR remote to control LEDs (NEC proto)
[012] ATtiny13 – IR remote to control LED RGB (NEC proto)
[013] ATtiny13 – IR receiver / NEC proto analyzer
[014] ATtiny13 – Best Room Tempature on DS18B20
[015] ATtiny13 – two tone alarm
[016] ATtiny13 – digital DC voltmeter with MAX7219
[017] ATtiny13 – digital DC ampmeter with MAX7219
[018] ATtiny13 – dance lights with DFT
[019] ATtiny13 – simple timer on TM1637
[020] ATtiny13 – power LED PWM driver
[021] ATtiny13 – simple text CLI (Command Line Interface) via UART
[022] ATtiny13 – Morse Code (flashing light)
[023] ATtiny13 – battery level indicator
[024] ATtiny13 – simple logic probe
[026] ATtiny13 – disco lights using DFT
[028] ATtiny13 – running digits on TM1637
[029] ATtiny13 – temperature logger using LM35 ans Software UART
[030] ATtiny13 – reading temperature and humidity from DHT11
[031] ATtiny13 – hardware PWM
[032] ATtiny13 – running dots & digits on 7-segment LED tube display
[033] ATtiny13 – WS2812 LED strip – blinky
[034] ATtiny13 – rainbow on single LED WS2812
[035] ATtiny13 – rainbow on several LEDs WS2812
[036] ATtiny13 – circular WS2812 LED chaser
[037] ATtiny13 – PI (Pulse Induction) metal detector
[040] ATtiny13 – random flickering pixels on 8×8 matrix LED display
[043] ATtiny13 – blinky with delay function (assembler version)
[044] ATtiny13 – blinky with timer OVF (assembler version)
[045] ATtiny13 – blinky with timer COMPA (assembler version)
[047] ATtiny13 – controlling stepper motor 28BYJ-48
[048] ATtiny13 – randomly flashing LED with PRNG based on BBS
[050] ATtiny13 – clap clap switch
[052] ATtiny13 – 8bit mono Class D amplifier
[060] ATtiny13 – An example of controlling a stepper motor with Wave-Step method using the L298N
[061] ATtiny13 – An example of controlling a stepper motor with Full-Step method using the L298N
[062] ATtiny13 – An example of controlling a stepper motor with Half-Step method using the L298N
[063] ATtiny13 – An example of controlling a stepper motor with Half-Step method and PWM
[064] ATtiny13 – An example of controlling a stepper motor using the A4988
[065] ATtiny13 – CNC linear module controller (forward, backward) using the A4988 (tba6560, etc.)
[066] ATtiny13 – An example of controlling DC motors using the L298N

Realization plan is about ~65%. Some of projects are in progress and some are ready to publish. I’ll keep this page updated!

TODO List

Do you have an idea for next project on ATtiny13? Submit the project topic in a comment or mail it to me! (lpodkalicki@gmail.com)

  • single LED dice (charliplexing)
  • double LED dice (charliplexing)
  • triple LED dice (charliplexing)
  • line follower robot
  • obstacle avoiding robot
  • EMF Detector
  • advanced 4-channel clapper switch
  • Canon remote controller (jack 2.5mm)
  • Canon remote controller (Infrarred RC6)
  • simple remote controller and 4 channel receiver (Infrarred: RC5 or NEC)
  • electronic dice using WS2811 LEDs
  • pulse counter – counting TTL pulses, 7-segment LED module and reset button
  • pulse generator – simple TTL pulse generator
  • matrix keyboard – one wire, ADC
  • OneWire Slave
  • smart desk lamp controller
  • disco lights (upgraded version)
  • PI Metal detector
  • clap-clap switch.

Community Projects

Libraries

  1. attiny13-software-uart-library – ATtiny13 Software UART library.
  2. attiny-random-library – ATtiny13/25/45/85 16-bit PRNG (Pseudo Random Number Generator) library based on Galois LFSR algorithm.
  3. attiny-max7219-led-tube-display-library – ATtiny13/25/45/85 7-segment LED tube display (MAX7219/MAX7221) library.
  4. attiny-max7219-matrix-8×8-led-display-library – ATtiny13/25/45/85 8×8 matrix LED display driver (MAX7219/MAX7221) library.
  5. attiny-74hc595-library – ATtiny13/25/45/85 74hc595 shift register library.
  6. attiny-tm1638-library – This is tinyAVR (ATtiny13, ATtiny25, ATtiny45, ATtiny85, and other) library for LED controller modules based on TM1638 chip.
  7. attiny-tm1637-library – TinyAVR – ATtiny13, ATtiny25, ATtiny45, ATtiny85 – library for 7-segment display modules based on TM1637.
  8. attiny-ds18b20-library – This is tinyAVR (ATtiny13, ATtiny25, ATtiny45, ATtiny85, etc.) library for DS18B20 temperature sensor.
  9. attiny-onewire-library – This is tinyAVR (ATtiny13, ATtiny25, ATtiny45, ATtiny85, etc.) library to access devices using OneWire (1-Wire) protocol.

68 thoughts on “100+ Projects on ATtiny13

  1. I use the ATTiny13A in a number of projects, from garden devices to mains power controller board. The µC can detect button press (and differentiate between a long vs short press, multiplexing the functionality of a single button), drive status LED (and flash it as a timer starts to expire), drive a optoisolator to in turn drive a triac to switch a mains load. Same PCB, but different firmware loads can present very different functionality – timeout for a soldering iron outlet (or a longer timeout for a “dumb” older tool battery charger that shouldn’t be left running too long), light control, fan control (using a thermistor and implementing hysteresis in code), etc.

    A different project base uses an ATTiny13A for driving a power transistor for heating a coil for a food smoker (Kanthal wire coil cycles on and off to keep wood pellets smoldering, but not so much to cause them to fully ignite). Potentiometer sets the duty cycle of the PWM driving the coil. When driving a power mosfet, it is important to not drive the PWM frequency too high (depending on the characteristics of the mosfet) because it could end up spending much of its time in a linear region, dissipating heat in the transistor instead of delivering much energy to the intended load.

    Yet another project uses ADC to read the value of potentiometer (effectively, a voltage divider) and gradually ramps up speed on a treadmill motor (repurposed to drive a large centrifuge). This application also has a vibration sensor so it can first throttle back the motor speed, or cut it altogether, as well as the ability to be flashed to run for a fixed time and then shut off (not actually something dynamically set, but just programmed in). Also as a safety feature, when there is a power reset, the pot must be turned to lowest value (“off”) before the µC will drive the motor. An ATTiny13A does all that.

    Touch controls and light dimming (via PWM) is another thing the Tiny is well suited for – this makes it easy to cycle a LED lamp through multiple brightness set points. To be fair, I do this with inputs to an LED driver which manages current limiting and accepts PWM for the purpose of dimming, so the Tiny isn’t dealing with monitoring for current regulation, just sensing input and driving a PWM signal.

    PWM likewise is useful for fan projects, such as driving the PWM input on a CPU fan being used as a small benchtop soldering fume extractor.

    I have a laser cutter which relies on circulated water/coolant for cooling the CO2 laser tube. The laser itself does not have any sense for coolant temperature. Yup, ATTiny13A and thermistor (encapsulated so that it doesn’t actually get wet) can monitor temperature of the coolant stream, and drive an LED to indicate relative temp, and finally drive a signal which emulates the all-stop on the CNC controller.

    I like to implement some projects as table-driven state machines. This can be a lot less code intensive. Timeouts, next state, etc can be encoded in a data table. Tables can also be moved into flash so they don’t occupy the very limited RAM. Worthy of note: if you have initialized data, it’s actually stored in flash, and at initialization copied into RAM, so setting up your code to just refer to it in flash is more efficient, though the speed of reading it is somewhat impacted.

    I always include ISP header (pogo pin pad rather than pin headers in my case) in board designs to make it easy to reflash. Using pogo allows the pad array to be smaller than the standard 0.10″ pin headers, and doesn’t require installation of the pin headers, and is also one-sided on the PCB. As I use SMD components and do a lot of prototyping with home-etched PCBs before sending off for fabrication, this also means six fewer holes to drill on the home etch. Less work is good.

  2. HOLA Łukasz Podkalicki soy Jesus daniel de colombia. tenog un problema con ATTINY 13A. no he podido encontrar un alibreria o logaritmo que pueda manejar una pantalla oled ssd 1306,06,…
    solo hay 1 solo programa en internet que me permite imprimir pero de manera programana osea los caractares tengo que incluirlos con codigo ASCII y en fomrato especifico como 3×8 o 5×8.
    en otro programa solo imprime cadenas de aracteres que esten dentro de ” ” (comillas) pero no puedo imprimir valores ent, float, double etc… convertidos o no a cadena de caracteres.

    por el momento solo he podido imprimir un numero entero con el codigo ASCII desde 0 a 9 pero no puedo modificar tamaño ni pocicin dentro de la matris de 128×63 pixeles que tiene la pantalla OLED .
    GRACIAS.

  3. Dear Editor,
    Can the ATiny13 be upgraded to allow for 9 VDC circuitry ( per ATiny13), and also update the Pulse Induction metal detector to go a little deeper? I want to use an array of ganged 6 inch diameter coils, and get further deeper in soil if necessary, and a broader range of outputs if ganged together. (10) units I want to gang together, and connect the output LED’s to a visual readout board panel, and also connect the USB port to a Logitech Headset with microphone too. I had a visual drawing of how I want the array of coils to appear, and also need a parts list for everything else that fits the 9 VDC description too please? Email me the mods, I will try to get started.

    • Hi,
      It’s been a while since I wrote this article. I didn’t experiment with higher voltage. Mostly because ADC has its peek-to-peek limits and I wanted keep the circuit simple.
      /LP

    • I’m unclear about your “allow for 9VDC circuitry”.

      Powering the ATTiny from 9V? Nope, would use a voltage regulator to power it (I’m fond of switchmodes for efficiency).

      Driving a device which is powered from 9V? Easily done if you switch the ground side with an N-channel FET or BJT. A little more trickery for a P-Channel switching the high side.

      Reading ADC readings where the signal is a higher voltage (like 9V) when the AVR is just 3v3 or 5V? Resistive divider might be what you’re looking for there, or an opamp as a buffer, then resistive divider on the output of that, or transistors in a “voltage follower” (unity gain) configuration.

    • Hi Petr, Your project made use of almost all FLASH memory 😀 It’s hard to get there – to have all required functionality and only one byte left.
      My maximum usage was somewhere around 1016Bytes. Impressive.

      /LP

    • Hi, the answer is yes. You can use ADC to measure a voltage between NTC and few kOhm bias resistor.
      /LP

  4. Piszesz że jesteś Łukasz P. Nazwisko polskie i imię. Więc nie rozumię DLACZEGO piszesz po angielsku? Czyżbyś nie był POLAKIEM?

    • Bo przyjąłem założenie zakładając ten blog, że będę go prowadził w uniwersalnym dla elektroników/informatyków języku, tj. w j. angielskim.
      /LP

  5. Hi, Łukasz! Thank you so much for yout blog! You made me fan of ATtiny13 as well!
    I have a small project – ATtiny13 with 433MHz receiver and transmitter, so it is possible to use
    ATtiny13 as a remote switch with optional confirmation, or for some remote sensors. etc.
    Unfortunately I don’t know AVR C so it’s written with Arduino IDE + MicroCore by MCUdude

    https://github.com/DROID8622/ATtiny13-433MHz-Receiver-Transmitter

    • Hi, Alex.

      I remember Florian Trier made attiny13a work with nrf24l01 with success. It was some time ago. I don’t remember details. Anyway, it’s possible but I haven’t test it, yet (but i’m going to!)

      Kind Regards
      /LP

  6. I once made an 18 watt led headlamp for caving based on the attiny 13. Completely waterproof. Extremely rugged. Simple linear current regulator to run high power led. Tiny 13 produced a pwm signal to control the current regulator.

    Would be happy to share regulator design if you wish.

    • Hi Andrew,

      sounds like an insteresing project. Please, share the link in the comment bellow or send me via email. Will attach your project to the list.

      Kind Regards
      /LP

    • Witam,

      1) ATtiny13 oraz ATtiny85 mają ten sam footprint (czyli wyprowadzenia) oraz zgodność peryferii I/O co w praktyce pozwala szybko rozwijający się projekt na ATtiny13 przenieść na np. ATtiny25/45/85. ATtiny85 jest szybszy oraz ma 8x więcej pamięci FLASH (8kB, stąd to “8” w sygnaturze). Najlepiej porównać pierwszą stronę datasheet’ów tych układów.

      2) Symbole występujące po numerze partii (np. ATtiny13A-PU) oznaczają warunki brzegowe pracy oraz typ obudowy.

      Przykładowe oznaczenia obudów:
      * AU – TQFP
      * MU – QFN
      * PU – DIP
      Dodatkowo przed symbolem obudowy może się pojawić liczba np. 10PU, która oznacza maksymalny zegar (10MHz)

      Warunki pracy:
      – (V_ gwarantuje pracę z niskim napięciem
      – (V) lub (P) oznacza też starszą wersję procesora
      – podczas, gdy (A) lub (PA) oznaczają nowsze wersje procesora; pełny zakres napięć (A) oraz mniejsze zużycie mocy (P) w porównaniu do starszej wersji

  7. Hi Łukasz,
    IR remote + 2 X DC 6V Gear Reducer Motor.
    can the robot control? forward, backward, right, left

    • Hi, let’s count it – one pin for IR, two pins per motor (H-bridge) – summing up 5 pins. Yes, it can!
      /L

  8. I made a program to AtTiny13, to simulate a PS/2 keyboard, program it to keep looking at an I/O pin, when goes down, it automatically start to “type” certain information I use to repeat over and over on those internet payment screens… 😉 Now, a simple press of the button and there it goes. That particular motherboard still has the PS/2 keyboard connector.

    Also, another little project in assembly to play sinewave, and some Christmas song, using PWM in an AtTiny13. http://www.piclistbr.org/projetos.php?p=avrsinewaveplayer

  9. Hi Łukasz !
    I study your projects for ATiny13.
    I’m currently trying to figure out the code for working with the driver MAX7219.
    I can’t understand why you use the operator first MAX7219_CS_HIGH() and then MAX7219_CS_LOW()
    in the function
    MAX7219_send(uint8_t reg, uint8_t data)
    {

    MAX7219_CS_HIGH();
    MAX7219_write(reg);
    MAX7219_write(data);
    MAX7219_CS_LOW();
    __asm(“nop”);
    MAX7219_CS_HIGH();
    }
    In the description on the chip MAX7219, the signal CS must be in the active state at zero.

    • Hi, I don’t remember 🙂 It was a while ago.. but definitly, there was a reason if I did that. I used MAX7219 datasheet to make this lib.
      /L

  10. Hello. Thanks for your very nice and useful site
    Can we set up a memory card with attiny13? For example, read the temperature and save it to the memory card?

    • Hi, I would be surely interested. Do you have a link to your project on github or somewhere else?

    • Cześć, udało mi się zrobić kilka prostych ładowarek na ATtiny13 dla akumulatorów żelowych. Jakie akumulatorki są w PS3?
      /L

    • If so, have a nice adventure! I hope that materials I posted here will help you start your project.
      /LP

  11. Hey Lukasz, is attiny 13 powerful enough to make a sound reactive LED driver? I want to connect audio input on one pin and have LED on the other? Thanks 🙂

  12. Cesc z Litwy,

    czy bedzie pan Lukasz robic projekty z innymi AVR mikroprocesorami, na przyklad Atmega8 itd.?

  13. Hi Łukasz, from what I understand attiny13a have 2 pwm channels so i wonder if you could help me to build pwm dimmer for 2 led fixtures by providing 2 channels which would run 2 Darlington transistors to run them?
    My understanding of pwm functionality of the chip is very limited. Thx ahead of time.

    • Hi, do you have any specific PWM parameters (frequency, duty cycle resolution) for your project?

      • For leds i don’t need more then 120hz but to be on the safe side it we can do more. Duty cycle resolution 8bit(max).

        Thanks again

  14. Dear Sir,
    ATiny13 must be always be used with uno this will let the Atiny13 work as standalone unit? After of course compile it! Mfile winAVR!
    kind regarrds
    demetrios

  15. It seems like Atmel Studio 7’s display of Program memory use is not trustworthy. It does not show the same value as the hex-files properties does. There is a big difference.

  16. This is a great blog. I like playing around with the Attiny MCU’s. Especially the 13. I have tried your software UART. It works great. In my last project, I use an attiny13 to get signals from a photoresister and a movement sensor. I use a ESP8266-01 to request measurements. My request terminated first with ‘>’. But i wanted to change this to ‘\r’. I use Atmel Studio 7 as IDE.
    When I use ‘>’ as terminater, everything is OK. But when I change it to anything else (‘\r’ or ‘A’), I get a program overflow.
    while ((c = uart_getc()) != ‘>’ && (p – buff) < 16)
    gives
    Program Memory Usage : 326 bytes 31,8 % Full

    while ((c = uart_getc()) != 'A' && (p – buff) < 16)
    gives
    Program Memory Usage : 2268 bytes 221,5 % Full (Memory Overflow)

    Do you have any idea, what causes this?

  17. Hi Łukasz,

    I like the ATtiny13A too. Thank you very mutch for sharing your Soft UART library.

    For me the ATtiny is a perfect Co-Controller for the ESP8266 wifi chip and low current applications. You can power down the ESP, the ATtiny messures sensors, keep variable and uptime. After wakeup or trigger the ATtiny send it’s data to the ESP. The ATtiny itself going to sleep for small intervalls.

    Best regards, Robert

Leave a Comment