Compare commits

..

No commits in common. "5da6bd3219b946592054df794e16f5b32b163bee" and "b8839a9b2b015cc23a19e527f72f22c25dc521a8" have entirely different histories.

3 changed files with 34 additions and 13 deletions

3
.gitignore vendored
View file

@ -1,6 +1,3 @@
main.o main.o
main.map main.map
main.elf main.elf
pre_built/attiny13_9-6Mhz.hex
test_blink/waveform
test_blink/main.hex

38
main.c
View file

@ -1,6 +1,6 @@
/* /*
* FileName: *.c * FileName: *.c
* Date: 2024 * Date: 2023
* Descripton: Program for Atiny13A controllers, controls DPDT relays and * Descripton: Program for Atiny13A controllers, controls DPDT relays and
* has options to save settings in EEPROM. * has options to save settings in EEPROM.
*/ */
@ -10,7 +10,7 @@
#endif #endif
#ifndef F_CPU #ifndef F_CPU
#define F_CPU 9600000UL #define F_CPU 4800000UL
#endif #endif
@ -43,7 +43,7 @@
#define ROM_EP_ADR 0x3 #define ROM_EP_ADR 0x3
//Debounce check number. //Debounce check number.
#define MAX_CHECKS 5 #define MAX_CHECKS 10
// Define DISABLE_TEMPORARY_SWITCH to turn off the ability to hold // Define DISABLE_TEMPORARY_SWITCH to turn off the ability to hold
// the switch to temporarily engage/bypass. // the switch to temporarily engage/bypass.
@ -62,14 +62,21 @@
/*Assuming default fuses are used then it's approximatly 33.4375ms per tick. /*The timing of "ticks" is dependent on the AVR timer's counter register
* so for an 8bit register the maximum value is 256. Given we stick with
* a 1Mhz cpu frequency can use this formula to calculate the number of
* interrupts(timer overflows) per second:
*
* OVF_S = (F_CPU / DIV)/ (2^8)
* 61 = (1000000 / 64) / 256
* *
* This is important because the ATiny13/A only have a single timer built into * This is important because the ATiny13/A only have a single timer built into
* them. * them.
* *
* Ticks are used as our way of keep track of long button presses. * Ticks are used as our way of keep track of long button presses.
* */ * */
#define LONG_PRESS_TICKS 32 /*Approximatly 510ms*/ //original sent had 60
#define LONG_PRESS_TICKS 66
/*A structure to hold the button info*/ /*A structure to hold the button info*/
@ -100,6 +107,8 @@ volatile uint8_t debounced_state;
volatile uint8_t db_state[MAX_CHECKS]; volatile uint8_t db_state[MAX_CHECKS];
volatile uint8_t idx; volatile uint8_t idx;
volatile uint16_t tick_count;
/* /*
* ############################### * ###############################
* FUNCTION PROTOTYPES * FUNCTION PROTOTYPES
@ -134,7 +143,7 @@ void init_prog()
init_btn(&btn2, PIN_SW2, PIN_BYPASS2); init_btn(&btn2, PIN_SW2, PIN_BYPASS2);
/*Wait 5ms for pull-up resistors voltage to become stable.*/ /*Wait 5ms for pull-up resistors voltage to become stable.*/
//_delay_ms(5); _delay_ms(5);
/*check if the eeprom has info. */ /*check if the eeprom has info. */
while(! eeprom_is_ready()) {} //Blocks until eeprom is ready. while(! eeprom_is_ready()) {} //Blocks until eeprom is ready.
@ -197,6 +206,15 @@ int main()
* ############################### * ###############################
*/ */
void inf_blink_test(){
DDRB |= (1<<PB3);
while(1){
PORTB ^= (1<<PB3);
_delay_ms(250);
}
}
//Made heavy use of static inline functions to improve readability. //Made heavy use of static inline functions to improve readability.
static inline void blink_bypass1(void) static inline void blink_bypass1(void)
@ -356,6 +374,8 @@ static inline void debounce_switch() {
/*Setup the timer0 on the AVR*/ /*Setup the timer0 on the AVR*/
static inline void init_timer0() { static inline void init_timer0() {
/*Zero out the tick_count var*/
tick_count = 0;
/*config to normal mode.*/ /*config to normal mode.*/
TCCR0A = 0x00; //stop timer TCCR0A = 0x00; //stop timer
@ -378,11 +398,15 @@ static inline void init_timer0() {
//ISR(TIMER0_OVF_vect) //ISR(TIMER0_OVF_vect)
/*The interrupt service routine for the timer0*/ /*The interrupt service routine for the timer0*/
ISR(TIM0_OVF_vect, ISR_BLOCK) ISR(TIM0_OVF_vect)
{ {
/*Disable global interrupts*/
cli();
/*Check the state of the switches*/ /*Check the state of the switches*/
debounce_switch(); debounce_switch();
/*Update the tick_count*/
if(btn1.timer_enabled && btn1.pressed_ticks <= UINT8_MAX){ if(btn1.timer_enabled && btn1.pressed_ticks <= UINT8_MAX){
btn1.pressed_ticks += 1; btn1.pressed_ticks += 1;
} }

View file

@ -9,8 +9,8 @@ CC = avr-gcc
#Default cpu frequency is 9.8Mhz, 4.8 gives us less power consumption #Default cpu frequency is 9.8Mhz, 4.8 gives us less power consumption
#F_CPU = 1000000UL #F_CPU = 1000000UL
#F_CPU = 4800000UL F_CPU = 4800000UL
F_CPU = 9800000UL #F_CPU = 9800000UL
MCU = attiny13a MCU = attiny13a
# Flags # Flags