Tema: Re: Padekit pagaut bug'a (Arduino)
Autorius: Tester
Data: 2015-06-06 15:38:10
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();
> }