Relay_and_Socket_Protection/src/main.c
2024-09-03 19:07:48 -07:00

76 lines
1.9 KiB
C

/**
* @file main.c
* @author Jake G
* @date 15 June 2024
* @brief File contains the main function.
*
* This file contains the main logic loop and exists to setup the values
* specific to the micro-controller. All other functions and configuration are
* extracted into separate source files and headers for configuration.
*/
#include <stdio.h>
#define F_CPU 3333333UL
// This can prevent issues with utils/delay.h library with the gcc toolchain
#define __DELAY_BACKWARD_COMPATIBLE__
#include "RegEdit.h"
#include "Relays.h"
#include "SuperLoop.h"
#include "config.h"
#include "timer.h"
#include <avr/cpufunc.h> /* Required header file */
#include <avr/io.h>
#include <util/delay.h>
#define RELAY0_ENPIN 1 // PORTA
#define RELAY0_INPIN 3 // PORTA
#define RELAY1_ENPIN 3 // PORTB
#define RELAY1_INPIN 2 // PORTA
#define RELAY2_ENPIN 2 // PORTB
#define RELAY2_INPIN 0 // PORTB
#define N_RELAYS 3
// Set the function pointer for the delay func
void (*Delay_MicroSeconds)(double us) = _delay_us;
void setup_relays(Relay *arr) {
// setup the first relay
arr[0].output_port = &PORTA.OUT;
arr[0].output_pin = RELAY0_ENPIN;
arr[0].input_port = &PORTA.IN;
arr[0].input_pin = RELAY0_INPIN;
arr[0].disabled_fpc = false;
// Set the directions for the input and output pins/ports
PORTA.DIR |= (1 << RELAY0_ENPIN);
PORTA.DIR &= ~(1 << RELAY0_INPIN);
//for (int i = 0; i < N_RELAYS; i++) {
//Relay_MeasureMakeTime(&arr[0]);
//_delay_ms(5);
//Relay_MeasureBreakTime(&arr[0]);
//}
}
int main(int argc, char **argv) {
// startup delay prevents fast toggles of relays on reset signals
_delay_ms(500);
Relay relay_array[N_RELAYS];
setup_relays(relay_array);
Relay_MeasureMakeTime(&relay_array[0]);
_delay_ms(500);
Relay_MeasureBreakTime(&relay_array[0]);
// Setup for Infinite Loop
SuperLoop_SetIterations(0);
SuperLoop_Run();
}