summaryrefslogtreecommitdiff
path: root/tube-rotator
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2014-05-20 02:43:59 +0200
committerChristian Pointner <equinox@spreadspace.org>2014-05-20 02:43:59 +0200
commitfbc7b65a6ef8e43378bb03fe64bfe1b5b2735434 (patch)
treec197142db5c58a0f5c8fa81a1de8edfed734a564 /tube-rotator
parentspeed is actually reversed (diff)
added new speeds
make access to target_speed atomic
Diffstat (limited to 'tube-rotator')
-rw-r--r--tube-rotator/stepper.c28
-rw-r--r--tube-rotator/stepper.h18
-rw-r--r--tube-rotator/tube-rotator.c12
3 files changed, 40 insertions, 18 deletions
diff --git a/tube-rotator/stepper.c b/tube-rotator/stepper.c
index 675be26..064db5a 100644
--- a/tube-rotator/stepper.c
+++ b/tube-rotator/stepper.c
@@ -22,6 +22,7 @@
#include <avr/sfr_defs.h>
#include <avr/interrupt.h>
+#include <util/atomic.h>
#include "stepper.h"
@@ -45,7 +46,7 @@ uint8_t step_table [] =
#define LENGTH_STEP_TABLE (sizeof(step_table)/sizeof(uint8_t))
#define STEPPER_OUTPUT_BITMASK (~(0xF << STEPPER_FIRST_BIT ))
-uint16_t target_speed;
+volatile uint16_t target_speed;
uint16_t current_speed;
void stepper_init(void)
@@ -84,10 +85,12 @@ static inline void stepper_handle(void)
step_idx++;
step_idx %= LENGTH_STEP_TABLE;
- if(current_speed > target_speed)
- OCR1A = --current_speed;
- else if(current_speed < target_speed)
- OCR1A = ++current_speed;
+ if(step_idx != 0 && step_idx % 8) {
+ if(current_speed > target_speed)
+ OCR1A = --current_speed;
+ else if(current_speed < target_speed)
+ OCR1A = ++current_speed;
+ }
}
ISR(TIMER1_COMPA_vect)
@@ -97,18 +100,25 @@ ISR(TIMER1_COMPA_vect)
void stepper_set_speed(uint16_t new_speed)
{
- if(new_speed <= STEPPER_SPEED_MIN && new_speed >= STEPPER_SPEED_MAX)
- target_speed = new_speed;
+ if(new_speed <= STEPPER_SPEED_MIN && new_speed >= STEPPER_SPEED_MAX) {
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ target_speed = new_speed;
+ }
+ }
}
void stepper_inc_speed(void)
{
- target_speed = (target_speed <= STEPPER_SPEED_MAX) ? STEPPER_SPEED_MAX : target_speed - 1;
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ target_speed = (target_speed <= STEPPER_SPEED_MAX) ? STEPPER_SPEED_MAX : target_speed - 1;
+ }
}
void stepper_dec_speed(void)
{
- target_speed = (target_speed >= STEPPER_SPEED_MIN) ? STEPPER_SPEED_MIN : target_speed + 1;
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ target_speed = (target_speed >= STEPPER_SPEED_MIN) ? STEPPER_SPEED_MIN : target_speed + 1;
+ }
}
uint16_t stepper_get_speed(void)
diff --git a/tube-rotator/stepper.h b/tube-rotator/stepper.h
index 5b236b9..8412782 100644
--- a/tube-rotator/stepper.h
+++ b/tube-rotator/stepper.h
@@ -23,14 +23,20 @@
#ifndef R3TUBE_stepper_h_INCLUDED
#define R3TUBE_stepper_h_INCLUDED
-#define STEPPER_SPEED_MIN 500
-#define STEPPER_SPEED_MAX 80
+#define STEPPER_SPEED_MIN 1000
+#define STEPPER_SPEED_MAX 150
-#define STEPPER_SPEED_60RPM 311
-#define STEPPER_SPEED_120RPM 155
-#define STEPPER_SPEED_180RPM 103
+#define STEPPER_SPEED_20RPM 936
+#define STEPPER_SPEED_30RPM 624
+#define STEPPER_SPEED_40RPM 468
+#define STEPPER_SPEED_50RPM 374
+#define STEPPER_SPEED_60RPM 312
+#define STEPPER_SPEED_70RPM 267
+#define STEPPER_SPEED_80RPM 233
+#define STEPPER_SPEED_90RPM 207
+#define STEPPER_SPEED_100RPM 187
-#define STEPPER_SPEED_DEFAULT STEPPER_SPEED_120RPM
+#define STEPPER_SPEED_DEFAULT STEPPER_SPEED_60RPM
void stepper_init(void);
void stepper_start(void);
diff --git a/tube-rotator/tube-rotator.c b/tube-rotator/tube-rotator.c
index e1c84ce..dbce87e 100644
--- a/tube-rotator/tube-rotator.c
+++ b/tube-rotator/tube-rotator.c
@@ -42,9 +42,15 @@ void handle_cmd(uint8_t cmd)
case 's': stepper_stop(); led_off(); break;
case '+': stepper_inc_speed(); break;
case '-': stepper_dec_speed(); break;
- case '1': stepper_set_speed(STEPPER_SPEED_60RPM); break;
- case '2': stepper_set_speed(STEPPER_SPEED_120RPM); break;
- case '3': stepper_set_speed(STEPPER_SPEED_180RPM); break;
+ case '2': stepper_set_speed(STEPPER_SPEED_20RPM); break;
+ case '3': stepper_set_speed(STEPPER_SPEED_30RPM); break;
+ case '4': stepper_set_speed(STEPPER_SPEED_40RPM); break;
+ case '5': stepper_set_speed(STEPPER_SPEED_50RPM); break;
+ case '6': stepper_set_speed(STEPPER_SPEED_60RPM); break;
+ case '7': stepper_set_speed(STEPPER_SPEED_70RPM); break;
+ case '8': stepper_set_speed(STEPPER_SPEED_80RPM); break;
+ case '9': stepper_set_speed(STEPPER_SPEED_90RPM); break;
+ case '0': stepper_set_speed(STEPPER_SPEED_100RPM); break;
default: printf("Error(cmd): unknown command %02X '%c'\r\n", cmd, cmd); return;
}
printf("current speed: %4d \r", stepper_get_speed());