Added firmware

This commit is contained in:
nedko 2025-05-05 15:11:46 +03:00
parent b6985b4ac3
commit 24ed427a2b
3 changed files with 66 additions and 0 deletions

1
firmware/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
magic.hex

11
firmware/Makefile Normal file
View File

@ -0,0 +1,11 @@
all:
make build
make program
build:
avr-gcc main.c -o magic.hex -mmcu=attiny84a -Wall -Wextra -Os
program:
avrdude -p attiny84 -c usbtiny -U flash:w:magic.hex
.PHONY: all build program

54
firmware/main.c Normal file
View File

@ -0,0 +1,54 @@
#include <avr/io.h>
#include <avr/sleep.h>
#include <stdint.h>
int main()
{
uint8_t input;
uint8_t temp;
uint8_t count;
uint8_t i;
// Setup
PORTA = (1 << PORTA7) | (1 << PORTA6) | (1 << PORTA5) | (1 << PORTA4);
DDRA = (1 << DDA7) | (1 << DDA6) | (1 << DDA5) | (1 << DDA4);
PORTB = (1 << PORTB2);
DDRB = (1 << DDB2);
PRR = (1 << PRTIM1) | (1 << PRTIM0) | (1 << PRUSI) | (1 << PRADC);
// Read Inputs
input = PINA;
temp = input;
count = 0;
// How many inputs are set
for (i = 0; i < 4; ++i)
{
if (temp & 0x01)
{
++count;
}
temp >>= 1;
}
// If none or more than 1 are providing power - do nothing until reboot
if (count != 1)
{
goto end;
}
// Set Upstream Facing Port
input = ~input;
input <<= 4;
PORTA = input;
PORTB &= ~(1 << PORTB2);
end:
// Power Down Mode
MCUCR = (1 << SM1) | (1 << SE);
while (1)
{
sleep_cpu();
}
}