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


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Sre Okt 31, 2007 10:37 am Naslov sporočila: |
|
|
Zdravo!
Poskušam narediti PWM regulacijo lučke, tako, da se počasi prižiga in nato počasi ugaša. Do tukaj sem prišel:
Vsakič ko kličem delay, se eni pavzi (delay1) zvišuje čas, drugi (delay2) pa znižuje. Vrednost f zvišujem z incf, samo potem manjka še, da to vrednost zapišem v register. Kateri ukaz uporabiti tukaj?
Kasneje bo vse to uporalbjeno v namizni (okrasni) lučki, ki bo imela nekaj RGB ledic, te pa bodo spreminjale barve na vsake toliko časa.
Koda: |
movlw 0x01
movwf COUNT1
Start movlw 0x01
movwf GPIO
call Delay1
movlw 0x00
movwf GPIO
call Delay2
goto Start
Delay1 incf COUNT1,1
Loop1 decfsz COUNT1,1
goto Loop1
return
Delay2 decf COUNT2,1
Loop2 decfsz COUNT2,1
goto Loop2
return
end |
|
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Čet Nov 01, 2007 1:53 pm Naslov sporočila: |
|
|
Vrjamem, da želiš sam narediti ta projekt. Lahko ti pa vseeno pomaga en tak že obstoječ poglej na tej strani kako se je avtor lotil zadeve, vključuje tudi izvorno kodo
P.S.: Ko sem dostopal do te strani je trajalo kar nekaj časa da se odpre. |
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Čet Nov 01, 2007 4:06 pm Naslov sporočila: |
|
|
Zdravo!
Sem tole stran malo pogledal, downloadal .hex kodo (tisto 12F675 ready), vpišem na PIC, malo pogledam kako to sploh deluje in sestavim na protoboardu.
Hmm, v prvo ni delovalo. Tisto stikalo naj bi dalo PIC v sleep, vendar pri meni nima efekta. Ledice ne gorijo. Moja shema ni čisto takšna, kot je tam, ledice sem priklopil kar direktno na izhode.
Sem pogledal tudi spodaj, kjer piše nekaj glede internega timerja, vendar pri meni deluje ... Hitro napisan program, ki teže na interni oscilator, deluje BP.
Bom še malo probaval ...  |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Čet Nov 01, 2007 6:27 pm Naslov sporočila: |
|
|
TECHNIC je napisal/a: |
Tisto stikalo naj bi dalo PIC v sleep, vendar pri meni nima efekta. Ledice ne gorijo. |
Če vklopiš ledice in nato "uspavaš" PICa, bodo ledice svetile še naprej. Če pa poskrbiš, da ledice utripajo in potem uspavaš PICa, bo ledica nehala utripati in ostalo bo zadnje stanje. Ob uspavanju se programski števec ustavi. Glede na stanja ustreznih registrov pa ob prebujanju program steče naprej na predvidenem mestu.
Citiram: |
Moja shema ni čisto takšna, kot je tam, ledice sem priklopil kar direktno na izhode. |
Brez preduporov Ledice brez preduporov se NE sme priključiti na 5V izhode Skuril boš ledico ali (v najslabšem primeru) izhod PICa. Rabiš 470Ohm do 1kOhm upor. izhod]----[upor]----|>|----(gnd)
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Čet Nov 01, 2007 6:33 pm Naslov sporočila: |
|
|
Mislim ... seveda, z upori. Mislil sem direktno, brez tranzistorja.
Bom sedaj še poskusil ... drugače pa ni kakšnega preprostega ukaza, ki bi lahko uresničil tisti program nekaj postov nazaj? Če delam sam, lažje spreminjam program, če mi ni kaj všeč.
EDIT: Uspelo. Deluje prav lepo (RGB kontroler iz linka), s tipko lepo preklapljaš med programi. Verjetno sem nazadnje pozabil iztakniti jumper, zato pa so bili vsi izhodi aktivno nizki (active low). Če stikalo držiš za več časa, gre v sleep mode. Samo ni mi uspelo priti nazaj. Sčasom sem potem le zbudil PICa.
Ima pa zanimive programe. Od počasnih, do takšnih, ki bi bili za v disko.  |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Čet Nov 01, 2007 7:39 pm Naslov sporočila: |
|
|
TECHNIC je napisal/a: |
Vrednost f zvišujem z incf, samo potem manjka še, da to vrednost zapišem v register. Kateri ukaz uporabiti tukaj?
|
MOVWF register
ta ni dober ukaz? |
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Čet Nov 01, 2007 7:47 pm Naslov sporočila: |
|
|
Takole ne deluje:
Koda: |
Delay1 incf COUNT1,1
movwf COUNT1
Loop1 decfsz COUNT1,1
goto Loop1
return |
 |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Čet Nov 01, 2007 8:07 pm Naslov sporočila: |
