Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Revision 1:581901598cda, committed 2019-12-02
- Comitter:
- f3d
- Date:
- Mon Dec 02 12:13:04 2019 +0000
- Parent:
- 0:88449c646fbd
- Commit message:
- Added speed-up/slow-down code
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Mar 26 17:33:53 2019 +0000
+++ b/main.cpp Mon Dec 02 12:13:04 2019 +0000
@@ -8,21 +8,27 @@
// Using the MBED libraries to configure the PWM outputs (its easier than
// calculating all of the register contents by hand)
-DigitalOut myled(LED1);
PwmOut PhaATop(PA_8);
PwmOut PhaBTop(PA_9);
PwmOut PhaCTop(PA_10);
PwmOut PhaABottom(PA_7);
PwmOut PhaBBottom(PB_0);
PwmOut PhaCBottom(PB_1);
+DigitalIn Slow(D4);
+DigitalIn Fast(D5);
+DigitalOut myled(LED1);
+#define MAX_DELTA 500
+volatile int Delta=0;
int AIndex=0;
int BIndex=90;
int CIndex=180;
void TimerISR(void)
{
- TIM1->CCR1 = sine_table[AIndex];
- TIM1->CCR2 = sine_table[BIndex];
- TIM1->CCR3 = sine_table[CIndex];
+ TIM1->ARR = 270+Delta;
+ int Offset=Delta/2;
+ TIM1->CCR1 = sine_table[AIndex]+Offset;
+ TIM1->CCR2 = sine_table[BIndex]+Offset;
+ TIM1->CCR3 = sine_table[CIndex]+Offset;
AIndex++;
if (AIndex >= PWM_STEPS)
AIndex = 0;
@@ -46,8 +52,9 @@
TIM1->CCR1 = 135; // 50% duty
TIM1->CCR2 = 135; // 50% duty
TIM1->CCR3 = 135; // 50% duty
- // Enable complimentary outputs on channels 1 to 3
- TIM1->CCER = (1 << 0) + (1 << 2) + (1 << 4) + (1 << 6) + (1 << 8) + (1<<10);
+ //// Enable complimentary outputs on channels 1 to 3
+ //TIM1->CCER = (1 << 0) + (1 << 2) + (1 << 4) + (1 << 6) + (1 << 8) + (1<<10);
+ TIM1->CCER = (1 << 0) + (1 << 4) + (1 << 8);
TIM1->SR = 0; // Clear flags.
//TIM1->BDTR &= ~(0xff);
//TIM1->BDTR |= (127); // set dead time to 127 clock cycles
@@ -55,7 +62,7 @@
TIM1->DIER = 1; // Want update interrupt
NVIC_SetVector(TIM1_UP_TIM16_IRQn,(uint32_t) TimerISR);
NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn);
- __enable_irq(); // enable interrupts */
+ __enable_irq(); // enable interrupts
TIM1->CR1 |= 1; // enable counter
}
@@ -63,6 +70,33 @@
int main() {
initTimer1();
while(1) {
-
+
+ if ( (Slow == 0) || (Fast == 0) )
+ {
+ // user pressed a button so light up an LED
+ myled = 1;
+ if (Slow == 0)
+ {
+ int NextDelta = Delta;
+ NextDelta = NextDelta + 10;
+ if (NextDelta > MAX_DELTA)
+ NextDelta = MAX_DELTA;
+ Delta = NextDelta;
+ }
+ if (Fast == 0)
+ {
+ int NextDelta = Delta;
+ NextDelta = NextDelta - 10;
+ if (NextDelta < 0)
+ NextDelta = 0;
+ Delta = NextDelta;
+ }
+
+ }
+ else
+ {
+ myled = 0;
+ }
+ wait(0.1); // slow down loop to avoid bounces
}
}