Stránka 3 z 3

Napsal: 20 lis 2008, 18:43
od K.Pavel
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 :(

Napsal: 21 lis 2008, 08:27
od piitr
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.

Napsal: 21 lis 2008, 08:44
od mihal
1<<n nebude to nahodou rotate n left? To musi poznat kazdy proc ako zakladnu instrukciu, preto to asi poznaju aj vsetky C kompilatory.

Napsal: 21 lis 2008, 11:09
od piitr
mihal píše: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.

Napsal: 21 lis 2008, 13:29
od mihal
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.

Napsal: 21 lis 2008, 13:32
od Andrea
mihal píše:Este k tym instrukciam, freescale od HC08 ma instrukciu nibble swap, co je 4-nasobny posun jednou instrukciou.
AVR ji má taky.

Napsal: 21 lis 2008, 13:32
od K.Pavel
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.

Napsal: 21 lis 2008, 14:01
od Návštěvník
Já si jenom tak "rýpnu" :)

http://avrhelp.mcselec.com/index.html

Kliknout na "Search" a zadat Config servos

Napsal: 21 lis 2008, 14:28
od piitr
Andrea píše:
mihal píše:Este k tym instrukciam, freescale od HC08 ma instrukciu nibble swap, co je 4-nasobny posun jednou instrukciou.
AVR ji má taky.
PIC taky. :D

Napsal: 21 lis 2008, 15:06
od piitr
Anonym píše:Já si jenom tak "rýpnu" :)

http://avrhelp.mcselec.com/index.html

Kliknout na "Search" a zadat Config servos
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.

Napsal: 21 lis 2008, 16:07
od K.Pavel
anonym:

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)

Napsal: 21 lis 2008, 16:19
od Andrea
K.Pavel píše:anonym:

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?

Napsal: 21 lis 2008, 16:39
od K.Pavel
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.

Napsal: 21 lis 2008, 16:45
od Andrea
K.Pavel píše: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...

Napsal: 21 lis 2008, 17:18
od K.Pavel
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.