180°回転するモーターの制御をする回路です。(調光は気にせず)
180°回転したら、逆回転になって往復するような動きを目指してるのですが、逆回転にならず、angleが8の時点で止まってしまいます。
どのように改善すれば良いでしょうか
タイマ1のハンドラ内のコード内が問題の箇所です。
コード #include <avr/io.h> #include <avr/wdt.h> #include <avr/interrupt.h> #define CTOP (0.05*F_CPU/1024-1) volatile unsigned char angle = 22;//中点 volatile unsigned char flg = 0; //マクロサーボの回転角の制御 ISR(TIMER1_COMPA_vect) { unsigned char sw = (~PINC >> 4) & 3; if(angle == 8){ flg == 1; } if(angle == 36) { flg == 0; } switch (sw) { case 1: angle = flg == 0 ? (angle - 1) :(angle + 1); } OCR2A = angle << 1;//LED 調光 OCR2B = angle;//サーボ制御 } int main() { DDRB = 0x3f; DDRC = 0x0f; DDRD = 0xf8; PORTB = 0xc0; PORTC = 0xf0; PORTD = 0x07; //Timer1 TCCR1A = 0x00;// TCCR1B = 0x0d;//CTC,1/1024 OCR1A = CTOP; TIMSK1 |= _BV(OCIE1A); //Timer2 TCCR2A = 0xa3;//Toggle COM2A,B on Compare Match TCCR2B = 0x07;//Fast PWM 8bit,1/1024 sei(); for(;;) { wdt_reset(); } return 0; }