O tai http://gammon.com.au/interrupts ir pvz. pasiulytas variantas neveikia (siaip idomu), nes raso, kad pertraukimai sustoja i eile juos uzdraudus ir po to vel leidus: void loop(){ noInterrupts (); .......... interrupts (); } "Audrys" <oginiekienoreikalaskokiadeze@takas.lt> wrote in message news:mkubg1$ctu$1@trimpas.omnitel.net... > jau Levo buvo pasakyta: daryt viska interrupt'o funkcijoj. > > "Laimis" wrote in message news:mkt98k$5qj$1@trimpas.omnitel.net... > > ig rašė: > >> Zodziu biski konfuze. Gal kas turi minciu ? > > Kaip jau minėjo — ISR nebaigus skaityti 2 counter'io baitų (int). Reikia > tiesiogiai išjungti interrupt'us, kad operacija būtų atomic. > Bet šiaip tai keista, kad volatile dokumentacijoje apie tai neužsiminta. > > > volatile unsigned int c = 0; // counter > volatile boolean forward = 1; // direction > > int fwdrevPin = 9; > > void setup() { > attachInterrupt(0, tacho, CHANGE); > pinMode(fwdrevPin, OUTPUT); > } > > void loop() { > cli(); > if (c > 623) { > c = 0; // Reset counter > sei(); > > forward = !forward; // Switch direction > if (forward) { > analogWrite(fwdrevPin, 140); > } > else { > int t = 128 - torque; // WTF? > analogWrite(fwdrevPin, 100); > } > } > sei(); > }