Go to file
jakeg00dwin b58b4438bc changed to using the C11 standard as it's supported on the avr-gcc compiler 2024-04-10 11:16:09 -07:00
build added cmake style build dir 2024-04-10 10:46:02 -07:00
docs added docs dir 2024-04-10 10:46:08 -07:00
mocks added mocks dir 2024-04-10 10:46:15 -07:00
src added the main.c and a cmakelists file 2024-04-10 10:46:35 -07:00
tests added all the needed template files 2024-04-10 10:47:04 -07:00
.gitignore ignore the cache 2024-04-10 10:58:44 -07:00
CMakeLists.txt changed to using the C11 standard as it's supported on the avr-gcc compiler 2024-04-10 11:16:09 -07:00
Doxyfile added all the needed template files 2024-04-10 10:47:04 -07:00
README.md added the copied readme 2024-04-10 10:47:57 -07:00
compile_commands.json added all the needed template files 2024-04-10 10:47:04 -07:00
gccavr_tc.cmake added new toolchain file from Matthias Kleemann 2024-04-10 10:59:00 -07:00
otto.sh setup usage of toolchain file 2024-04-10 11:01:02 -07:00
setup.sh added all the needed template files 2024-04-10 10:47:04 -07:00

README.md

AVR ATiny13 Project 002

This is the firmware for a latching dual relay system. It allows the user to switch two DPDT relays by with two separate switches.

Components:

Micro: AVR ATiny13, ATiny25/45/85

Instructions:

  1. Power the system using a 1.8v~5.5v power supply
  2. Set/program the AVR to use a 1MHz clock rate.
  3. Connect the pins as described above.

ACTIVATING RELAYS:

  1. Activate the desired button with a quick press <= 350ms.
  2. Repeat to toggle the relay.

TEMPORARY TOGGLE:

  1. Press and hold the desired button >= 350ms.
  2. Let go to disable.

SAVING SETTINGS:

  1. Press and hold the target button.
  2. While holding the button power cycle the device.
  3. When the setting is successfully saved the relay/led will blink/toggle.
  4. repeat until desired preset is saved.

Technical Aspects:

The use of C style bitfields has been used inside a struct to maintain a global state. It minimizes the size of the binary once compiled.

The majority of the code is blocking/polling; overhead from introducing interrupts and ISR(interrupt service routines) wasn't as clean and made it more platform dependent.

The code right now can for the most part be ported to any AVR micro-controller with no changes.

Timings

The current setup is calculated for a attiny13/a running at 4.8Mhz without the clock divider fuse set.

This means that the actual f_cpu is 4.8Mhz to calculate the delay times we can use this formula:


msPerOverflow = 1000ms / (\frac{4.8Mhz}{64} * \frac{1}{256}) \approx 6.8ms

Where 64 is the pre scaler setting and 256 is the maximum value of the 8bit timer.

BUILDING PROJECT:

On Unix

git clone <REPOURL>
cd <REPO>
make flash

Flashing the Project

On Windows(usbtinyisp)

  1. Install the usbtiny driver:
    1. plug in usbtiny device
    2. Install the drivers from: adafruit
  2. open Powershell
  3. navigate to the repo directory cd Downloads\gf_002
  4. enter the command below.
./avrdude.exe -p t13 -c usbtiny -B 125kHz -U flash:w:.\pre_built\attiny13_4-8Mhz.hex -U lfuse:w:0x79:m -U hfuse:w:0xFF:m -U lock:w:0xFF:m

On Windows(usbASP)

  1. Install the usbasp driver:
    1. plug in usbasp device
    2. run the 'zadig-2.8.exe' program
    3. select the libusb 32 on the right by clicking the down arrow to select.
  2. open Powershell
  3. navigate to the repo directory cd Downloads\gf_002
  4. enter the command below.
./avrdude.exe -p t13 -c usbasp -B 125kHz -U flash:w:.\pre_built\attiny13_4-8Mhz.hex -U lfuse:w:0x79:m -U hfuse:w:0xFF:m -U lock:w:0xFF:m