Ovladani osmi serv pomoci UARTu

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
K.Pavel

#31 Příspěvek 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 :(

Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 02:00
Kontaktovat uživatele:

#32 Příspěvek 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.

Uživatelský avatar
mihal
Příspěvky: 1812
Registrován: 06 dub 2005, 02:00
Bydliště: Zilina

#33 Příspěvek 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.

Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 02:00
Kontaktovat uživatele:

#34 Příspěvek 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.

Uživatelský avatar
mihal
Příspěvky: 1812
Registrován: 06 dub 2005, 02:00
Bydliště: Zilina

#35 Příspěvek 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.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#36 Příspěvek 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.

K.Pavel

#37 Příspěvek 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.

Návštěvník

#38 Příspěvek 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

Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 02:00
Kontaktovat uživatele:

#39 Příspěvek 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

Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 02:00
Kontaktovat uživatele:

#40 Příspěvek 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.

K.Pavel

#41 Příspěvek 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)

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#42 Příspěvek 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?

K.Pavel

#43 Příspěvek 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.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#44 Příspěvek 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...

K.Pavel

#45 Příspěvek 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.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“