From c56eb174de6fdc68122108e32a987a8fc9f41fd8 Mon Sep 17 00:00:00 2001 From: wolfgang Date: Wed, 23 Jan 2013 09:45:33 +0100 Subject: [PATCH] stepper support --- src/main.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/src/main.c b/src/main.c index 407e4f5..4a9db66 100644 --- a/src/main.c +++ b/src/main.c @@ -12,7 +12,11 @@ #define ZERO_WIDTH_MIN 70 #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 { @@ -40,6 +44,8 @@ typedef struct clock_s { uint8_t weekday; uint8_t month; uint8_t year; + uint8_t minuteStepPosition; + uint8_t hourStepPosition; } clock_t; typedef struct opTime_s { @@ -58,8 +64,11 @@ volatile uint16_t captValue = 0; volatile uint16_t gapValue = 0; volatile uint8_t valid = 0; volatile uint8_t tack = 0; +volatile uint8_t step = 0; ISR(TIMER2_OVF_vect) { + cli(); + clock.second++; if (valid != 2) { @@ -76,6 +85,7 @@ ISR(TIMER2_OVF_vect) { } } + sei(); opTime.second++; @@ -104,12 +114,18 @@ ISR(INT1_vect) { } ISR(TIMER0_OVF_vect) { - static uint16_t subDiv = 0; - subDiv++; - if (subDiv >= SUB_DIV_VAL) { - subDiv = 0; + static uint8_t subDivTack = 0; + subDivTack++; + if (subDivTack >= SUB_DIV_LED) { + subDivTack = 0; tack = 1; } + + static uint8_t subDivStepper = 0; + subDivStepper++; + if (subDivStepper >= SUB_DIV_STEPPER) { + subDivStepper = 0; + } } int main() { @@ -118,6 +134,8 @@ int main() { clock.hour = 0; clock.minute = 0; clock.second = 0; + clock.minuteStepPosition = 0; + clock.hourStepPosition = 0; opTime.hour = 0; opTime.minute = 0; @@ -466,6 +484,9 @@ int main() { clock.month = rd.monthDigit0 + rd.monthDigit1 * 10; clock.year = rd.yearDigit0 + rd.yearDigit1 * 10; + clock.minuteStepPosition = clock.minute * STEPS_PER_MINUTE; + clock.hourStepPosition = clock.hour * STEPS_PER_HOUR; + valid = 2; timeValidCnt++; } @@ -502,6 +523,28 @@ int main() { 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) { tack = 0; switch (valid) {