stepper support
This commit is contained in:
53
src/main.c
53
src/main.c
@ -12,7 +12,11 @@
|
|||||||
#define ZERO_WIDTH_MIN 70
|
#define ZERO_WIDTH_MIN 70
|
||||||
#define ZERO_WIDTH_MAX 150
|
#define ZERO_WIDTH_MAX 150
|
||||||
|
|
||||||
#define SUB_DIV_VAL 30
|
#define SUB_DIV_LED 30
|
||||||
|
#define SUB_DIV_STEPPER 3
|
||||||
|
|
||||||
|
#define STEPS_PER_MINUTE 7
|
||||||
|
#define STEPS_PER_HOUR 3
|
||||||
|
|
||||||
|
|
||||||
typedef struct receivedData_s {
|
typedef struct receivedData_s {
|
||||||
@ -40,6 +44,8 @@ typedef struct clock_s {
|
|||||||
uint8_t weekday;
|
uint8_t weekday;
|
||||||
uint8_t month;
|
uint8_t month;
|
||||||
uint8_t year;
|
uint8_t year;
|
||||||
|
uint8_t minuteStepPosition;
|
||||||
|
uint8_t hourStepPosition;
|
||||||
} clock_t;
|
} clock_t;
|
||||||
|
|
||||||
typedef struct opTime_s {
|
typedef struct opTime_s {
|
||||||
@ -58,8 +64,11 @@ volatile uint16_t captValue = 0;
|
|||||||
volatile uint16_t gapValue = 0;
|
volatile uint16_t gapValue = 0;
|
||||||
volatile uint8_t valid = 0;
|
volatile uint8_t valid = 0;
|
||||||
volatile uint8_t tack = 0;
|
volatile uint8_t tack = 0;
|
||||||
|
volatile uint8_t step = 0;
|
||||||
|
|
||||||
ISR(TIMER2_OVF_vect) {
|
ISR(TIMER2_OVF_vect) {
|
||||||
|
cli();
|
||||||
|
|
||||||
clock.second++;
|
clock.second++;
|
||||||
|
|
||||||
if (valid != 2) {
|
if (valid != 2) {
|
||||||
@ -76,6 +85,7 @@ ISR(TIMER2_OVF_vect) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sei();
|
||||||
|
|
||||||
opTime.second++;
|
opTime.second++;
|
||||||
|
|
||||||
@ -104,12 +114,18 @@ ISR(INT1_vect) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ISR(TIMER0_OVF_vect) {
|
ISR(TIMER0_OVF_vect) {
|
||||||
static uint16_t subDiv = 0;
|
static uint8_t subDivTack = 0;
|
||||||
subDiv++;
|
subDivTack++;
|
||||||
if (subDiv >= SUB_DIV_VAL) {
|
if (subDivTack >= SUB_DIV_LED) {
|
||||||
subDiv = 0;
|
subDivTack = 0;
|
||||||
tack = 1;
|
tack = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8_t subDivStepper = 0;
|
||||||
|
subDivStepper++;
|
||||||
|
if (subDivStepper >= SUB_DIV_STEPPER) {
|
||||||
|
subDivStepper = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -118,6 +134,8 @@ int main() {
|
|||||||
clock.hour = 0;
|
clock.hour = 0;
|
||||||
clock.minute = 0;
|
clock.minute = 0;
|
||||||
clock.second = 0;
|
clock.second = 0;
|
||||||
|
clock.minuteStepPosition = 0;
|
||||||
|
clock.hourStepPosition = 0;
|
||||||
|
|
||||||
opTime.hour = 0;
|
opTime.hour = 0;
|
||||||
opTime.minute = 0;
|
opTime.minute = 0;
|
||||||
@ -466,6 +484,9 @@ int main() {
|
|||||||
clock.month = rd.monthDigit0 + rd.monthDigit1 * 10;
|
clock.month = rd.monthDigit0 + rd.monthDigit1 * 10;
|
||||||
clock.year = rd.yearDigit0 + rd.yearDigit1 * 10;
|
clock.year = rd.yearDigit0 + rd.yearDigit1 * 10;
|
||||||
|
|
||||||
|
clock.minuteStepPosition = clock.minute * STEPS_PER_MINUTE;
|
||||||
|
clock.hourStepPosition = clock.hour * STEPS_PER_HOUR;
|
||||||
|
|
||||||
valid = 2;
|
valid = 2;
|
||||||
timeValidCnt++;
|
timeValidCnt++;
|
||||||
}
|
}
|
||||||
@ -502,6 +523,28 @@ int main() {
|
|||||||
printf("POS: %02d\n", positionSwitch);
|
printf("POS: %02d\n", positionSwitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8_t currentMinutePosition = 0;
|
||||||
|
static uint8_t currentHourPosition = 0;
|
||||||
|
if (step != 0) {
|
||||||
|
step = 0;
|
||||||
|
if (currentMinutePosition != clock.minuteStepPosition) {
|
||||||
|
printf("Minute: ");
|
||||||
|
if (currentMinutePosition > clock.minuteStepPosition) {
|
||||||
|
printf("steps backward, ");
|
||||||
|
}
|
||||||
|
currentMinutePosition++;
|
||||||
|
printf("desired: %d, current: %d\n", clock.minuteStepPosition, currentMinutePosition);
|
||||||
|
}
|
||||||
|
if (currentHourPosition != clock.hourStepPosition) {
|
||||||
|
printf("Hour: ");
|
||||||
|
if (currentHourPosition > clock.hourStepPosition) {
|
||||||
|
printf("steps backward, ");
|
||||||
|
}
|
||||||
|
currentHourPosition++;
|
||||||
|
printf("desired: %d, current: %d\n", clock.hourStepPosition, currentHourPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (tack != 0) {
|
if (tack != 0) {
|
||||||
tack = 0;
|
tack = 0;
|
||||||
switch (valid) {
|
switch (valid) {
|
||||||
|
Reference in New Issue
Block a user