Blikání LED

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Blikání LED

Příspěvek od Ludek » 20 črc 2020, 12:38

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...

commar
Příspěvky: 31
Registrován: 26 úno 2019, 15:20
Reputation: 0

Re: Blikání LED

Příspěvek od commar » 20 črc 2020, 12:45

No a není lepší (jednodušší) koupit blikající LED?

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Blikání LED

Příspěvek od Ludek » 20 črc 2020, 13:07

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 :-)

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Blikání LED

Příspěvek od ondraN » 21 črc 2020, 08:45

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.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Blikání LED

Příspěvek od pavel1tu » 21 črc 2020, 10:23

https://arduino.cz/arduino-zaklady-blik ... kce-delay/

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"

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Blikání LED

Příspěvek od Ludek » 21 črc 2020, 16:32

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.

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Blikání LED

Příspěvek od kiRRow » 21 črc 2020, 18:31

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í.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Blikání LED

Příspěvek od pavel1tu » 21 črc 2020, 20:44

Ludek píše:
21 črc 2020, 16:32
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.
Normálně to v alarmu používám a bliká mi to, jak při odchodu, tak při aktivaci zony.
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"

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Blikání LED

Příspěvek od ondraN » 22 črc 2020, 08:52

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;
    }
  }
  
}
Šo by to jistě ještě zoptimalizovat, ale jsem na dovolené a nemám už čas. Nastavováni a zastavení blikání by bylo vhodnější udělat přes funkci a v ní ošetřit všechny stavy, které se teď musí řešit v interruptu. Nicméně, tohle bude fungovat i tak, jak je to napsané.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Blikání LED

Příspěvek od Ludek » 22 črc 2020, 16:00

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 :-)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů