 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Sep 21, 2006 12:17 pm Naslov sporočila: Enakomerni prehodi med vrednostmi v n korakih |
|
|
Hja... Nimam več idej.
Problem: med številoma a in b (8(oz. 4)bitna nepredznačena števila z vrednostmi od 0 do 15) moram izračunat n vrednosti z čim manj urinih ciklov (in kar se da enakomernih intervalih). Problem mi delajo predvsem te zaokrožitvene napake, ki se jih zaradi celih števil ne morem kar tako znebit... _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Čet Sep 21, 2006 12:34 pm Naslov sporočila: |
|
|
kaj računaš?. Saj veš če problem malo bolj razčleniš je lažje pomagat. Glede na napisano predvidevam da nekaj deliš?
Mislim, pa da bi bila najhitrejša varianta, če imaš samo števila od 0 .. 15, da si narediš tabelo ... in enostavno za vse možne rezultate (256) prirediš vrednosti. To bi pobralo najmanj časa kontrolerju. Seveda če imaš dovolj prostora na kontrolerju. |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Sep 21, 2006 12:42 pm Naslov sporočila: |
|
|
Števila od 0 do 15 mi označujejo, kako močno svetijo diode na izhodih. Med dvema stanjema, ki jih imam shranjena, bi rad naredil enakomeren prehod v n korakih. Ker je diod okoli 200 in bi rad imel gladke prehode, mora biti tale procedura, ki to računa, precej hitra.
Sem se prejle spomnil na en algoritem, ki sem ga enkrat gledal (http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm) in ga trenutno še preučujem, če bi bil primeren za tale moj problem. _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Sep 21, 2006 12:46 pm Naslov sporočila: |
|
|
Kaj naj bi pa bilo to "n vrednosti med steviloma a in b" ? Kaj ima zaokrozevanje sploh veze s celimi stevili (ce isces cela stevila med a in b, nimas kaj zaokrozevati) ? Ali gre morda za interpolacijo n racionalnih stevil med celima a in b ? Ce je temu tako, potem dobro premisli, ce sploh to potrebujes; veliko problemov je mogoce cisto enostavno prevesti na bolj "naraven" stevilski tip, torej 8-bitna cela stevila ... napisi kaj bi sploh rad in koliko ciklov imas na voljo (oz. koliko jih porabi trenutna izvedba).
Z veseljem bi pomagal, pa niti ne razumem vprasanja  |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Sep 21, 2006 12:47 pm Naslov sporočila: |
|
|
Aha, sem ravno tipkal moj post, ko si razlozil stvar. Koliko je pa najvecji mozni n in ali je n vedno enak (konstanten) ? |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Sep 21, 2006 12:53 pm Naslov sporočila: |
|
|
Ne, n ni konstanten. Če bodo težave, lahko sicer tudi to pride v vpoštev, a trenutno je kar 8bitno nepredznačeno celo število.
Tisti Bresenhamov algoritem deluje, če je n večje od razlike v izhodih. npr:
od 5 do 2 v 20 korakih
Koda: |
0 5
1 5
2 5
3 5
4 4
5 4
6 4
7 4
8 4
9 4
10 3
11 3
12 3
13 3
14 3
15 3
16 3
17 2
18 2
19 2 |
Tule so pa problemi:
od 0 do 10 v 4 korakih:
Koda: |
0 0
1 1
2 2
3 3
4 4 |
Zgleda bom kar nekaj takega uporabil in dal pogoj, da je število korakov>20... _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Sep 21, 2006 12:56 pm Naslov sporočila: |
|
|
Torej a in b sta lahko karkoli med 0 in 255 s korakom 16 med vrednostmi, n pa med 0 in 255 s korakom 1. Kaksen je pa odnos med (a - b + 1) in n ? Je (a - b + 1) / n vedno vecje/manjse od 1 ali se lahko tudi to spreminja ? |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Sep 21, 2006 1:07 pm Naslov sporočila: |
|
|
Se v razmislek: na tvojem mestu bi izbral 8-bitne vrednosti za a in b. Nastavljas jih lahko v korakih po 16, pa bos imel za intenziteto se vedno 4-bitno vrednost, ko zanemaris 4 spodnje bite. V tem primeru se racunanje lahko mocno poenostavi, ce je n primerno izbran (n = 2^N, 0 < N < 8-).
Npr. recimo, da n = 8, a = 7*16 in b = 12*16 (torej na skali od 0 do 15 je a 7, b pa 12). Rad bi torej, da se od 112 do 192 vrednost prestavi v osmih korakih. Vrednosti a in b zamaknes za 3 bite in ju odstejes (b - a), da dobis razliko. Rezultat, ki ga dobis, je ze kar ustrezno predznaceni delta, ki ga moras pristevati zacetni vrednosti, da prides do koncne. V tem primeru je delta (+)10 in vrednost se od 112 giblje takole: 122, 132, 142, 152, 162, 172, 182, 192. Osem korakov in vrednost se premika zvezno. Ker ignoriras spodnje stiri bite in gledas samo zgornje stiri (za intenziteto od 0 .. 15), nimas tezav z zaokrozevanjem -> tako bos porabil dalec najmanj ciklov. |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Sep 21, 2006 1:41 pm Naslov sporočila: |
|
|
Sokrat je napisal/a: |
Se v razmislek: na tvojem mestu bi izbral 8-bitne vrednosti za a in b. Nastavljas jih lahko v korakih po 16, pa bos imel za intenziteto se vedno 4-bitno vrednost, ko zanemaris 4 spodnje bite. V tem primeru se racunanje lahko mocno poenostavi, ce je n primerno izbran (n = 2^N, 0 < N < .
Npr. recimo, da n = 8, a = 7*16 in b = 12*16 (torej na skali od 0 do 15 je a 7, b pa 12). Rad bi torej, da se od 112 do 192 vrednost prestavi v osmih korakih. Vrednosti a in b zamaknes za 3 bite in ju odstejes (b - a), da dobis razliko. Rezultat, ki ga dobis, je ze kar ustrezno predznaceni delta, ki ga moras pristevati zacetni vrednosti, da prides do koncne. V tem primeru je delta (+)10 in vrednost se od 112 giblje takole: 122, 132, 142, 152, 162, 172, 182, 192. Osem korakov in vrednost se premika zvezno. Ker ignoriras spodnje stiri bite in gledas samo zgornje stiri (za intenziteto od 0 .. 15), nimas tezav z zaokrozevanjem -> tako bos porabil dalec najmanj ciklov. |
Saj nekaj podobnega sem imel narejeno, edino tistega ne, da bi n primerno izbiral. Zdaj sem edino malo v precepu kaj narediti... Obdržati staro kodo in izbirati primerni n ali pa uporabiti tale Bresenhamov algoritem... Če izberem prvo možnost, sem omejen na max. 16 korakov, pri drugi pa min. 16... Kombinirat obe skupaj je sicer možno, a bi bile potrebne korenite spremembe. _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Sep 21, 2006 1:46 pm Naslov sporočila: |
|
|
premisli, kaj bi sploh rad - je na voljo dovolj ciklov za operacijo nad vec kot 8-bitnimi vrednostmi ? Bo uporabnik sploh opazil razliko ? Ali uporabnik sploh zeli preklop v 141 korakih namesto v 16 ? Kompliciranje brez potrebe je primerno samo tam, kjer se izplaca. Ce ni potrebno (ce zaradi poenostavitve ne bo postala stvar nefunkcionalna), zakaj potem sploh komplicirati ?
Si sploh izbral primeren MCU ? Tema se nahaja v podforumu za PICe, ki nimajo HW deljenja, imajo pa nekateri vecji vsaj HW multiply, s katerim lahko mocno pospesis tudi deljenje. LPC900 ima recimo HW deljenje, ki deluje neprimerno hitrejse glede na vhodni clock, kot ekvivalenten algoritem v enem omejenem PICu. |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Sep 21, 2006 2:00 pm Naslov sporočila: |
|
|
Če primerjam cikle, ki so potrebni za računanje in cikle, ki so potrebni za branje iz arraya, jih je slednjih v večini... array je urejen kot stanja[14][17]
PIC je 18F2620, vgrajen bo 18F4620. Ima HW množenje 8x8. Glede na to, da mora biti stvar končana do sobote, ni šanse, da grem na drugo platformo. Ker uporabljam še druge izhode, kjer se spreminjajo vrednosti od 0 do 100, bom uporabil tam nekje 50 korakov. Bom najprej poskusil s tem Bresenhamom in če mi uspe, da zadovoljivo deluje, potem bo pri tem ostalo, drugače pa bodo nujne poenostavitve.
Drugače bi pa rad imel osveževanje pod 50ms. V to spada branje blocka z MMC (okoli 8ms), pošiljanje vrednosti na 13 modulov preko i2c (tole še moram točno izmerit, koliko časa traja, a mislim da okoli 20ms) ter prehajanje med stanji čim bolj enakomerno. Ker programa ne bi rad nakdadno popravljal, ga želim napisati čim bolj splošno.
ps: nekateri radi kompliciramo...  _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Sep 21, 2006 2:14 pm Naslov sporočila: |
|
|
Mislim, da obstaja na Microchipovi strani en AppNote, kjer je opisan (tudi) algoritem za razlicne oblike deljenja z uporabo HW multiply-a. Vsekakor gre za bistveno manj ciklov, kot jih zahteva SW deljenje. |
|
Nazaj na vrh |
|
 |
snow Član


Pridružen-a: Tor 27 Dec 2005 14:02 Prispevkov: 341 Aktiv.: 1.44 Kraj: Ljubljana || Velenje
|
Objavljeno: Čet Sep 21, 2006 3:09 pm Naslov sporočila: |
|
|
Živlenje bi si olajšal če bi dal da je n lahko N^2 [2,4,8,16,32,64,128,256].
Pa potem izračunaš a*n in b*n, pa manjšemu prištevaš a-b, dokler nista enaka. Izhod je pa trenutno stanje/n, kar lahko izračunaš s shifti.
Če pa resno hočeš vse n-je, pa on algoritem za črte risat + tabela za n>(a-b).
Ampak kot je že bilo rečeno: Ali res rabiš vse n-je? |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|