mirror of
https://github.com/caperren/school_archives.git
synced 2025-11-09 21:51:15 +00:00
These are all design documents that I thought I had lost. It's may make me cringe, but it's still cool to use it to see how far I've come.
310 lines
6.8 KiB
C
310 lines
6.8 KiB
C
/*
|
|
* TimerCounterFunctionsAndISR.h
|
|
*
|
|
* Created: 8/12/2014 3:56:59 PM
|
|
* Author: corwin
|
|
*/
|
|
|
|
|
|
#ifndef TIMERCOUNTERFUNCTIONSANDISR_H_
|
|
#define TIMERCOUNTERFUNCTIONSANDISR_H_
|
|
#include "DefinesAndMacros.h"
|
|
#include "Steppers.h"
|
|
#include "SystemInputFunctions.h"
|
|
#include <stdlib.h>
|
|
|
|
volatile long int CurrentTime = 0, PreviousTime = 0;
|
|
volatile char secondCounter = 0;
|
|
|
|
ISR(RTC_OVF_vect)
|
|
{
|
|
secondCounter++;
|
|
if(secondCounter >= 100){
|
|
CurrentTime++;
|
|
if(CurrentTime == 0){
|
|
PreviousTime = 0;
|
|
}
|
|
secondCounter = 0;
|
|
}
|
|
|
|
if((secondCounter % 25) == 0){
|
|
RDY_LED_TGL();
|
|
}
|
|
|
|
}
|
|
|
|
ISR(TCC0_OVF_vect){
|
|
static double desiredPositionPrevious = 0, currentPosition = 0;
|
|
static double middlePosition = 0, middleOffset = 0, maxDiff = 0, scalar = 0;
|
|
static double axisDiff = 0;
|
|
static char doneOnce = FALSE;
|
|
|
|
|
|
|
|
if(XAxis.shouldMove && steppersEnabled){
|
|
currentPosition = getAxisPosition(&XAxis);
|
|
|
|
if(doneOnce == FALSE){
|
|
desiredPositionPrevious = currentPosition;
|
|
middlePosition = (((XAxis.desiredPosition-desiredPositionPrevious)/2) + desiredPositionPrevious);
|
|
maxDiff = abs(middlePosition - desiredPositionPrevious);
|
|
doneOnce = TRUE;
|
|
}
|
|
|
|
axisDiff = (XAxis.desiredPosition - currentPosition);
|
|
if(XAxis.inManualMode == TRUE){
|
|
TCC0.PER = 14336;
|
|
}else{
|
|
middleOffset = abs(middlePosition - currentPosition);
|
|
if(middleOffset >= (((double)7*maxDiff)/10)){
|
|
double ratio = (maxDiff - (((double)7*maxDiff)/10));
|
|
double prescalar = (ratio-((double)maxDiff-middleOffset));
|
|
scalar = ((prescalar*10000)/ratio);
|
|
TCC0.PER = 5500+(int)scalar;
|
|
}
|
|
}
|
|
|
|
if(abs(axisDiff) <= XAxis.acceptableError){
|
|
XAxis.shouldMove = FALSE;
|
|
doneOnce = FALSE;
|
|
}else if(axisDiff > 0){
|
|
X_DIR_SET();
|
|
_delay_us(2);
|
|
X_STEP_SET();
|
|
_delay_us(2);
|
|
X_STEP_CLR();
|
|
XAxis.steps++;
|
|
}else if(axisDiff < 0){
|
|
if(X_LIM_LEFT_GET()){
|
|
X_DIR_CLR();
|
|
_delay_us(2);
|
|
X_STEP_SET();
|
|
_delay_us(2);
|
|
X_STEP_CLR();
|
|
XAxis.steps--;
|
|
}else{
|
|
XAxis.steps = 0;
|
|
}
|
|
}else{
|
|
ERR_LED_SET();
|
|
while(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
ISR(TCD0_OVF_vect){
|
|
static double desiredPositionPrevious = 0, currentPosition = 0;
|
|
static double middlePosition = 0, middleOffset = 0, maxDiff = 0, scalar = 0;
|
|
static double axisDiff = 0;
|
|
static char doneOnce = FALSE;
|
|
|
|
|
|
|
|
if(YAxis.shouldMove && steppersEnabled){
|
|
currentPosition = getAxisPosition(&YAxis);
|
|
|
|
if(doneOnce == FALSE){
|
|
desiredPositionPrevious = currentPosition;
|
|
middlePosition = (((YAxis.desiredPosition-desiredPositionPrevious)/2) + desiredPositionPrevious);
|
|
maxDiff = abs(middlePosition - desiredPositionPrevious);
|
|
doneOnce = TRUE;
|
|
}
|
|
|
|
axisDiff = (YAxis.desiredPosition - currentPosition);
|
|
if(YAxis.inManualMode == TRUE){
|
|
TCD0.PER = 10752;
|
|
}else{
|
|
middleOffset = abs(middlePosition - currentPosition);
|
|
if(middleOffset >= (((double)7*maxDiff)/10)){
|
|
double ratio = (maxDiff - (((double)7*maxDiff)/10));
|
|
double prescalar = (ratio-((double)maxDiff-middleOffset));
|
|
scalar = ((prescalar*10000)/ratio);
|
|
TCD0.PER = 5500+(int)scalar;
|
|
}
|
|
}
|
|
|
|
if(abs(axisDiff) <= YAxis.acceptableError){
|
|
YAxis.shouldMove = FALSE;
|
|
doneOnce = FALSE;
|
|
}else if(axisDiff > 0){
|
|
Y_DIR_CLR();
|
|
_delay_us(2);
|
|
Y_STEP_SET();
|
|
_delay_us(2);
|
|
Y_STEP_CLR();
|
|
YAxis.steps++;
|
|
}else if(axisDiff < 0){
|
|
if(Y_LIM_FORW_GET()){
|
|
Y_DIR_SET();
|
|
_delay_us(2);
|
|
Y_STEP_SET();
|
|
_delay_us(2);
|
|
Y_STEP_CLR();
|
|
YAxis.steps--;
|
|
}else{
|
|
YAxis.steps = 0;
|
|
}
|
|
}else{
|
|
ERR_LED_SET();
|
|
while(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
ISR(TCE0_OVF_vect){
|
|
static double desiredPositionPrevious = 0, currentPosition = 0;
|
|
static double middlePosition = 0, middleOffset = 0, maxDiff = 0, scalar = 0;
|
|
static double axisDiff = 0;
|
|
static char doneOnce = FALSE;
|
|
|
|
|
|
|
|
if(ZAxis.shouldMove && steppersEnabled){
|
|
currentPosition = getAxisPosition(&ZAxis);
|
|
|
|
if(doneOnce == FALSE){
|
|
desiredPositionPrevious = currentPosition;
|
|
middlePosition = (((ZAxis.desiredPosition-desiredPositionPrevious)/2) + desiredPositionPrevious);
|
|
maxDiff = abs(middlePosition - desiredPositionPrevious);
|
|
doneOnce = TRUE;
|
|
}
|
|
|
|
axisDiff = (ZAxis.desiredPosition - currentPosition);
|
|
if(ZAxis.inManualMode == TRUE){
|
|
TCE0.PER = 10752;
|
|
}else{
|
|
middleOffset = abs(middlePosition - currentPosition);
|
|
if(middleOffset >= (((double)7*maxDiff)/10)){
|
|
double ratio = (maxDiff - (((double)7*maxDiff)/10));
|
|
double prescalar = (ratio-((double)maxDiff-middleOffset));
|
|
scalar = ((prescalar*4608)/ratio);
|
|
TCE0.PER = 2304+(int)scalar;
|
|
}
|
|
}
|
|
|
|
if(abs(axisDiff) <= ZAxis.acceptableError){
|
|
ZAxis.shouldMove = FALSE;
|
|
doneOnce = FALSE;
|
|
}else if(axisDiff > 0){
|
|
Z_DIR_CLR();
|
|
_delay_us(2);
|
|
Z_STEP_SET();
|
|
_delay_us(2);
|
|
Z_STEP_CLR();
|
|
ZAxis.steps++;
|
|
}else if(axisDiff < 0){
|
|
Z_DIR_SET();
|
|
_delay_us(2);
|
|
Z_STEP_SET();
|
|
_delay_us(2);
|
|
Z_STEP_CLR();
|
|
ZAxis.steps--;
|
|
}else{
|
|
ERR_LED_SET();
|
|
while(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
ISR(TCF0_OVF_vect){
|
|
static double desiredPositionPrevious = 0, currentPosition = 0;
|
|
static double middlePosition = 0, middleOffset = 0, maxDiff = 0, scalar = 0;
|
|
static double axisDiff = 0;
|
|
static char doneOnce = FALSE;
|
|
|
|
|
|
if(AAxis.shouldMove){
|
|
currentPosition = getAxisPosition(&AAxis);
|
|
|
|
if(doneOnce == FALSE){
|
|
desiredPositionPrevious = currentPosition;
|
|
middlePosition = (((AAxis.desiredPosition-desiredPositionPrevious)/2) + desiredPositionPrevious);
|
|
maxDiff = abs(middlePosition - desiredPositionPrevious);
|
|
doneOnce = TRUE;
|
|
}
|
|
|
|
axisDiff = (AAxis.desiredPosition - currentPosition);
|
|
if(AAxis.inManualMode == TRUE){
|
|
TCF0.PER = 10752;
|
|
}else{
|
|
middleOffset = abs(middlePosition - currentPosition);
|
|
scalar = (middleOffset*9216/maxDiff);
|
|
TCF0.PER = 4608+(int)scalar;
|
|
}
|
|
|
|
if(abs(axisDiff) <= AAxis.acceptableError){
|
|
AAxis.shouldMove = FALSE;
|
|
doneOnce = FALSE;
|
|
}else if(axisDiff > 0){
|
|
A_DIR_SET();
|
|
_delay_us(2);
|
|
A_STEP_SET();
|
|
_delay_us(2);
|
|
A_STEP_CLR();
|
|
AAxis.steps++;
|
|
}else if(axisDiff < 0){
|
|
A_DIR_CLR();
|
|
_delay_us(2);
|
|
A_STEP_SET();
|
|
_delay_us(2);
|
|
A_STEP_CLR();
|
|
AAxis.steps--;
|
|
}else{
|
|
ERR_LED_SET();
|
|
while(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
ISR(USARTC0_RXC_vect){
|
|
USART_RXComplete(&usartData);
|
|
}
|
|
|
|
|
|
ISR(USARTC0_DRE_vect){
|
|
USART_DataRegEmpty(&usartData);
|
|
}
|
|
|
|
ISR(PORTB_INT0_vect){
|
|
static long int debounceTimePrevious;
|
|
|
|
if((CurrentTime - debounceTimePrevious) > 1){
|
|
if(!SYS_HOME_GET()){
|
|
btnState.homePressed = TRUE;
|
|
}
|
|
|
|
if(!SYS_CAL_GET()){
|
|
btnState.calibratePressed = TRUE;
|
|
}
|
|
|
|
if(!SYS_START_GET()){
|
|
btnState.startPressed = TRUE;
|
|
}
|
|
debounceTimePrevious = CurrentTime;
|
|
}
|
|
}
|
|
|
|
ISR(PORTF_INT0_vect){
|
|
static long int debounceTimePrevious;
|
|
|
|
if((CurrentTime - debounceTimePrevious) > 1){
|
|
|
|
if(!ESTOP_GET()){
|
|
disableSteppers();
|
|
ERR_LED_SET();
|
|
|
|
_delay_ms(5000);
|
|
|
|
CCP = CCP_IOREG_gc;
|
|
RST.CTRL = RST_SWRST_bm;
|
|
}
|
|
|
|
debounceTimePrevious = CurrentTime;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#endif /* TIMERCOUNTERFUNCTIONSANDISR_H_ */ |