stepper support

This commit is contained in:
wolfgang
2013-01-23 09:45:33 +01:00
parent 0e4f534720
commit c56eb174de

View File

@ -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) {