Založen: Mar 19, 2011 Příspěvky: 1950 Bydliště: Jižní Čechy Dačicko
Zaslal: po listopad 01 2021, 18:38 Předmět: Bascom dynamický "alias"
Ahoj. Možná jsem to blbě pojmenoval. Potřebuju na 20 výstupních portů MCU postupně poslat ( v předem definovaném čase) log 1 na 100mS.
Jak to udělat samozřejmě vím, můžu udělat, že to jednotlivě napíšu řádek po řádku a použiju WAITms nebo použiju časovač, což bych chtěl a bude tam spousta podmínek a stejně se to bude muset napsat celý. Napadlo mě, zda by to nešlo vytvořit nějak inteligentněji, nějakou smyčkou, kde by byl použit ALIAS ( nebo nějak podobně)a ten by se měnil . Něco jako toto:
VYSTUP(1) ALIAS PIND.0
VYSTUP(2) ALIAS PIND.1
VYSTUP(3) ALIAS PIND.2
S tím, že bych potom použil SET VYSTUP(x) kde by se x měnilo a tím by se měnil i výstupní PIN.
V Helpu jsem nic nenašel, ale to určitě neznamená, že to nějak nejde
Jestli to máš 8bit. AVR, tak stejně bude oněch 20 I/O pinů "rozházeno" po ruzných portech PA, PB, PC. Myslím, že nějaký obří if-else if, nebo case bude nejelegantnější řešení.
Založen: Mar 19, 2011 Příspěvky: 1950 Bydliště: Jižní Čechy Dačicko
Zaslal: po listopad 01 2021, 19:28 Předmět:
OK napsal jsem to blbě. Potřebuju poslat log. 1 na 20 výstupních PINŮ, to jsou necelé 3 porty. Jo PINX.Y a PORTX.Y se mi plete a přijdu na to vždy při ladění.
Ale na co jsem se ptal jsi pochopil, že jo?
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: po listopad 01 2021, 20:24 Předmět:
Já si taky myslím, že pokud to umí case, tak to bude nejrozumnější řešení a snadno modifikovatelné.
Sice si ten výpočet a modifikaci pinů přes jejich adresy třeba na MCU51 dokážu představit, ale elegantní by to moc nebylo. _________________ Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Založen: Mar 19, 2011 Příspěvky: 1950 Bydliště: Jižní Čechy Dačicko
Zaslal: po listopad 01 2021, 20:34 Předmět:
No v C se nevyznám. Já potřebuju aby se na výstupu objevila log.1 na dobu 100mS, ale prodleva mezi jednotlivými výstupy bude nastavitelná od 0,1 do 9,9 sec. po 0,1sec. Nevím co je "break" vC jestli je to jenom zastavení programu, nebo hodnota od časovače. V Bascomu mohu použít WAITms X, ale tomu se chci vyhnout. Mám nastaveno přerušení každých 100mS.
Šlo mi o to zda vy to nešlo vyřešit nějakou smyčkou, pokud to nepůjde, tak to rozřádkuji.
Nevím teď jak do detailu, ale snad by šlo definovat si dlouhou celočíselnou proměnnou - DWORD, a pak smyčka: v ní SHIFTovat bit doleva, maskovat a posílat stav do těch tří portů, jen v jednom bude vždycky ten bit v log 1. Ve smyčce nakonec testovat dosažení dvacáté pozice. To je nějaký běžící světlo?
Založen: Mar 19, 2011 Příspěvky: 1950 Bydliště: Jižní Čechy Dačicko
Zaslal: po listopad 01 2021, 20:41 Předmět:
ZdenekHQ
Na to CASE asi dojde. Mě jenom napadlo, že pokud by šel použít proměnný ALIAS tak by to bylo nejkratší řešení. Něco jako když načítám hodnotu z ADC, Taky nemusím vypisovat včechny kanály a můžu použít:
GETADC (x) , kde hodnotu x si měním jak chci.
No nemůžu mít asi všechno.
Pokud te netlaci velikost programu, tak CTRL+C / CTRL+V byva casto nejrychlejsi reseni. I kdyz urcite ne nejhezci nebo nejelegantnejsi, ale zase nez pul dne vymejslet a testovat nejake opicarny, tak to radeji sproste zkopcim a mam za 5minut hotovo.
Ono obecně, čekání může být pasivní tj. nějaké to delay(ms) nebo aktivní, kde obvykle if-else testuje časovou událost a mezi tím se vykonává zbytek smyčky. Záleží na konktrétní aplikaci, požadované přesnosti, velikosti chipu atd. Výrobce čipu dává obvykle i nějké návody, jak to udělat ...
https://www.google.com/search?q=atmel+process+scheduling
Založen: Mar 19, 2011 Příspěvky: 1950 Bydliště: Jižní Čechy Dačicko
Zaslal: po listopad 01 2021, 21:12 Předmět:
Čekání mám vyřešený. Každých 0,1s se generuje přerušení a při něm vyresetuju výstupní piny. Zároveň ty přerušení počítám a při shodě s nastaveným intervalem se provede zapsání log.1 na patřičný pin.
Při dalším přerušení se opět pin nastaví na log.0 a při dvojnásobném čase se nastaví další pin na log.1 Tak celkem 20x.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2, 3, 4, 5, 6, 7, 8, 9, 10Další
Strana 1 z 10
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
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.