Je tento kód možné ešte nejako zoptimalizovať aby Arduino stihalo viac? Momentálne už na osciloskope vidím že nestiha ak je prerušenie 1,5kHz a viac. Nie ASM - aj keby mi to niekto napisal, neviem ako by som to do Arduina dostal. Vopred dik.
Kód: Vybrať všetko
volatile bool snimac = false;
unsigned long cas_startu_f1=0;
unsigned long dlzka_pulzu=50;
unsigned long dlzka_fazy=0;
byte f1_ON=0, f2_ON=0, f3_ON =0; // faza zapnuta
byte f4_ON=0, f5_ON=0; // faza zapnuta
void setup()
{
pinMode(2, INPUT_PULLUP);
attachInterrupt(0, zapni, FALLING); //prerusenie na pine 2
DDRC = 0b11111111;
}
void loop()
{
if (snimac==true)
{
f1_ON=true;
dlzka_fazy = ( micros() - cas_startu_f1 ) / 6;
cas_startu_f1=micros();
snimac=false;
}
if (f1_ON && ( micros() > (cas_startu_f1 + dlzka_fazy))) {PORTC = 0b00100100; f1_ON = false; f2_ON = true;}
if (f2_ON && ( micros() > (cas_startu_f1 + dlzka_fazy * 2))) {PORTC = 0b00100001; f2_ON = false; f3_ON = true;}
if (f3_ON && ( micros() > (cas_startu_f1 + dlzka_fazy * 3))) {PORTC = 0b00001001; f3_ON = false; f4_ON = true;}
if (f4_ON && ( micros() > (cas_startu_f1 + dlzka_fazy * 4))) {PORTC = 0b00011000; f4_ON = false; f5_ON = true;}
if (f5_ON && ( micros() > (cas_startu_f1 + dlzka_fazy * 5))) {PORTC = 0b00010010; f5_ON = false;}
}
void zapni()
{
PORTC = 0b00000110; //zapni fazu jedna
snimac=true;
} 


