Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Arduino- delay
Jdi na stránku Předchozí  1, 2
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další)
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3697
Bydliště: Praha

PříspěvekZaslal: út červen 21 2016, 19:27    Předmět: Citovat

dj_rizek - dovolím si udělat malý code review:

1)
Definice konstant na začátku - použijte buď C styl
kód:
#define led 11

nebo pro číselné konstanty také ve stylu C++
kód:
const int led = 11;

Takhle se zbytečně alokuje inicializovaná RAM.

2)
Blok uvozený komentářem //PWM má zbytečné složené závorky. Pokud se proměnná value nepoužívá jinde, pak blok má smysl, ovšem s nadefinováním lokální proměnné value. Platí zásada, že proměnné se mají definovat s minimálním oborem viditelnosti. To samé platí pro proměnnou x. Takže:
kód:

// -------------  PWM  -------------
{
int value, x;

   value = analogRead(analogpin);      //precist potenciometr
   x = map(value, 0, 1023, 0, 255);    //prevod hodnot z potenciometru na PWM rozsah
   analogWrite(Ledpin, x);
}

delay(20);

nebo lépe:
kód:

// -------------  PWM  -------------
{
   int x = map(analogRead(analogpin),
               0, 1023, 0, 255);           //prevod hodnot z potenciometru na PWM rozsah
   analogWrite(Ledpin, x);
}

delay(20);

3)
Za delay(20) opět zbytečný blok.

4)
Řádku:
kód:
if (svetlo) svetlo = false; else svetlo = true;


je lépe napsat takto:
kód:
svetlo = !svetlo;
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: út červen 21 2016, 19:45    Předmět: Citovat

frpr666 napsal(a):

Tak jsem zjistil, že arduino si už použilo časovač ke svým účelům...


Arduino používá timer0 vždy ke svým účelům. Timer0 je použit pro funkce millis(), delay() a micros(). Taky je použit pro PWM na pinech 5 a 6. Proto nejde jednoduše měnit frekvence PWM. A taky když se změní předdělička časovače, tak výše uvedené funkce přestanou fungovat správně. Obdobně je použit i Timer1 a Timer2, z hlavy si nepamatuji přesně k čemu. Určitě nějaký používá např. knihovna k ovládání serv.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
dj_rizek



Založen: Apr 07, 2005
Příspěvky: 711
Bydliště: blízko Třeboně

PříspěvekZaslal: út červen 21 2016, 19:46    Předmět: Citovat

mtajovsky- děkuji za reakci,bohužel muj problem je že ve škole nás učili už v tý době mrtvej jazyk Pascal z něj jsem pak přešel na Delphi, něco málo nás učili assembler, bohužel C šlo mimo a to je ten zádrhel (to je tak když vás učí pitomec kterej víc neumí).
Pokud to píšu,tak právě složitě.

Pokud porovnám tvou upravu,je logická a jasná až na kód:
svetlo = !svetlo;
Co má za funkci "!" ?

Právě se ještě trápím s interním časováním protože je mi vlastne jedno že to nebude přesný ale aby to prostě kolem jedný hodiny vyplo výstup relé.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: út červen 21 2016, 19:51    Předmět: Citovat

! je negace. V Pascalu svetlo := not svetlo;

Sem ještě v práci, buď v noci nebo zítra ti ten kus kódu napíšu. Ještě při pohledu na kód jsem si všiml že nemáš ošetřen "debouncing" tlačítka.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
dj_rizek



Založen: Apr 07, 2005
Příspěvky: 711
Bydliště: blízko Třeboně

PříspěvekZaslal: út červen 21 2016, 20:12    Předmět: Citovat

FHonza napsal(a):
! je negace. V Pascalu svetlo := not svetlo;

Sem ještě v práci, buď v noci nebo zítra ti ten kus kódu napíšu. Ještě při pohledu na kód jsem si všiml že nemáš ošetřen "debouncing" tlačítka.


To jsem zatím neřešil Smile zatím jsem rád že alespoň něco dělá jak jsem chtěl, eventuelně jsem plánoval druhy tlačítko na vypnutí.

Jednoduchej odpočet je tohle ale funguje to solo,pokud to vložím do mojí smyčky zastaví mi vše ostatní až do odpočítání.

{ while (t!= 0) {
for (t; t>0; t--){

delay(10);
digitalWrite(tout, 1);
}
if (t==0)
{

digitalWrite(tout, 0);
}}}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: út červen 21 2016, 21:07    Předmět: Citovat

Shrnutí
Na první pohled to vypadá, že použití funkce millis() je více komplikované než použití delay(). V některých případech je to pravda. Přesto výhodou je, že sketch se stane výrazně flexibilnější. Animace se stanou jednodušší. Komunikování s LCD a souběžné čtení tlačítek bude bez problému. Virtuálně můžete udělat Arduino multitaskové.
https://www.baldengineer.com/millis-tutorial.html
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: út červen 21 2016, 21:49    Předmět: Citovat

Pro multitasking doporučuji vyzkoušet nějaký RTOS, u Arduina bych tomu multitasking neříkal Smile

Zkoušel sem Femto OS a FreeRTOS. Ten první je jednodušší a je podporováno víc mcu z rodiny AVR, ale bohužel už nějaký čas není vyvíjen.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ross4435897



Založen: Nov 10, 2009
Příspěvky: 426
Bydliště: Brno

PříspěvekZaslal: st červen 22 2016, 9:09    Předmět: Citovat

V nekolika konstrukcich mam implementovan ChiBios asi v 6-ti vlaknech ? (6x I/O, 4x I2C, 1x LCD a Keyboard) ... a pokud vim, vse zatim bezi tak jak ma. Je to jednoduche a snadno pochopitelne, s prilozenymi priklady to zmaknes. Funkce DELAY je tam primo zakazana, a je nahrazena jinou, kompatibilni s RTOS. Millis tedy neresis.
Jak uz zde bylo zmineno, o multitasking v pravem slova smyslu se nejedna ... spis o jeho 'simulaci'.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pospisjak



Založen: Apr 10, 2009
Příspěvky: 214
Bydliště: Blanensko

PříspěvekZaslal: po únor 06 2017, 21:45    Předmět: Citovat

Ahoj, otvírám trochu starší téma.
Potřeboval bych nasimulovat výstup ze snímače otáček, tedy obdélník do cca 15 kHz. Je reálné použít atmegu 328, resp. Arduino UNO coby generátor obdélníku? Frekvenci bych zadával ručně potenciometrem na analog IN, případně přes UART nějak z PC.
Pomocí funkce Delay takto "vysoká" frekvence již vygenerovat nejde, ale mohl by jít nějak využít interní counter např. OCR1A.

Uvažuju správně, nebo to mám rovnou vzdát, protože tudy cesta nevede?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: po únor 06 2017, 22:54    Předmět: Citovat

S velkou rezervou vyhoví jakýkoli ATMega nebo ATTiny. Stačí použít čítač v režimu CTC. Tady je na to docela dobrý kalkulátor.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další) Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.15 sekund