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