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í 

Bascom dynamický "alias"
Jdi na stránku 1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
scorpions-cz



Založen: Mar 19, 2011
Příspěvky: 1859
Bydliště: Jižní Čechy Dačicko

PříspěvekZaslal: po listopad 01 2021, 18:38    Předmět: Bascom dynamický "alias" Citovat

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
Laughing
Dík za nasměrování
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Crifodo



Založen: Oct 11, 2005
Příspěvky: 15005

PříspěvekZaslal: po listopad 01 2021, 19:21    Předmět: Citovat

Na PIND.x toho moc nepošleš, tím se čte stav portu, pro výstup slouží PORTD.x

Který Atmel má 20 portů?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
bdn



Založen: Jan 16, 2020
Příspěvky: 467

PříspěvekZaslal: po listopad 01 2021, 19:27    Předmět: Citovat

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í.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
scorpions-cz



Založen: Mar 19, 2011
Příspěvky: 1859
Bydliště: Jižní Čechy Dačicko

PříspěvekZaslal: po listopad 01 2021, 19:28    Předmět: Citovat

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? Laughing
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
bdn



Založen: Jan 16, 2020
Příspěvky: 467

PříspěvekZaslal: po listopad 01 2021, 20:20    Předmět: Citovat

Nevím jak v Bascom, ale v C lze udělat na pár řádků ...
kód:

#define BSET(port, bitmask) ((port)|=(bitmask))

volatile int16_t time_is; // nastaven v ISR(TIMER0_OVF)
int16_t time_past;
uint8_t code;

// ...

void set_pin_100ms( void)
{
   if((signed)(time_is - time_past - 100)>=0) // automaticky kazdych 100ms
   {
      time_past = time_is;
      if (code<20)
      {
         set_pins(code);
         code++;
      }

   }
}

void set_pins(uint8_t code)
{
   switch (code)
   {
   case 1:
      BSET(PORTA, 0x01);
      break;
   case 2:
      BSET(PORTA, 0x02);
      break;
   case 3:
      BSET(PORTA, 0x04);
      break;
   // ...
   default:
      ;
   }
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: po listopad 01 2021, 20:24    Předmět: Citovat

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[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
scorpions-cz



Založen: Mar 19, 2011
Příspěvky: 1859
Bydliště: Jižní Čechy Dačicko

PříspěvekZaslal: po listopad 01 2021, 20:34    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Crifodo



Založen: Oct 11, 2005
Příspěvky: 15005

PříspěvekZaslal: po listopad 01 2021, 20:39    Předmět: Citovat

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?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
scorpions-cz



Založen: Mar 19, 2011
Příspěvky: 1859
Bydliště: Jižní Čechy Dačicko

PříspěvekZaslal: po listopad 01 2021, 20:41    Předmět: Citovat

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. Rolling Eyes
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
scorpions-cz



Založen: Mar 19, 2011
Příspěvky: 1859
Bydliště: Jižní Čechy Dačicko

PříspěvekZaslal: po listopad 01 2021, 20:43    Předmět: Citovat

Crifodo
Né, je to seqencer pro ohňostroje.
Nějaký posuny bych tam nerad dělal, protože to možná nepůjde po sobě( zjednodušení plošňáku a pod)


Naposledy upravil scorpions-cz dne po listopad 01 2021, 20:55, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
termit256



Založen: Dec 06, 2007
Příspěvky: 10335

PříspěvekZaslal: po listopad 01 2021, 20:46    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
scorpions-cz



Založen: Mar 19, 2011
Příspěvky: 1859
Bydliště: Jižní Čechy Dačicko

PříspěvekZaslal: po listopad 01 2021, 20:52    Předmět: Citovat

Jo velikost je mi celkem jedno, Čip má paměti dost a Bascom mám ofiko, takže bez omezení velikosti kodu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
bdn



Založen: Jan 16, 2020
Příspěvky: 467

PříspěvekZaslal: po listopad 01 2021, 20:57    Předmět: Citovat

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
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
scorpions-cz



Založen: Mar 19, 2011
Příspěvky: 1859
Bydliště: Jižní Čechy Dačicko

PříspěvekZaslal: po listopad 01 2021, 21:12    Předmět: Citovat

Č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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
termit256



Založen: Dec 06, 2007
Příspěvky: 10335

PříspěvekZaslal: po listopad 01 2021, 21:19    Předmět: Citovat

Nebo si proste napis tabulku se stavy tech portu a vycitej ji pomoci toho cisla poctu preruseni.
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 -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Další
Strana 1 z 10

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