Заплюхался в портах

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Собственно описание ниже

Kakmyc
Offline
Зарегистрирован: 15.01.2018

В общем, пока писал описание проблемы, понял где ошибка.

Объясню суть, решил машинку запилить ребенку на колесах меканум.

Ну и понадобился независимый ШИМ на 8 пинах.

Написал вот это.

Но не мог въехать почему при значении 0, у меня нога дрыгается на 4мкс.

В общем то из за <=

#include <avr/interrupt.h>
volatile byte count=0;
byte pwm0=0;
byte pwm1=100;
byte pwm2=200;
byte pwm3=255;

ISR(TIMER2_COMPA_vect){
    count<=pwm0?PORTB|=1:PORTB&=~1;
    count<=pwm1?PORTB|=2:PORTB&=~2;
    count<=pwm2?PORTB|=4:PORTB&=~4;
    count<=pwm3?PORTB|=8:PORTB&=~8;
    count++;
}

void setup(){
    DDRB|=0x1111;
    TCCR2B=0;
    TCCR2B|=(1<<CS20);
    TCCR2A=0;
    TCCR2A|=(1<<WGM21);
    TIMSK2|=(1<<OCIE2A);
    OCR2A=127;
    PORTB=0;
}

void loop(){

}

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Теперь дилемма:

Упростить условие убрав "=", но тогда при максимальном значении провал , или же написать :

pwm0&&count<=pwm0?PORTB|=1:PORTB&=~1;

 

 

Но тогда время обработки значений увеличивается

 

nik182
Offline
Зарегистрирован: 04.05.2015

Вы не дописали слово микросекунду.