|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Sob Jun 20, 2009 11:04 am Naslov sporočila: knight rider |
|
|
Pozdravljeni!
zanima me kako bi naredil v bascomu avr, da bi ob uganšanju ledic, tiste za prvo ki beži svetile manj? to da letijo v obe smeri imam napisano, nevem pa kako bi ivedel da bi ledice svetile manj. lahko dobim kak nasvet?
takole naj bi bilo: http://www.youtube.com/watch?v=zgpFC91MSVU
naprimer: 00011110 smer poti v desno
0%, 0%, 0% 25%, 50%, 75%, 100% 0%
Nazadnje urejal/a linel Sob Jun 20, 2009 11:09 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
krupivnk Član
Pridružen-a: Tor 27 Feb 2007 20:45 Prispevkov: 335 Aktiv.: 1.60 Kraj: Lj
|
Objavljeno: Sob Jun 20, 2009 11:08 am Naslov sporočila: |
|
|
Uporabi PWM (pulzno širinska modulacija). Prva ledica gori konstantno.Drugo ledico prižigaš in ugašaš tako hitro da je to človeškemu očesu nevidno, prav tako vse naslednje ledice le da je pri vsaki naslednji razmerje med '1' in '0' vse manjše.
|
|
Nazaj na vrh |
|
|
Tonci Član
Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.28 Kraj: Domžale
|
Objavljeno: Sob Jun 20, 2009 11:25 am Naslov sporočila: |
|
|
Če te zanima, ti lahko pošljem 2 čipa (smd) ki imada 10 pwm izhodov, prek SPI pa pošlješ podatke! Sam ju še nisem stestiral, ker moram dokončati obstoječi projekt!
|
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Sob Jun 20, 2009 1:01 pm Naslov sporočila: knight rider |
|
|
rad bi naredil z mikrokontrolerjem... kje bi lahko našel opisano kako se uporablja pwm v bascomu?
|
|
Nazaj na vrh |
|
|
Sokrat Član
Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 25.03
|
Objavljeno: Sob Jun 20, 2009 1:13 pm Naslov sporočila: |
|
|
Najbrz nikjer, ker veckanalni softverski PWM ni stvar, ki bi jo potrebovalo mnogo ljudi, tisti, ki pa jo rabijo, pa rabijo specificno za svojo situacijo.
Bos napisal svoj programcek, pa bo. Zacni s timerjem s cimvisjo frekvenco (ovira je dolzina interrupt handlerja, ta se mora v celoti izvesti preden pride do anslednjega interrupta), vsakemu kanalu dodaj par spremenljivk za stevec in koncno vrednost in potem v interrupt handlerju povecuj stevec, nato pa ugasni vsak kanal, katerega vrednost je prisla do prednastavljene koncne vrednosti, ob vsakem okroglem intervalu (ko pretece 100% casovnih enot ene periode) pa ponovno resetiraj stevce za vse kanale ter jih vkljuci.
Seveda bo v Bascomu ta PWM precej neucinkovit - take stvari se pise v assemblerju, da prides do cimvisje ffrekvence timerja in s tem cimbolj fine granulacije periode.
_________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
|
Tonci Član
Pridružen-a: Tor 05 Avg 2008 18:14 Prispevkov: 629 Aktiv.: 3.28 Kraj: Domžale
|
Objavljeno: Sob Jun 20, 2009 2:04 pm Naslov sporočila: |
|
|
Evo še link če te zanima! link Lahko vsako ledico posebaj nastaviš!
|
|
Nazaj na vrh |
|
|
krupivnk Član
Pridružen-a: Tor 27 Feb 2007 20:45 Prispevkov: 335 Aktiv.: 1.60 Kraj: Lj
|
Objavljeno: Sob Jun 20, 2009 2:40 pm Naslov sporočila: |
|
|
Jaz sem pred časom takšnega knight riderja realiziral s frekvenco PWM-ja 100Hz. Pa ni zaznati nobenega utripanja in zgleda vredu...
Opis: |
filmček je v gp3 formatu (snemano s telefonom) |
|
Download |
Ime datoteke: |
Video005.rar |
Velikost datoteke: |
128.25 KB |
Downloadano: |
62 krat |
|
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Sob Jun 20, 2009 3:42 pm Naslov sporočila: knight rider |
|
|
uf, prav lepo se vidi, ko bi znal to naredit kako se določi PWM v bascomu? in pa kako jo uporabit?
|
|
Nazaj na vrh |
|
|
krupivnk Član
Pridružen-a: Tor 27 Feb 2007 20:45 Prispevkov: 335 Aktiv.: 1.60 Kraj: Lj
|
Objavljeno: Sob Jun 20, 2009 4:03 pm Naslov sporočila: |
|
|
Praviš da si začetnik: Ne se preveč zaletet v sam projektek knight rider...
Najprej naredi da bo ledica utripala, potem naredi tako da bo malo dlje svetila kot bo ugasnjena, potem povečaj frekvenco, tako da ne boš več mogel zaznati utripanja, potem naredi da se ti bo svetilnost spreminjala v odvisnosti od potencimetra ki ga boš priključil na uC.... Potem pa boš imel potrebno znanje da se boš lotil željenega projekta...
Za sam baskom ti pa ne morem nič svetovati ker ga ne uporabljam...
|
|
Nazaj na vrh |
|
|
program_er Član
Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 11.06 Kraj: Maribor (Pohorje)
|
Objavljeno: Sob Jun 20, 2009 4:58 pm Naslov sporočila: |
|
|
Zadnjič sem se malo spoznal z PWMji pri AVRjih, tako da zdaj že delam resnejše PWM projekte.
To pa je bil moj prvi PWM programček za motor:
Koda: |
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 4800
Enable Timer1
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
Dim A As Word
Pwm1a = 0
A = 0
Goto Prvidel
Prvidel:
Do
Print A
Pwm1a = A
Waitms 25
A = A + 2
Loop Until A > 1021
Goto Drugidel
Drugidel:
Do
Print A
Pwm1a = A
Waitms 100
A = A - 10
Loop Until A = 0
Goto Prvidel
End |
Frekvenca tega PWMja je nekaj manj kot 200Hz, za LED boš moral dat prescale na 1, torej Prescale = 1, da bo frekvenca 64x višja (mogoče se motim). Program deluje tako, da se PWM vrednost vsakih 25ms poveča za 2 in ko pride skoraj na maximum, gre nazaj dol do 0. In tako LEDica ali motor "valovi". Poiskusi.
ps.: Frekvenca PWM v Bascom-AVR se računa tako:
Frekvenca kvarca / Prescaler / X-bitni PWM = x Hz
Če uporabljaš interni 1M kvarc in vzameš 10-bitni PWM ter Prescaler 1, dobiš:
1000000 / 1 / 1024 = 976,56 Hz, kar bi že moralo biti ok.
Če pa imaš zunanji kvarc 11,0592M in iste nastavitve, je pa še boljše!
11059200 / 1 / 1024 = 10800 Hz = 10,8kHz, kar je že skoraj preveč.
Upgrade:
Zgornji programček pa lahko tudi malo nadgradiš:
Koda: |
$regfile = "m16def.dat"
$crystal = 11059200
Enable Timer1
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
Config Adc = Single , Prescaler = Auto , Reference = Aref
Dim A As word, B as Word, Adc0 As Word , Adc1 As Word
A = 0 : B = 0 : Adc0 = 0 : Adc1 = 0
Goto Gor
Gor:
Do
Adc0 = Getadc(0)
Adc1 = Getadc(1)
Pwm1a = A
A = A + 2
Waitms Adc0
Loop Until A > Adc1
Goto Dol
Dol:
Do
Adc0 = Getadc(0)
Adc1 = Getadc(1)
Pwm1a = A
A = A - 2
Waitms Adc0
Loop Until A < 2
Goto Gor
End
|
Program je po funkciji enak prvemu, le da tu z enim potenciometrom nastavljaš čas dvigovanja PWMja in s tem čas, kako hitro bo PWM vrednost prišla do maximuma, ki pa ga nastaviš z drugim potenciometrom. Malo se "igraj", če pa ti kaj nebo šlo, pa kar piši.
ps.: Če ti kaj nebo šlo, me lahko dodaš na Skypu - potokbojan, zdaj ko so počitnice imam nekaj časa, se lahko pomeniva. Od takrat, ko sem delal Sledibota, mi PWM v Bascomu kar dobro gre...
_________________ Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
|
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14557 Aktiv.: 65.25 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jun 20, 2009 10:29 pm Naslov sporočila: |
|
|
Na hitro zmetano skupaj v assemblerju. Program ni pisan preveč varčno. Ker gre za slične rutine, sem uporabljal makroje. Uporabljen tiny26, ki je bil ravno na testni plošči.
Izhodi so na portua 0-7 interni oscilator 4Mhz
Komentarjev nisem pisal - če koga glede programa kaj zanima, lahko vpraša...
Koda: |
;------------------------------------
;testni program "kinight rider"
;Silvo
;www.elektronik,si
;------------------------------------
.include "tn26def.inc"
.def st1=r1
.def st2=r2
.def st3=r3
.def st4=r4
.def st5=r5
.def st6=r6
.def st7=r7
.def st8=r8
.def stmp=r9
.def tmp=r16
.def mtmp=r17
;----- sram
.equ k1=0x60
.equ k2=0x61
.equ k3=0x62
.equ k4=0x63
.equ k5=0x64
.equ k6=0x65
.equ k7=0x66
.equ k8=0x67
;makri
;///////////////////////
.macro PWM
lds mtmp,@1
tst mtmp
breq PC+5
cpi mtmp,1
breq PC+6
dec @0
breq PC+3
cbi PORTA,@2
ret
lds @0,@1
sbi PORTA,@2
ret
.endm
.macro koraki
ldi tmp,@0
sts k1,tmp
ldi tmp,@1
sts k2,tmp
ldi tmp,@2
sts k3,tmp
ldi tmp,@3
sts k4,tmp
ldi tmp,@4
sts k5,tmp
ldi tmp,@5
sts k6,tmp
ldi tmp,@6
sts k7,tmp
ldi tmp,@7
sts k8,tmp
rcall Pavza70mS
.endm
;\\\\\\\\\\\\\\\\\\\\\\\\\\\
.org 0x0
rjmp GlProg
.org 0x06
rjmp T0Prek
.org 0xD
GlProg:
ldi tmp,low(ramend)
out sp,tmp
ldi tmp,0xff
out ddra,tmp
ldi tmp,0b10
out TCCR0,tmp
ldi tmp,0b10
out TIMSK,tmp
sei
; testni del za ugotovitev usteznih PWM vrednosti
; koraki 1,4,9,16,28,35,42,59
; nop
; rjmp PC-1
gz:
koraki 1,0,0,0,0,0,0,0
koraki 7,1,0,0,0,0,0,0
koraki 10,7,1,0,0,0,0,0
koraki 30,10,7,1,0,0,0,0
koraki 0,30,10,7,1,0,0,0
koraki 0,0,30,10,7,1,0,0
koraki 0,0,0,30,10,7,1,0
koraki 0,0,0,0,30,10,7,1
koraki 0,0,0,0,0,30,10,7
koraki 0,0,0,0,0,0,30,10
koraki 0,0,0,0,0,0,0,30
koraki 0,0,0,0,0,0,0,1
koraki 0,0,0,0,0,0,1,7
koraki 0,0,0,0,0,1,7,10
koraki 0,0,0,0,1,7,10,30
koraki 0,0,0,1,7,10,30,0
koraki 0,0,1,7,10,30,0,0
koraki 0,1,7,10,30,0,0,0
koraki 1,7,10,30,0,0,0,0
koraki 7,10,30,0,0,0,0,0
koraki 10,30,0,0,0,0,0,0
koraki 30,0,0,0,0,0,0,0
rjmp gz
;-----------------------------------------------------------
;Pavza 70mS Oscilator 4Mhz
;-----------------------------------------------------------
Pavza70mS:
push r20
push r21
push r22
ldi r20,154
ldi r21,108
ldi r22,2
P_zanka1:
dec r20
brne P_zanka1
dec r21
brne P_zanka1
dec r22
brne P_zanka1
pop r22
pop r21
pop r20
nop
ret
;----------------------------------------------------
;prekinitvena rutina
;----------------------------------------------------
T0Prek:
in stmp,SREG
push tmp
; sbi PORTA,1
rcall Kanal1
rcall Kanal2
rcall Kanal3
rcall Kanal4
rcall Kanal5
rcall Kanal6
rcall Kanal7
rcall Kanal8
pop tmp
out SREG,stmp
reti
Kanal1:
PWM st1,k1,0
Kanal2:
PWM st2,k2,1
Kanal3:
PWM st3,k3,2
Kanal4:
PWM st4,k4,3
Kanal5:
PWM st5,k5,4
Kanal6:
PWM st6,k6,5
Kanal7:
PWM st7,k7,6
Kanal8:
PWM st8,k8,7
|
Opis: |
|
Download |
Ime datoteke: |
P6200059.ZIP |
Velikost datoteke: |
3.46 MB |
Downloadano: |
25 krat |
_________________ lp
Silvo |
|
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: 79 dni
Powered by phpBB © 2001, 2005 phpBB Group
|