From 1752f5a0a1501edd821db79da022c5365abccf31 Mon Sep 17 00:00:00 2001 From: Jan-Philipp Warmers Date: Sat, 14 Jun 2014 12:34:03 +0200 Subject: [PATCH] flapping servo workaround, ugly ass hell, do not use as example --- .../displayboard_servo/software/src/main.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/schaltungen/displayboard_servo/software/src/main.c b/schaltungen/displayboard_servo/software/src/main.c index 051907a..18eb5e8 100644 --- a/schaltungen/displayboard_servo/software/src/main.c +++ b/schaltungen/displayboard_servo/software/src/main.c @@ -14,6 +14,8 @@ #define BUFSIZE 10 +#define DEBUG2 + volatile uint16_t syscounter = 0; volatile uint16_t power; uint8_t data_count = 0; @@ -92,6 +94,7 @@ static void work_uart() { * \param display The power value from 0 to 400 (including bounds) */ void set_servo(uint16_t display) { + int diff; if( display > POWER_MAX ) display = POWER_MAX; @@ -121,7 +124,18 @@ void set_servo(uint16_t display) { //cli(); // read and write atomic TIMSK &= ~(_BV(OCIE1A)); - OCR1A = 2500-display; + diff = OCR1A - (2500-display); + if(diff <=20 && diff >= -20) { + OCR1A = 2500-display; + } + else { + if(diff <=20) { + OCR1A = OCR1A+5; + } + else if ( diff >= -20 ) { + OCR1A = OCR1A-5; + } + } //sei(); TIMSK |= _BV(OCIE1A); }