Introduction: ATTiny2313 Multi-mode LED Matrix Clock
this is a mutli-mode clock project based on attiny2313. it employs a 8x8 led matrix as display. with the limited resolution, this 12 hour clock shows time in 6 different modes.
the circuit employs row and column multiplexing to drive the leds, one row at a time, this gives a 12.5% duty cycle when "sets" of leds (8 of them in each of the 8 rows) are turn on briefly. current limiting resistors are eliminated to save breadboard estate and as we are not constantly driving individual leds, they are not going to be damaged.
the control (user interface) is also arranged so that we only use one tactile button for input. the firmware capture long button presses (press and hold) for menu rotation and normal button presses for menu selection.
this is a hobby project and the clock is only as accurate as your internal oscillator calibration. i had not use a crystal in this project as doing so will upset the "matrix on top of mcu" breadboard layout. a crystal can be used to increase accuracy on a alternate breadboard layout (or pcb). with software compensation, i can achieve may be within 2 minutes off a day. i would need to adjust the time every 3 or 4 days to keep it usable. this is more a cubicle talk piece than a swiss time piece.
Below is video on full construction
Step 1: Display Modes
hhmm mode (see attached image 1) , typical hours plus minutes scrolling digits with colon separator.
seconds mode, shows only seconds.
tix mode (see attached image 2), led matrix is divided into quadrant, the upper quadrants shows the hour in bcd (binary coded decimal) values. they are represented by the number of dots to indicate the digits. the lower quadrants show the minute in bcd. i.e. for 9:36 it shows no dot + 9 dots on the upper half and 3 dots + 6 dots on the lower half.
dice mode (see attached image 3), the led matrix is divided into two set of 'dices'. with the upper pair showing hour from 1 - 12, the lower pair of dice shows minutes in 5 minute increments. i.e. for 9:45 it shows dice value 9 (upper) + 9 (lower) (9 x 5 min).
binary mode (bcd, see attached image 4), the hour, minute and second digits are show as binary dot on different rows in the led matrix. the rows 0 and 1 (from top) represents the hour digits, rows 2 is blanked, row 3 and 4 represent the minute digits, row 5 is blanked, row 6 and 7 represents the second digits.
Step 2: Features and Parts
features
* minimal components, 3 parts
* battery operated from 3V to 5V
* use of watchdog timer to keep time, power-down sleep mode takes about 1uA power
* calibration allow setup of seconds to gain for each hour
* this is a 12H clock, not 24H and has no AM/PM indicator
* not very accurate, planning to add RTC chip
parts list
* attiny2313v (v is low power version that works with 3V)
* 8x8 LED matrix display (red works best on 3V power)
* tactile button
led matrix pinout
the 8x8 led matrix has dot size of 1.9mm and is of common cathode, if you have common anode type, you can change a few lines in the code for adoption. see the following diagram and see if you have the right pin-outs. it appears they are quite common and if you purchase via ebay most suppliers have the same pin-out even if the model number is different.
. . . . . C8 C7 R2 C1 R4 C6 C4 R1 . . . . top row of pins (C is column, R is row)
. . . . . R5 R7 C2 C3 R8 C5 R6 R3 . . . . bottom row of pins
the 8x8 led matrix has dot size of 1.9mm and is of common cathode, if you have common anode type, you can change a few lines in the code for adoption. see the following diagram and see if you have the right pin-outs. it appears they are quite common and if you purchase via ebay most suppliers have the same pin-out even if the model number is different.
Step 3: Breadboard Layout and Assembly
. Cut to length 2 swg#22 wires and insert into breadboard as layout diagram shows.
. You may use other wires, I used core wires extracted from common network cables.
. Insert MCU (attiny2313v) into breadboard as per layout diagram.
. Insert LED matrix.
. Insert tactile switch.
. Schematic diagram also attached for references.
Step 4: Building and Flashing the Project
the source runs at about 500 lines and is rather self explanatory. the project was built in a linux ubuntu lucid box with avr-gcc toolchain.
the project is to be run at 1Mhz internal oscillator, you can use the following fuse setting via avrdude
avrdude -c avrisp2 -p t2313 -P /dev/ttyUSB0 -V -U lfuse:w:0x64:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
although the project uses only a handful of letters for menu selection, i had included 38 characters in the rom. i.e. digits 0-9, letters A-Z, a '.' and a space character.
the tic mode and dice mode pattern selection is not true random as we had code size restriction.
per row leds brightness are compensated in software by adjusting how long a row of leds stays on and off. i.e. for rows with all 8 column leds on, we stay longer to make them appears to be as bright as those rows that have only one or two leds on.
watchdog timer is used as this allows for sleep mode to prolong battery life. this means that the clock is not that accurate. during sleep the timer wakes the system up 8 times a second to see if a key is pressed and to advance the clock.
source code for the project can be downloaded here
http://sites.google.com/a/simpleavr.com/simpleavr/avr/multimode-clock/mclock.c
and make file here
http://sites.google.com/a/simpleavr.com/simpleavr/avr/multimode-clock/makefile

