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(); }