Blikání LED
Blikání LED
Zdravím, hledal jsem na Netu kus kodu, kdy LED bliká, bez ohledu na SW - který má spousty časových prodlev, delay smyček atd atd.
Tak jestli lze naprogramovat natvrdo nějaký pin (časovač) aby LED blikala 500/500. Našel jsem něco, ale to jsou jen milisekundy, ale
tato vteřina je moc... Jde to? Nerad bych přidával HW...
Tak jestli lze naprogramovat natvrdo nějaký pin (časovač) aby LED blikala 500/500. Našel jsem něco, ale to jsou jen milisekundy, ale
tato vteřina je moc... Jde to? Nerad bych přidával HW...
Re: Blikání LED
No a není lepší (jednodušší) koupit blikající LED?
Re: Blikání LED
Díky za radu Tu LED jsem použil pro příklad... Potřebuji v zařízení "rozblikat" alarmová relátka,
pokud dostanou příkaz k sepnutí. A jelikož se mi nechce předělávat DPS a přidat HW, tak chci použít
blikající PIN a buď relé budou sepnuté nebo budou vteřinově "cvakat" dle SW...
Ale i tak pokud to jde, zase budu o něco dál
pokud dostanou příkaz k sepnutí. A jelikož se mi nechce předělávat DPS a přidat HW, tak chci použít
blikající PIN a buď relé budou sepnuté nebo budou vteřinově "cvakat" dle SW...
Ale i tak pokud to jde, zase budu o něco dál
Re: Blikání LED
Použij timer2 a udělej si ovládání na pozadí přes interrupt. Je to docela triviální. Tedy, pokud je řeč o arduinu.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Blikání LED
https://arduino.cz/arduino-zaklady-blik ... kce-delay/
nauč se používat Google, tyto triviální věci jsou několikset let již popsané
nauč se používat Google, tyto triviální věci jsou několikset let již popsané
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Blikání LED
Ale ale Pavle ...
V uvodu jsem psal, ze to tak nejde. Jakmile SW něco čte, nebo tam je delay, tak by blikani prestalo.
Tak tedy jinak - lze nastavit nejaky timer tak, aby byla frekvence trvala a bez prestavani ?
Nejak to jde, ale toto je frekvence 1 Hz. Proto jsem zde, jestli toto vubec Arduino dokaze.
V uvodu jsem psal, ze to tak nejde. Jakmile SW něco čte, nebo tam je delay, tak by blikani prestalo.
Tak tedy jinak - lze nastavit nejaky timer tak, aby byla frekvence trvala a bez prestavani ?
Nejak to jde, ale toto je frekvence 1 Hz. Proto jsem zde, jestli toto vubec Arduino dokaze.
Re: Blikání LED
Timer, neboli časovač, je forma přerušení. Přerušení znamená, že procesor přeruší svojí činnost (delay, smyčku) a provede nějakou funkci. Časovač běží mimo program procesoru a jde nastavit v nějakém rozmezí. Pokud potřebuješ delší časový úsek než umožňuje časovač, tak musíš spustit tu funkci až při třeba každém 126tém přerušení.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Blikání LED
Normálně to v alarmu používám a bliká mi to, jak při odchodu, tak při aktivaci zony.Ludek píše: ↑21 črc 2020, 16:32Ale ale Pavle ...
V uvodu jsem psal, ze to tak nejde. Jakmile SW něco čte, nebo tam je delay, tak by blikani prestalo.
Tak tedy jinak - lze nastavit nejaky timer tak, aby byla frekvence trvala a bez prestavani ?
Nejak to jde, ale toto je frekvence 1 Hz. Proto jsem zde, jestli toto vubec Arduino dokaze.
Netvrdim že je to na 1ms, ale každý cyklus kdy proběhne program se porovnává IF s časem 1000ms, tento "časovač" mám pro všechny LED jeden
Takže nechápu proč by to nemělo chodit.
delay nepoužívám - není důvod. Pokud používáš delay, neřeš blikání a kup si blikací LED jsou i na 1Hz, nebo si LED řiď zvlášť pomocí ATtiny
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Blikání LED
Kód: Vybrat vše
#define LED 13 //pin ledky
const unsigned int PERIOD=1000; //perioda blikani v ms
volatile bool LedBlink=false;
//------------- Function prototypes
ISR(TIMER2_COMPA_vect); // obslouzeni interruptu od timeru 2 (kazdych 13us)
void setup() {
pinMode(LED,OUTPUT);
// nastaveni timeru 2
TCCR2A = bit(WGM21); // nebude vystup na port a rezim bude CTC
TCCR2B = bit(CS22)|bit(CS21)|bit(CS20); // zdroj signalu Fosc a preddelic 1024, inkrementace 15625 za sec
OCR2A = 155; // interrupt a znovunastaveni pri dosazeni stavu,int kazdych 155x64us=cca 10ms
TIMSK2 = bit (OCIE2A); // povoleni preruseni v masce interruptu
// END nastaveni timeru 2
}
void loop() {
// put your main code here, to run repeatedly:
LedBlink=true; //zapne blikani
delay(14589); //neco delame
LedBlink=false;//vypne blikani
delay(19722); //neco delame
}
// Interruptt routine
ISR(TIMER2_COMPA_vect){ // obslouzeni interruptu od timeru 2 (kazdych cca10ms)
static unsigned int Prescaler=0;
static bool Toggle=true;
static bool Set=true;
if(LedBlink){
Set=true;
Prescaler++; //preddelic pro periodu
if(Prescaler>=(PERIOD/20)){
Prescaler=0;
if(Toggle){
digitalWrite(LED,HIGH);
}else{
digitalWrite(LED,LOW);
}
Toggle=!Toggle;
}
}else{
if(Set){ //aby se nastavovalo jenom jednou
digitalWrite(LED,LOW); //ledku musime vypnout, protoze nevime v jake fazi blikani prijde zakaz
Prescaler=0;
Set=false;
}
}
}
Re: Blikání LED
pro Pavla - Psal jsem, že to je program, kde jsou delay ! Nechci to přeprogramovávat po někom...
pro Ondru - díky !!!!! to je ono, to jsem hledal.... tak zase někdy
pro Ondru - díky !!!!! to je ono, to jsem hledal.... tak zase někdy
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti