1
//MiniDrv -- minimalistic driver firmware (no blinkies) -- DrJones 2014
2
#define F_CPU 4800000 //use fuses low:0x75 high:0xff
4
#include <util/delay.h>
5
//change modes here; just change/add/delete values
6
uint8_t modes[]={8,90,255}; //PWM values, 5..255
8
DDRB=2; //define PB1 as output
9
TCCR0A=0b00100001; TCCR0B=0b00000001; //PWM setup, 9kHz
10
EEARL=4;EECR=1; uint8_t mode=EEDR; //read from EEPROM
11
if (mode>=sizeof(modes)) mode=0; //check if invalid
12
OCR0B=modes[mode]; //set PWM level
13
EEDR=mode+1; //next mode
14
if(EEDR>=sizeof(modes)) EEDR=0;
15
EECR=4;EECR=4+2; while(EECR&2); //write to EEPROM
16
_delay_ms(1000); //delay for memory (or nomemory) to kick in
17
EEDR=mode; //memory: use this mode again \ use one of these lines
18
//EEDR=0; //no memory: restart from 0 / use one of these lines
19
EECR=4;EECR=4+2; while(EECR&2); //write to EEPROM
20
while(1) {} //endless loop