|
|
Ta tvoj delay je hecno napisan. Prvo vprašanje kako velik delay potrebuješ.
Tule je ena od možnih delay kod:
100us pri 8MHz oscilatorju
Koda: |
...
MOVLW 0x42
MOVWF DTEMP
loop: DECFSZ DTEMP,1
GOTO loop
NOP
....
|
|
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Čet Nov 01, 2007 11:05 pm Naslov sporočila: |
|
|
Rabim še, da bi se vsak "krog" čas pavze (v tem primeru) povečal. Zato je ukaz incf. Na začetku je vrednost pavze1 najmanjša (LED je prižgana 1/255 časa), vrednost pavze2 pa največja. Vsakič se dolžina pavze1 poveča za 1, pavze2 pa zmanjša za ena. Tako se počasi povečuje razmerje med prižgano in ugasnjeno LED.
Na kakšen način bi lahko to še izvedel?
Lahko bi za vsak korak vpisal za eno višjo številko, vendar bi to vzelo preveliko prostora.
Koda: |
movlw 0x01 ;prižgi LED
movwf GPIO
movlw 0x01 ;povečaj vrednost v COUNT1 za 1 korak
movwf COUNT1
call Delay1 ;prva pavza
movlw 0x00 ;ugasni LED
movwf GPIO
movlw 0xfe ;zmanjšaj vrednost COUNT2 za 1 korak
movwf COUNT2
call Delay2 ;druga pavza
... |
|
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Ned Dec 02, 2007 12:08 pm Naslov sporočila: |
|
|
Zdravo!
Tokrat gre za 16F84A.
Delam airsoft fps meter (chronograph).
Za senzorja sta uporabljena dva odprta optocouplerja. Dodana sta še dva ojačevalnika in Set-Reset latch - tako da na izhodu tega sklopa dobimo aktivno visok signal. Signal je visok dokler je naboj med senzorjem. Ko pride do prvega senzorja, gre izhod na visoko stanje, ko pa mimo drugega, gre pa na nizko stanje.
namesto tega __/''\______/''\__
je na izhodu tole __/''''''''''''''''''''\__
Sedaj pa program.
Ko senzor zazna prvi (dvigajoči) rob, se ena spremenljivka višati, recimo za ena na vsake 50 us. Program tudi vsak krog preverja za drugi rob. Ko zazna drugi (padajoči) rob, tisto spremenljivko vnese v PCL števnik - uporaba v tabeli.
Vprašanje: Kako se lahko izognem uporabi 255 mest dolgi tabeli?
Tak način ni idealen. Čas se tu linearno spreminja, kar pomeni da bo natančnost pri velikih hitrostih zelo majhna, pri nižjih pa precej večja.
Rezultat bo prikazan s tremi LED zasloni 0 - 199 m/s.
Kako bi se lahko drugače lotil programa?
Hvala za odgovore. |
|
Nazaj na vrh |
|
 |
TECHNIC Član


Pridružen-a: Tor 31 Okt 2006 11:18 Prispevkov: 582 Aktiv.: 2.57 Kraj: Senovo
|
Objavljeno: Ned Dec 02, 2007 1:25 pm Naslov sporočila: |
|
|
Malo sem še pobrskal po internetu in našel en preprost merilnik. Namesto 7-segmentnih zaslonov je uporabljen merilnik frekvence.
PIC šteje čas med senzorjema, nato ga samo linearno poveča (v mojem primeru sem izračunal, da je potrebno dobljeni čas množiti krat 20). Iz tega časa potem tvori pravokotni signal. Če je izmerjena frekvenca recimo 120 Hz, to pomeni 120 m/s.
Za merilnik bom uporabil tanov multimeter (VA 18 B) , ki ima merilnik frekvence.
To pa zato, ker nisem našel merilnika frekvence kot vgradni instrument. |
|
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: 491 dni
Powered by phpBB © 2001, 2005 phpBB Group
|