updated date, F_CPU, MAX_CHECKS and removed other code.
This commit is contained in:
parent
29babf6c47
commit
32169dddb9
54
main.c
54
main.c
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* FileName: *.c
|
||||
* Date: 2023
|
||||
* Date: 2024
|
||||
* Descripton: Program for Atiny13A controllers, controls DPDT relays and
|
||||
* has options to save settings in EEPROM.
|
||||
*/
|
||||
|
@ -10,7 +10,7 @@
|
|||
#endif
|
||||
|
||||
#ifndef F_CPU
|
||||
#define F_CPU 4800000UL
|
||||
#define F_CPU 9600000UL
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -29,11 +29,7 @@
|
|||
#endif
|
||||
|
||||
#ifndef UINT8_MAX
|
||||
#define UINT8_MAX 256
|
||||
#endif
|
||||
|
||||
#ifndef UINT16_MAX
|
||||
#define UINT16_MAX 65536
|
||||
#define UINT8_MAX 256
|
||||
#endif
|
||||
|
||||
//This is the bitpattern that should be at address 0x00
|
||||
|
@ -47,7 +43,7 @@
|
|||
#define ROM_EP_ADR 0x3
|
||||
|
||||
//Debounce check number.
|
||||
#define MAX_CHECKS 10
|
||||
#define MAX_CHECKS 5
|
||||
|
||||
// Define DISABLE_TEMPORARY_SWITCH to turn off the ability to hold
|
||||
// the switch to temporarily engage/bypass.
|
||||
|
@ -66,25 +62,14 @@
|
|||
|
||||
|
||||
|
||||
/*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
|
||||
*
|
||||
* for a 4.8MHz setup.
|
||||
* OVF_S = (48000000 / 64) / 256 = 2929.6875
|
||||
*
|
||||
*so 0.510S = 510ms means we need about 1493 overflows or ticks
|
||||
/*Assuming default fuses are used then it's approximatly 33.4375ms per tick.
|
||||
*
|
||||
* This is important because the ATiny13/A only have a single timer built into
|
||||
* them.
|
||||
*
|
||||
* Ticks are used as our way of keep track of long button presses.
|
||||
* */
|
||||
#define LONG_PRESS_TICKS 1493
|
||||
#define LONG_PRESS_TICKS 32 /*Approximatly 510ms*/
|
||||
|
||||
|
||||
/*A structure to hold the button info*/
|
||||
|
@ -93,7 +78,7 @@ typedef struct {
|
|||
uint8_t is_bypassed: 1;
|
||||
uint8_t is_long_pressed: 1;
|
||||
uint8_t timer_enabled: 1;
|
||||
uint16_t pressed_ticks;
|
||||
uint8_t pressed_ticks;
|
||||
uint8_t input_pin;
|
||||
uint8_t output_pin;
|
||||
}btn_state;
|
||||
|
@ -115,8 +100,6 @@ volatile uint8_t debounced_state;
|
|||
volatile uint8_t db_state[MAX_CHECKS];
|
||||
volatile uint8_t idx;
|
||||
|
||||
volatile uint16_t tick_count;
|
||||
|
||||
/*
|
||||
* ###############################
|
||||
* FUNCTION PROTOTYPES
|
||||
|
@ -151,7 +134,7 @@ void init_prog()
|
|||
init_btn(&btn2, PIN_SW2, PIN_BYPASS2);
|
||||
|
||||
/*Wait 5ms for pull-up resistors voltage to become stable.*/
|
||||
_delay_ms(5);
|
||||
//_delay_ms(5);
|
||||
|
||||
/*check if the eeprom has info. */
|
||||
while(! eeprom_is_ready()) {} //Blocks until eeprom is ready.
|
||||
|
@ -214,15 +197,6 @@ 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.
|
||||
|
||||
static inline void blink_bypass1(void)
|
||||
|
@ -382,8 +356,6 @@ static inline void debounce_switch() {
|
|||
|
||||
/*Setup the timer0 on the AVR*/
|
||||
static inline void init_timer0() {
|
||||
/*Zero out the tick_count var*/
|
||||
tick_count = 0;
|
||||
|
||||
/*config to normal mode.*/
|
||||
TCCR0A = 0x00; //stop timer
|
||||
|
@ -406,20 +378,16 @@ static inline void init_timer0() {
|
|||
//ISR(TIMER0_OVF_vect)
|
||||
|
||||
/*The interrupt service routine for the timer0*/
|
||||
ISR(TIM0_OVF_vect)
|
||||
ISR(TIM0_OVF_vect, ISR_BLOCK)
|
||||
{
|
||||
/*Disable global interrupts*/
|
||||
cli();
|
||||
|
||||
/*Check the state of the switches*/
|
||||
debounce_switch();
|
||||
|
||||
/*Update the tick_count*/
|
||||
if(btn1.timer_enabled && btn1.pressed_ticks <= UINT16_MAX){
|
||||
if(btn1.timer_enabled && btn1.pressed_ticks <= UINT8_MAX){
|
||||
btn1.pressed_ticks += 1;
|
||||
}
|
||||
|
||||
if(btn2.timer_enabled && btn2.pressed_ticks <= UINT16_MAX){
|
||||
if(btn2.timer_enabled && btn2.pressed_ticks <= UINT8_MAX){
|
||||
btn2.pressed_ticks += 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue