Auto formatting appied to the newly added modules.
This commit is contained in:
parent
5e165ae9dc
commit
85d5cebb5a
129
src/ADC/ADC.c
129
src/ADC/ADC.c
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Author: username
|
||||
* Date: 2024
|
||||
* Date: 2024
|
||||
* filename: ADC.c
|
||||
* description: module_purpose
|
||||
*/
|
||||
|
@ -15,98 +15,85 @@
|
|||
|
||||
#define MAX_PIN_NUM 7
|
||||
|
||||
static bool IsInvalidPin(uint8_t pin_num){
|
||||
if(pin_num > MAX_PIN_NUM){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
static bool IsInvalidPin(uint8_t pin_num) {
|
||||
if (pin_num > MAX_PIN_NUM) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ADC_Setup(void) {
|
||||
// Clears control register A for ADC0
|
||||
RegEdit_SetNum((void *)&ADC0.CTRLA, 0x00);
|
||||
|
||||
void ADC_Setup(void)
|
||||
{
|
||||
//Clears control register A for ADC0
|
||||
RegEdit_SetNum((void *) &ADC0.CTRLA, 0x00);
|
||||
// Sets The sample accumulation number to 32.
|
||||
RegEdit_SetNum((void *)&ADC0.CTRLB, 0x5);
|
||||
|
||||
//Sets The sample accumulation number to 32.
|
||||
RegEdit_SetNum((void *) &ADC0.CTRLB, 0x5);
|
||||
// Sets the voltage reference to VDD or VCC.
|
||||
RegEdit_SetBit((void *)&ADC0.CTRLC, 4);
|
||||
|
||||
//Sets the voltage reference to VDD or VCC.
|
||||
RegEdit_SetBit((void *) &ADC0.CTRLC, 4);
|
||||
// Sets the pre-scalar for the adc sample rate.
|
||||
RegEdit_SetBit((void *)&ADC0.CTRLC, 2);
|
||||
|
||||
//Sets the pre-scalar for the adc sample rate.
|
||||
RegEdit_SetBit((void *) &ADC0.CTRLC, 2);
|
||||
// Setup an Initalization delay.
|
||||
RegEdit_OR_Num((void *)&ADC0.CTRLD, (2 << 5));
|
||||
|
||||
//Setup an Initalization delay.
|
||||
RegEdit_OR_Num((void *) &ADC0.CTRLD, (2<<5));
|
||||
|
||||
//Set the bit for ADC variation during readings.
|
||||
RegEdit_SetBit((void *) &ADC0.CTRLD, 4);
|
||||
// Set the bit for ADC variation during readings.
|
||||
RegEdit_SetBit((void *)&ADC0.CTRLD, 4);
|
||||
}
|
||||
|
||||
void ADC_Init(uint8_t pin_num)
|
||||
{
|
||||
|
||||
if(IsInvalidPin(pin_num)){return;}
|
||||
void ADC_Init(uint8_t pin_num) {
|
||||
|
||||
if (IsInvalidPin(pin_num)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//set the direction to input
|
||||
RegEdit_ClearBit((void *) &PORTA.DIR, pin_num);
|
||||
// set the direction to input
|
||||
RegEdit_ClearBit((void *)&PORTA.DIR, pin_num);
|
||||
|
||||
//Disable the pull-up resistor
|
||||
RegEdit_ClearBit((void *) &PORTA.OUT, pin_num);
|
||||
|
||||
//Disable input buffer
|
||||
//We do some kinda nasty address addition but it saves
|
||||
//memory and means we don't need a switch statment.
|
||||
RegEdit_SetBit(
|
||||
(void *) (&PORTA.PIN0CTRL)+pin_num,
|
||||
PORT_ISC_INPUT_DISABLE_gc
|
||||
);
|
||||
|
||||
// Disable the pull-up resistor
|
||||
RegEdit_ClearBit((void *)&PORTA.OUT, pin_num);
|
||||
|
||||
// Disable input buffer
|
||||
// We do some kinda nasty address addition but it saves
|
||||
// memory and means we don't need a switch statment.
|
||||
RegEdit_SetBit((void *)(&PORTA.PIN0CTRL) + pin_num,
|
||||
PORT_ISC_INPUT_DISABLE_gc);
|
||||
}
|
||||
|
||||
|
||||
void ADC_Enable(void)
|
||||
{
|
||||
//Set the enable bit in the CTRLA register
|
||||
RegEdit_SetBit((void *) &ADC0.CTRLA, 0);
|
||||
void ADC_Enable(void) {
|
||||
// Set the enable bit in the CTRLA register
|
||||
RegEdit_SetBit((void *)&ADC0.CTRLA, 0);
|
||||
}
|
||||
|
||||
|
||||
void ADC_Disable()
|
||||
{
|
||||
//Clear the enable ADC flag
|
||||
RegEdit_ClearBit((void *) &ADC0.CTRLA, 0);
|
||||
void ADC_Disable() {
|
||||
// Clear the enable ADC flag
|
||||
RegEdit_ClearBit((void *)&ADC0.CTRLA, 0);
|
||||
}
|
||||
|
||||
|
||||
void ADC_SetPin(uint8_t pin_num)
|
||||
{
|
||||
if(IsInvalidPin(pin_num)){return;}
|
||||
RegEdit_ClearRegister((void *) &ADC0.MUXPOS);
|
||||
RegEdit_SetNum((void *) &ADC0.MUXPOS, pin_num);
|
||||
void ADC_SetPin(uint8_t pin_num) {
|
||||
if (IsInvalidPin(pin_num)) {
|
||||
return;
|
||||
}
|
||||
RegEdit_ClearRegister((void *)&ADC0.MUXPOS);
|
||||
RegEdit_SetNum((void *)&ADC0.MUXPOS, pin_num);
|
||||
}
|
||||
|
||||
uint16_t ADC_ReadValue_Impl(uint8_t pin_num) {
|
||||
RegEdit_SetNum((void *)&ADC0.COMMAND, ADC_STCONV_bm);
|
||||
|
||||
uint16_t ADC_ReadValue_Impl(uint8_t pin_num)
|
||||
{
|
||||
RegEdit_SetNum((void *) &ADC0.COMMAND, ADC_STCONV_bm);
|
||||
/* Wait until ADC conversion done */
|
||||
while (!(ADC0.INTFLAGS & ADC_RESRDY_bm)) {
|
||||
;
|
||||
}
|
||||
|
||||
/* Wait until ADC conversion done */
|
||||
while ( !(ADC0.INTFLAGS & ADC_RESRDY_bm) )
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
/* Clear the interrupt flag by writing 1: */
|
||||
ADC0.INTFLAGS = ADC_RESRDY_bm;
|
||||
|
||||
uint16_t adc_val = (uint16_t) ADC0.RES;
|
||||
adc_val = adc_val >> 5;
|
||||
return adc_val;
|
||||
/* Clear the interrupt flag by writing 1: */
|
||||
ADC0.INTFLAGS = ADC_RESRDY_bm;
|
||||
|
||||
uint16_t adc_val = (uint16_t)ADC0.RES;
|
||||
adc_val = adc_val >> 5;
|
||||
return adc_val;
|
||||
}
|
||||
|
||||
|
||||
//Set the default for the function pointer.
|
||||
// Set the default for the function pointer.
|
||||
uint16_t (*ADC_ReadValue)(uint8_t pin_num) = ADC_ReadValue_Impl;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/**
|
||||
* @brief Interface to the AVR ADC hardware.
|
||||
* @brief Interface to the AVR ADC hardware.
|
||||
* @details This file is...
|
||||
* @author Jake G
|
||||
* @date 2024
|
||||
* @author Jake G
|
||||
* @date 2024
|
||||
* @copyright None
|
||||
* @file ADC.h
|
||||
*/
|
||||
|
@ -10,10 +10,8 @@
|
|||
#ifndef ADC_H
|
||||
#define ADC_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @brief Initializes the AVR hardware in order to accept
|
||||
|
@ -25,29 +23,26 @@
|
|||
* alongside the input buffer(digital).
|
||||
*
|
||||
* This in turn helps reduce noise when using the ADC.
|
||||
*
|
||||
*
|
||||
*/
|
||||
void ADC_Init(uint8_t pin_num);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Enables the ADC
|
||||
* @brief Enables the ADC
|
||||
*/
|
||||
void ADC_Enable(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Disables the ADC
|
||||
*/
|
||||
void ADC_Disable();
|
||||
|
||||
|
||||
/**
|
||||
* @brief Reads ADC value into variable
|
||||
*
|
||||
* @param pin_num The bin number of the ADC pin being read.
|
||||
*
|
||||
* This function depends on the ADC already being initialized and enabled
|
||||
* This function depends on the ADC already being initialized and enabled
|
||||
* before being called.
|
||||
*/
|
||||
extern uint16_t (*ADC_ReadValue)(uint8_t pin_num);
|
||||
|
@ -61,8 +56,7 @@ extern uint16_t (*ADC_ReadValue)(uint8_t pin_num);
|
|||
*
|
||||
* This function should only need to be called once.
|
||||
*/
|
||||
void ADC_Setup(void);
|
||||
|
||||
void ADC_Setup(void);
|
||||
|
||||
/**
|
||||
* @brief Sets the pin used in the MUX for ADC0.
|
||||
|
@ -71,4 +65,4 @@ void ADC_Setup(void);
|
|||
*/
|
||||
void ADC_SetPin(uint8_t pin_num);
|
||||
|
||||
#endif //ADC_H
|
||||
#endif // ADC_H
|
||||
|
|
|
@ -49,12 +49,8 @@ endif()
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
add_subdirectory(RegEdit)
|
||||
add_subdirectory(usart)
|
||||
add_subdirectory(timer)
|
||||
|
||||
add_subdirectory(SuperLoop)
|
||||
add_subdirectory(Relays)
|
||||
add_subdirectory(zero_cross_detection)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Author: Jake G
|
||||
* Date: 2024
|
||||
* Author: Jake G
|
||||
* Date: 2024
|
||||
* filename: load.c
|
||||
* description: module_purpose
|
||||
*/
|
||||
|
@ -9,67 +9,57 @@
|
|||
#define __AVR_ATtiny404__
|
||||
#endif
|
||||
|
||||
|
||||
#include <avr/io.h>
|
||||
#include "load.h"
|
||||
|
||||
#include <avr/io.h>
|
||||
|
||||
#ifndef UNIT_TESTING
|
||||
#include "ADC.h"
|
||||
#include "RegEdit.h"
|
||||
#include "ADC.h"
|
||||
#include "RegEdit.h"
|
||||
#else
|
||||
#include "MockADC/MockADC.h"
|
||||
#include "MockRegEdit.h"
|
||||
#include "MockADC/MockADC.h"
|
||||
#include "MockRegEdit.h"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//These two arrays allow us to track the A and B ports to know when
|
||||
//one has been disabled before.
|
||||
// These two arrays allow us to track the A and B ports to know when
|
||||
// one has been disabled before.
|
||||
static bool porta_disabled[8] = {0};
|
||||
static bool portb_disabled[8] = {0};
|
||||
|
||||
|
||||
static bool valid_load(uint16_t val)
|
||||
{
|
||||
if(val > 527 && val < 1000) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
static bool valid_load(uint16_t val) {
|
||||
if (val > 527 && val < 1000) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Load_HandleLoadPortA(uint8_t adc_pin, uint8_t out_pin)
|
||||
{
|
||||
ADC_Init(adc_pin);
|
||||
ADC_Enable();
|
||||
ADC_SetPin(adc_pin);
|
||||
uint16_t val = ADC_ReadValue(adc_pin);
|
||||
|
||||
ADC_Disable();
|
||||
if(valid_load(val) && !porta_disabled[adc_pin]){
|
||||
RegEdit_SetBit((void *) &PORTA.DIR, out_pin);
|
||||
RegEdit_SetBit((void *) &PORTA.OUT, out_pin);
|
||||
}
|
||||
else{
|
||||
RegEdit_ClearBit((void *) &PORTA.OUT, out_pin);
|
||||
porta_disabled[adc_pin] = true;
|
||||
}
|
||||
void Load_HandleLoadPortA(uint8_t adc_pin, uint8_t out_pin) {
|
||||
ADC_Init(adc_pin);
|
||||
ADC_Enable();
|
||||
ADC_SetPin(adc_pin);
|
||||
uint16_t val = ADC_ReadValue(adc_pin);
|
||||
|
||||
ADC_Disable();
|
||||
if (valid_load(val) && !porta_disabled[adc_pin]) {
|
||||
RegEdit_SetBit((void *)&PORTA.DIR, out_pin);
|
||||
RegEdit_SetBit((void *)&PORTA.OUT, out_pin);
|
||||
} else {
|
||||
RegEdit_ClearBit((void *)&PORTA.OUT, out_pin);
|
||||
porta_disabled[adc_pin] = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Load_HandleLoadPortB(uint8_t adc_pin, uint8_t out_pin)
|
||||
{
|
||||
ADC_Init(adc_pin);
|
||||
ADC_Enable();
|
||||
ADC_SetPin(adc_pin);
|
||||
uint16_t val = ADC_ReadValue(adc_pin);
|
||||
|
||||
ADC_Disable();
|
||||
if(valid_load(val) && !portb_disabled[adc_pin]){
|
||||
RegEdit_SetBit((void *) &PORTB.DIR, out_pin);
|
||||
RegEdit_SetBit((void *) &PORTB.OUT, out_pin);
|
||||
}
|
||||
else{
|
||||
RegEdit_ClearBit((void *) &PORTB.OUT, out_pin);
|
||||
portb_disabled[adc_pin] = true;
|
||||
}
|
||||
void Load_HandleLoadPortB(uint8_t adc_pin, uint8_t out_pin) {
|
||||
ADC_Init(adc_pin);
|
||||
ADC_Enable();
|
||||
ADC_SetPin(adc_pin);
|
||||
uint16_t val = ADC_ReadValue(adc_pin);
|
||||
|
||||
ADC_Disable();
|
||||
if (valid_load(val) && !portb_disabled[adc_pin]) {
|
||||
RegEdit_SetBit((void *)&PORTB.DIR, out_pin);
|
||||
RegEdit_SetBit((void *)&PORTB.OUT, out_pin);
|
||||
} else {
|
||||
RegEdit_ClearBit((void *)&PORTB.OUT, out_pin);
|
||||
portb_disabled[adc_pin] = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,9 @@
|
|||
*/
|
||||
|
||||
#ifndef LOAD_H
|
||||
#define LOAD_H
|
||||
#define LOAD_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @brief Low Threshold
|
||||
|
@ -27,6 +29,4 @@ void Load_HandleLoadPortB(uint8_t adc_pin, uint8_t out_pin);
|
|||
|
||||
void Load_HandlePinLoads(void);
|
||||
|
||||
|
||||
#endif /* LOAD_H */
|
||||
|
||||
#endif /* LOAD_H */
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
/*
|
||||
* Author: Jake G
|
||||
* Date: 2024
|
||||
* Author: Jake G
|
||||
* Date: 2024
|
||||
* filename: zero_cross_detection.c
|
||||
* description:
|
||||
* description:
|
||||
*/
|
||||
|
||||
#include "zero_cross_detection.h"
|
||||
|
||||
#define TRIGGERVAL 512
|
||||
#define TRIGGERVAL 512
|
||||
|
||||
#ifndef UNIT_TESTING
|
||||
#include "ADC.h"
|
||||
|
@ -17,38 +17,35 @@
|
|||
|
||||
#define ZCD_PIN 0x07
|
||||
|
||||
void ZCD_Setup(void)
|
||||
{
|
||||
ADC_Init(ZCD_PIN);
|
||||
ADC_SetPin(ZCD_PIN);
|
||||
ADC_Enable();
|
||||
void ZCD_Setup(void) {
|
||||
ADC_Init(ZCD_PIN);
|
||||
ADC_SetPin(ZCD_PIN);
|
||||
ADC_Enable();
|
||||
}
|
||||
|
||||
bool ZCD_IsTriggered()
|
||||
{
|
||||
uint16_t first, second;
|
||||
ZCD_Setup();
|
||||
first = ADC_ReadValue(ZCD_PIN);
|
||||
ADC_Disable();
|
||||
|
||||
ZCD_Setup();
|
||||
second = ADC_ReadValue(ZCD_PIN);
|
||||
ADC_Disable();
|
||||
bool ZCD_IsTriggered() {
|
||||
uint16_t first, second;
|
||||
ZCD_Setup();
|
||||
first = ADC_ReadValue(ZCD_PIN);
|
||||
ADC_Disable();
|
||||
|
||||
if(second < TRIGGERVAL){
|
||||
return false;
|
||||
}
|
||||
if(second < first){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
ZCD_Setup();
|
||||
second = ADC_ReadValue(ZCD_PIN);
|
||||
ADC_Disable();
|
||||
|
||||
if (second < TRIGGERVAL) {
|
||||
return false;
|
||||
}
|
||||
if (second < first) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void ZCD_Poll(void)
|
||||
{
|
||||
while(true){
|
||||
if(ZCD_IsTriggered()){
|
||||
break;
|
||||
}
|
||||
void ZCD_Poll(void) {
|
||||
while (true) {
|
||||
if (ZCD_IsTriggered()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
* @file zero_cross_detection.h
|
||||
* @author Jake G
|
||||
* @date 16 June 2024
|
||||
* @brief File contains the zero cross detection functions
|
||||
* @brief File contains the zero cross detection functions
|
||||
*
|
||||
* This file holds all the code/functions needed to read the value of the AC
|
||||
* waveform. It uses the trigger value from the `config.h` file to evaluate the
|
||||
* state.
|
||||
*
|
||||
* This module depends on the ADC.h module to get readings from the ADC
|
||||
* This module depends on the ADC.h module to get readings from the ADC
|
||||
* hardware.
|
||||
*/
|
||||
|
||||
#ifndef ZERO_CROSS_DETECTION
|
||||
#define ZERO_CROSS_DETECTION
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @brief Zero Cross Detection Setup
|
||||
|
@ -25,25 +25,22 @@
|
|||
*
|
||||
*/
|
||||
void ZCD_Setup(void);
|
||||
//int ZCD_Setup(volatile uint8_t *ddrx, uint8_t *port, uint8_t pin);
|
||||
|
||||
// int ZCD_Setup(volatile uint8_t *ddrx, uint8_t *port, uint8_t pin);
|
||||
|
||||
/**
|
||||
* @brief Checks if ZCD should trigger on value
|
||||
*
|
||||
* The function checks for a positive edge first using the ZCD_IsPositiveEdge
|
||||
* function. If a positive edge was found, then it takes an addition set of
|
||||
* samples and averages them; only triggering(returning true) in the case
|
||||
* that the average is higher than the previous sample.
|
||||
* function. If a positive edge was found, then it takes an addition set of
|
||||
* samples and averages them; only triggering(returning true) in the case
|
||||
* that the average is higher than the previous sample.
|
||||
*/
|
||||
bool ZCD_IsTriggered(void);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Function blocks execution until ZCD is triggered.
|
||||
* @brief Function blocks execution until ZCD is triggered.
|
||||
*
|
||||
*/
|
||||
void ZCD_Poll(void);
|
||||
|
||||
|
||||
#endif //ZERO_CROSS_DETECTION
|
||||
#endif // ZERO_CROSS_DETECTION
|
||||
|
|
Loading…
Reference in New Issue