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


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Avg 24, 2007 7:50 pm Naslov sporočila: |
|
|
Narisi si diagram poteka - mislim, da tvoj program ne pocne tistega, kar bi ti zelel (non-stop izvaja funkcijo Knightrider, po precej pritiskih pa vsake toliko casa med vse Knightriderje vrine se en klic funkcije nakljucno). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3360 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sob Avg 25, 2007 8:23 am Naslov sporočila: Jaz bi se zadeve lotil drugače |
|
|
Jaz bi se zadeve lotil drugače.
Kar se tiče vezja nimam pripomb, no morda bi vezal več diod zaporedno, da bi svetile hkrati, bi bilo več svetlobe...
kar se tiče, kako bi se lotil programiranja pa bi naredil sledeče korake:
1. Najprej bi si naredil neke vrste uro, metronom, ki bi mi štela časovne periode. Dolžina časovnih period bi bila vseskozi enaka, in sicer toliko časa, kolikor bi želel da mi sveti časovno najkrajša slika na led diodah. Mislim, da več kot 4 krat na sekundo se slika ne bi menjala, torej bi bila perioda verjetno 200 ali 250 msec. To bi naredil seveda z timerjem, ki ga ima mikroprocesor za to vgrajen.
Recimo tako:
Koda: |
const Timer0Reload = 234
config timer0=timer,prescale = 1024
load timer0 , Timer0Reload
on ovf0 Timer0_isr
enable ovf0
start timer0
enable interrupts
'Add your code here
Timer0_ISR:
load timer0, Timer0Reload
'Add your ISR code here
return
'Timer value explination
' The timer is a 8Bit timer, it overflows when the timer reaches 256
' The AVR is running at 12000000Hz, the prescaler is 1024
' Each tick is 8,53333333333333E-02 ms - (1 / CPUSpeed in KHz ) * Prescaler
' The timer needs 234 ticks to reach the required time ( 234 * 8,53333333333333E-02 = 19,968ms)
' The start value for the timer must be set to 22 so that it will overflow at 256 after 234 ticks
' NOTE: The load command does the inversion for you (256-value or 65536-value) |
S tem sem dosegel, da dobim časovno prekinitev vsakih 20 msec
Prekinitveno rutino predelam toliko, da mi za vsakih deset prekinitve postavi bit
z imenim Perioda tako:
Koda: |
Timer0_ISR:
load timer0, Timer0Reload
dim t0i as byte
dim perioda as bit
incr toi
if toi > 10 then
set perioda
toi = toi - 10
endif
return |
2. Ko imam torej to narejeno, bi v nekem števcu štel te periode.
Timer interrupt rutina vsakih 200 msec postavi bit, kar uporabim v glavnem programu
Koda: |
do
if perioda = 1 then
reset perioda
dim stevecp as byte ' števec period
incr stevecp
endif
...
loop |
3. sliko ki jo želim prikazati bi verjetno sestavil v posebni tabeli, data in bi posnetke prenašal v port z Lookup ukazi.
Koda: |
portb = looup(stevecp, tabela1)
if stevecp > max then stevecp = 1 |
Tabela bi pa izgledala recimo tako:
Koda: |
tabela1:
data &B11111111, &B01111111, &B10111111, &B11011111, &B11101111
data &B11110111, &B01111011, &B10111101, &B11011101, &B11101111 |
Razložil sem samo princip, kako bi se lotil problema. Upam, da dovolj razumljivo
vsak podatek v tabeli pomeni, kako bodo svetile diode (0 pomeni dioda sveti)
tabela je lahko velika kolikor imasš na razpolago flash spomina, seveda če je večja od 256 bajtov mora biti števecp definiran kot word in ne kot bajt.
Različne variante slik bi preklapljal tako, da bi uporabljal različen tabele...
Pa naprej v razmišljanje!
Vilko |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Ned Avg 26, 2007 8:59 am Naslov sporočila: |
|
|
Vilko hvala za lepo razložen postopek. bom si zdaj čas uzel in tole preštudirač. Light show je 8 kanalni,ter led diode sem uporabil kot indikator. Še enkrat hvala _________________ Denis |
|
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
|