01-06-2018, 09:02 PM
Makso,
ono sto je @gorankg rekao vezano za mehanizme prekida, govorio sam ti jos pre godinu dana. U Arduino kodove i funkcije se ne razumem, ali kod tebe ne vidim da si koristio prekidne rutine, pogotovo prekid nekog tajmera. Sam debounce algoritam je jednostavan. Ako uspes da pokrenes prekid nekog tajmera na overflow int, sam debounce je prost. Imas jednu promenljivu koju inkrementiras ako je na svaki prekid detektovana logicka nula npr., a resetujes je ako je detektovana jedinica. Ako 3-5 puta uzastopno dobijes logicku nulu, proglasavas da je ulaz stvarno aktivan. Vreme tmr-a je oko 1ms.
Ako zelis bilo kako da nastavis sa programiranjem mikrokontrolera, moras da savladas mehanizme mikrokontrolera. Glavna razlika izmedju funkcija koje koristis i mehanizama mikrokontrolera je u rasterecenju CPU-a i paralelizmu (kvazi) izvrsavanja programa. Npr. ti koristis softverski I2C, a MCU ima hardverski. Ako koristis softverski, tebi je CPU zakucan u toj rutini i nista drugo ne mozes da izvrsavas. Ako koristis hardverski, tvoj CPU ne radi nista. On samo kaze I2C modulu sta treba da uradi i slobodan je, a sam modul sve obavlja sam. Ako uz to jos povezes i prekid, onda ti CPU ide na spavanje, a budi kada se zavrsi transakcija. Zamisli sada jos 5-10 ovakvih radnji, a CPU rasterecen, jer sve rade periferije MCU-a. Tada u main-loop mozes da izvrsavas neke vremenski nekriticne zadatke. Ovako veliki broj prekida ti daje sliku paralelnog izvrsavanja vise radnji.
Debounce je pravi pokazatelj da je vreme da se krene ozbiljnije napred ili mozes da budes ogranicen upotrebom obicnog sekvencijalnog programiranja.
ono sto je @gorankg rekao vezano za mehanizme prekida, govorio sam ti jos pre godinu dana. U Arduino kodove i funkcije se ne razumem, ali kod tebe ne vidim da si koristio prekidne rutine, pogotovo prekid nekog tajmera. Sam debounce algoritam je jednostavan. Ako uspes da pokrenes prekid nekog tajmera na overflow int, sam debounce je prost. Imas jednu promenljivu koju inkrementiras ako je na svaki prekid detektovana logicka nula npr., a resetujes je ako je detektovana jedinica. Ako 3-5 puta uzastopno dobijes logicku nulu, proglasavas da je ulaz stvarno aktivan. Vreme tmr-a je oko 1ms.
Ako zelis bilo kako da nastavis sa programiranjem mikrokontrolera, moras da savladas mehanizme mikrokontrolera. Glavna razlika izmedju funkcija koje koristis i mehanizama mikrokontrolera je u rasterecenju CPU-a i paralelizmu (kvazi) izvrsavanja programa. Npr. ti koristis softverski I2C, a MCU ima hardverski. Ako koristis softverski, tebi je CPU zakucan u toj rutini i nista drugo ne mozes da izvrsavas. Ako koristis hardverski, tvoj CPU ne radi nista. On samo kaze I2C modulu sta treba da uradi i slobodan je, a sam modul sve obavlja sam. Ako uz to jos povezes i prekid, onda ti CPU ide na spavanje, a budi kada se zavrsi transakcija. Zamisli sada jos 5-10 ovakvih radnji, a CPU rasterecen, jer sve rade periferije MCU-a. Tada u main-loop mozes da izvrsavas neke vremenski nekriticne zadatke. Ovako veliki broj prekida ti daje sliku paralelnog izvrsavanja vise radnji.
Debounce je pravi pokazatelj da je vreme da se krene ozbiljnije napred ili mozes da budes ogranicen upotrebom obicnog sekvencijalnog programiranja.