03-05-2017, 01:42 PM
Nebojsa je objasnio kako to uraditi sa tajmerima, evo jos jedan primer blinkanja LED ali bez upotrebe tajmera i blokirajucih petlji:
Primer je abstraktan (za Arduino) ali samo da pokazem koncept.
Dakle u glavnoj petlji koja vrti nas progam imamo jedan brojac koji inkrementujemo svaki put kada program tu prodje, kada se stigne do 65536 program tu promenljivu vraca na 0.
U tom trenutlu kada smo stigli do max vrednosti se izvrsi toggleLED() funkcija (pali/gasi LED), nema blokirajuceg code-a, nista se ne ceka jednostavno svaki 65636-ti put prolaza toglujemo LED.
Bas za takve stvari postoji SysTick tajmer i na slican nacin se koristi, stim sto je on vezan bas za interne tajmere a u primeru sam vezao na prolaze petlje.
Moj primer ima dve osobine, jedna je da nije blokirajuci code a druga je da ce frekvencija blinkanja zavisiti od ostalog opterecenja procesora i funkcija tako da moze da daje nekakvu indikaciju koliko smo vremena potrosili u glavnoj petlji. Ako se zahteva striktno frekventno blinkanje onda mora da se koriste tajmeri ili PWM modul.
Code:
void loop() {
//some counter
cnt++;
if (cnt > 65535) {
cnt = 0;
toggleLED();
}
//ostatak programa ...
}
Primer je abstraktan (za Arduino) ali samo da pokazem koncept.
Dakle u glavnoj petlji koja vrti nas progam imamo jedan brojac koji inkrementujemo svaki put kada program tu prodje, kada se stigne do 65536 program tu promenljivu vraca na 0.
U tom trenutlu kada smo stigli do max vrednosti se izvrsi toggleLED() funkcija (pali/gasi LED), nema blokirajuceg code-a, nista se ne ceka jednostavno svaki 65636-ti put prolaza toglujemo LED.
Bas za takve stvari postoji SysTick tajmer i na slican nacin se koristi, stim sto je on vezan bas za interne tajmere a u primeru sam vezao na prolaze petlje.
Moj primer ima dve osobine, jedna je da nije blokirajuci code a druga je da ce frekvencija blinkanja zavisiti od ostalog opterecenja procesora i funkcija tako da moze da daje nekakvu indikaciju koliko smo vremena potrosili u glavnoj petlji. Ako se zahteva striktno frekventno blinkanje onda mora da se koriste tajmeri ili PWM modul.