To je snad zlej sen, Atmega8 nema jedinou plne volnou branu. PA nema vubec, PC obsahuje reset a navic nema vyvedenou 7, PB ma krystal a PD zase UART... hruza des, takze v preruseni citace bude jeste rozhodovani navic, 4 serva na PB a 4 na PC
Tak si na to vyrob tabulku. Index bude 0..8 (číslo serva a doplňující mezera), hodnota bude výstup na dané porty (třeba 2 bajty). Stejně pochybuju, že ti ten překladač rozumně přeloží 1 << n. Já trochu znám PIC16F84, 6502, 8080 a tam taková instrukce není. Takže na Atmelu bych ji taky nečekal. Je třeba na 8086.
1<<n nebude to nahodou rotate n left? To musi poznat kazdy proc ako zakladnu instrukciu, preto to asi poznaju aj vsetky C kompilatory.
Já nevím, třeba ji Atmel má, já ho neznám. Ale na těch osmibitech, co znám, není. Tam se to musí řešit opakovaným posouváním o 1 bit, což by v tomhle případě mohlo pokazit časování a prodloužit tu obsluhu přerušení. Proto jsem na to upozorňoval.
Instrukciu posunu napriklad o 3b som nevidel, ale kompilatory C to riesia nasobnym posunom - tu skutocne pride k roznym casom pri roznom posune. Napisat casovo kriticku rutinu v C je hovadina, treba to pisat v asm a posuny dorovnat dummy instrukciami.
Este k tym instrukciam, freescale od HC08 ma instrukciu nibble swap, co je 4-nasobny posun jednou instrukciou.
s 1<<n neni zadny problem, ale tohle uz je stejne minulost
Kvuli nedostatku pinu tam pujde demux. Povoleni vystupu bude ridit PWM (menici se pro kazde servo).
Jen tam musim doplnit "zatmivaci" impusy pro prepnuti serva, ale treba to bude dostatecne rychle, takze nebudou potreba.
Otázka je, jestli to zvládne krok 2us. Spíš tam píšou, že by to mělo být 10us. I kdyby to zvládlo míň, tak se změní frekvence výstupu (píšou to tak). Takže bych, řekl, že tohle rýpání je naprd.
klidne si rejpej, ale ja to chci cele postavit a naprogramovat sam. Kdybych na tom nechtel nic delat, koupim hotovy modul a vykaslu se i na knihovnu.
ostatni:
existuje nejaky dekadicky citac (jako 4017), ale obsahujici vstup na povoleni/zakazani vsech vystupu?
(4017 ma jen CLK, negCLK, reset a vystupy)
klidne si rejpej, ale ja to chci cele postavit a naprogramovat sam. Kdybych na tom nechtel nic delat, koupim hotovy modul a vykaslu se i na knihovnu.
ostatni:
existuje nejaky dekadicky citac (jako 4017), ale obsahujici vstup na povoleni/zakazani vsech vystupu?
(4017 ma jen CLK, negCLK, reset a vystupy)
Co tam dát 74HC238 a to čítání řešit sw v procesoru?
Andrea:
ten demux jsem myslel puvodne, pak me napadlo mozne zjednoduseni tim citacem (adresa by se posouvala sama, nemuselo by se nic "zatmivat").
Pristi tyden se dostanu domu, tak zacnu vyrabet HW. Ten demux snad bude stacit.
Jenže ono se může stát, že se ten čítač posune "sám", když se posunout neměl (rušení) a rázem budeš "mimo mísu" a procesor o tom nebude mít tuchy. Pro nějaké zatmívání nevidím důvod. Na adresní vstupy demuxu přivedeš adresu serva a na ENable přivedeš puls z čítače. Když puls skončí (demux se tím zablokuje), nastavíš další adresu a čítačem vygeneruješ další puls, a tak dál...
U 4017 bych reset ovladal SW, takze v pripade problemu by se odeslala jen jedna spatna davka.
Kdyz uz tam bude demux, tak na jeho enable vstup budu poustet automaticky generovany PWM. Perioda bude 2,6ms a budu menit stridu.
V preruseni vlozim novou hodnotu stridy a prepnu vystup demuxu.
Jsou tady ale dva problemy, OCR1A je v tomhle pripade doublebufferovany a nacita se hned po preteceni, takze pri preruseni uz musim vlozit hodnotu pro nasledujici servo.
Dalsi je, ze v okamziku preruseni vyskoci vystup na 1 a az chvilku potom zmenim vystup, coz se projevi kratkym impulsem na minulem servu. Ted me ale napadlo, ze by se to dalo odstranit invertovanim PWM, takze po preruseni bych byl minimalne 0.1ms na 0.
Pripadne opet pouzit CTC rezim a pri preteceni prepnout adresu a az pak nahodit 1 a hodnotu pro servo ukladat do OCR1B, pri preruseni od ORC1B comp. pak shodit vystup na 0.
To PWM mi prijde takovy cistsi, kazde servo bude dostavat impuls se stejnou periodou (zadnej slepenec a pak cekat) a i v pripade, ze bude preruseni od RX, nebude zadny zpozdeni vystupu.
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2, 3
Strana 3 z 3
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.