2
#include <tiny_ostream.h>
5
#include <drivers/servo.h>
10
using namespace Mcucpp;
23
typedef basic_ostream<UsartOut> ostream;
28
typedef Timers::Timer7 ServoTimer;
29
typedef IO::PinList<IO::Pb8, IO::Pb9, IO::Pb7> ServoPins;
30
Servo<ServoPins, ServoTimer> servo;
32
const int ServoTable[] = {
33
128, 134, 140, 146, 153, 159, 165, 171,
34
177, 183, 188, 194, 199, 204, 209, 214,
35
219, 223, 227, 231, 234, 238, 241, 243,
36
246, 248, 250, 251, 253, 254, 254, 254,
37
254, 254, 253, 252, 251, 250, 248, 245,
38
243, 240, 237, 234, 230, 226, 222, 218,
39
213, 208, 204, 198, 193, 187, 182, 176,
40
170, 164, 158, 152, 145, 139, 133, 126,
41
120, 114, 107, 101, 95, 89, 83, 77,
42
71, 66, 60, 55, 50, 45, 40, 36,
43
31, 27, 24, 20, 17, 14, 11, 9,
44
7, 5, 3, 2, 1, 1, 1, 1,
45
1, 2, 3, 4, 6, 8, 10, 12,
46
15, 18, 22, 25, 29, 34, 38, 43,
47
47, 52, 58, 63, 68, 74, 80, 86,
48
92, 98, 104, 111, 117, 123
51
static const int Elements = sizeof(ServoTable) / sizeof(ServoTable[0]);
55
Clock::SysClock::SetClockFreq(24000000);
63
Led::SetConfiguration(IO::NativePortBase::Out);
64
IO::Pc9::SetConfiguration(IO::NativePortBase::Out);
65
Btn::SetConfiguration(IO::NativePortBase::In);
66
Btn::SetPullUp(IO::NativePortBase::PullUp);
71
Usart::SelectTxRxPins(0, 0);
74
cout << "Hello, world!\r\n";
75
cout << "Clock = " << Clock::SysClock::ClockFreq() << "\r\n";
79
servo.UpdateTimings();
81
cout << "servo._pulseDivider = " << servo._pulseDivider << "\r\n";
82
cout << "servo._pulseMaxReload = " << servo._pulseMaxTicks << "\r\n";
83
cout << "servo._pulseMinReload = " << servo._pulseMinTicks << "\r\n";
84
cout << "servo._pauseDivider = " << servo._pauseDivider << "\r\n";
85
cout << "servo._pauseReload = " << servo._pauseTicks << "\r\n";
88
ServoTimer::EnableInterrupt(ServoTimer::OverflowInt);
90
int pos = 0, prev = 0;
96
servo.SetPosition(2, 0);
100
servo.SetPosition(2, 255);
102
delay_ms<20, 24000000>();
104
servo.SetPosition(0, (ServoTable[pos] + ServoTable[prev]) / 2);
106
delay_ms<20, 24000000>();
107
servo.SetPosition(0, ServoTable[pos]);
109
servo.SetPosition(1, 0);
119
extern "C" MCUCPP_INTERRUPT(TIM7_IRQHandler)
121
ServoTimer::ClearInterruptFlag();
122
servo.TimerHandler();
123
ServoTimer::EnableInterrupt(ServoTimer::OverflowInt);