summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/safe_numerics/example/motor_test3.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/boost/libs/safe_numerics/example/motor_test3.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/boost/libs/safe_numerics/example/motor_test3.c b/src/boost/libs/safe_numerics/example/motor_test3.c
new file mode 100644
index 000000000..0ef5a0227
--- /dev/null
+++ b/src/boost/libs/safe_numerics/example/motor_test3.c
@@ -0,0 +1,58 @@
+/*
+ * david austin
+ * http://www.embedded.com/design/mcus-processors-and-socs/4006438/Generate-stepper-motor-speed-profiles-in-real-time
+ * DECEMBER 30, 2004
+ *
+ * Demo program for stepper motor control with linear ramps
+ * Hardware: PIC18F252, L6219
+ *
+ * Compile with on Microchip XC8 compiler with the command line:
+ * XC8 --chip=18F252 motor_test3.c
+ *
+ * Copyright (c) 2015 Robert Ramey
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#include <xc.h>
+
+// 8 MHz internal clock
+#define _XTAL_FREQ 8000000
+
+#include <stdint.h>
+#include <stdbool.h> /* For true/false definition */
+
+// ***************************
+// nullify macro for literals
+#define literal(n) n
+
+// ***************************
+// map strong types to appropriate underlying types.
+typedef uint16_t position_t;
+typedef int16_t step_t;
+typedef uint32_t ccpr_t;
+typedef int32_t c_t;
+typedef uint16_t phase_t;
+typedef uint8_t phase_ix_t;
+typedef int8_t direction_t;
+
+// 1st step=10ms; max speed=300rpm (based on 1MHz timer, 1.8deg steps)
+#define C_MIN literal((1000 << 8))
+#define C0 literal((10000 << 8))
+
+#include "motor3.c"
+
+void main() {
+ initialize();
+ // move motor to position 200
+ motor_run(200);
+ while(busy()) __delay_ms(100);
+ // move motor to position 1000
+ motor_run(1000);
+ while(busy()) __delay_ms(100);
+ // move back to position 0
+ motor_run(200);
+ while(busy()) __delay_ms(100);
+} // main()