Participated in the
Epilog Challenge
23 Comments
Question 3 years ago on Step 4
There was an error please help
9 years ago on Introduction
Can you point out in the code where to change the setup for a common anode type? Or point out where in code it uses the pinout so I can customize? I'm not super fluent in C yet. Thanks!
Reply 3 years ago
PORTA = ~(outd >> 6);
PORTB = ~outb;
PORTD = ~outd;
6 years ago
Can I use this code for arduino uno ? Im porting your code but failed D: so can you help me :D
8 years ago on Introduction
Hey . can i use attiny2313a instead of attiny2313v? will it work properly?
10 years ago on Introduction
HI! Do you have the RTC .hex ready??
thank you!
marC:)
Reply 10 years ago on Introduction
there is no RTC for this project. adding RTC is just an idea that did not happened.
i am playing w/ msp430's now and have not touch avr's for almost 2 years.
u are on your own :)
this project is interesting though, might re-do it w/ msp430 / TI launchpad.
10 years ago on Introduction
I have programmed using these commands. Is it okay?
avrdude -c usbasp -p t2313 -V -U lfuse:w:0x64:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
avrdude -p t2313 -c usbasp -U flash:w:mclock.ee.hex
thank you!
marC:)
Reply 10 years ago on Introduction
i can see u are using usbasp programmer. the mclock.ee.hex is eeprom, not flash, see below how to write both flash and eeprom. u need to adjust to your programmer though.
from my make file
avrdude -c usbtiny -B 12 \
-p t2313 -P /dev/ttyUSB0 -e \
-V -U flash:w:$(TARGET).elf -U eeprom:w:$(TARGET).ee.hex
10 years ago on Introduction
I'm quite interesting using xtal along this project, but what would be the connection for :
click to download mclock.ee.hex
what is the difference between mclock.hex and mclock.ee.hex ??
how do i use makefile along this project?
thank you so much!
marC:)
Reply 10 years ago on Introduction
i can't help u now. i had unlearned / forgot how to program avr's. i haven't touch one for 2 years. now i am playing w/ msp430 solely. u need to find out how to use a clock crystal and use that for a timer to count / advance your seconds.
the ee.hex is for eprom. .hex is for program.
10 years ago on Introduction
Do : ATTINY2313-20PU would work?
thank you so much!
marC:)
Reply 10 years ago on Introduction
yes, it would. you should power it w/ 4.5v or 5v though.
the led may be a little bit too bright and u can adjust the code to give more "dark" cycles during multiplexing.
** warning... this is a toy, not a real clock. I can builders told me it typically swift off one hour per day.
good luck w/. your build.
12 years ago on Introduction
Hi Simpleavr
thanks for comment.I have load the .hexfile and i think it was start in Binarymode
Unfortunately,the tiny was burned in a few moments I had thought that leds are low current type´s but it was not so what !
Is not so bad but i only have other µc´s like mega48 ,mega 8,16 and 32´s
Is there a way to run the code on e.g mega48?
Otherwise coole Sache especially the binary mode
best regards
12 years ago on Introduction
Hi a!
I got the error
make.exe: *** No rule to make target `program'. Stop.
there created:
mclock.o
mclock.map
how i can make a .hex file?
a other case is where the resistors? are there inbuild the Module?
i have made a 8x8Matrix with 3mm Led´s.
So i think i need 300-400 Ohms resistors
Reply 12 years ago on Introduction
@hatschel my bad, i had corrected the makefile, please download again and make clean, make, will generate .hex now. had added and use avr-objcopy to generate .hex from .elf, like so
$(OBJCOPY) -j .text -j .data -O ihex $(TARGET).elf $(TARGET).hex
where $OBJCOPY is avr-objcopy and $TARGET is mclock.
if u want the hex files (.hex and .eeprom.hex) they are in my site
http://www.simpleavr.com/avr/multimode-clock
i didn't use resistors in this project to save space and parts, i just use multiplexing timing to avoid excessive current into individual leds, it's not ideal but it works.
Reply 12 years ago on Introduction
i also get make.exe mclock.elf Error1
don´t know what this means
can you plz upload a file that i can flash?
I have the stk500 and the avr910 programmers
12 years ago on Introduction
Hello.Canou make a instructable about the usb programmer plz.
Reply 12 years ago on Introduction
the programmer used to program this project has been published as another instructable, u can search "vusbtiny programmer" to locate it.
Reply 12 years ago on Introduction
https://www.instructables.com/id/VUSBTiny-AVR-SPI-Programmer/