|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
klemen Član
Pridružen-a: Sre 01 Okt 2003 16:18 Prispevkov: 28 Aktiv.: 0.13 Kraj: Sežana
|
Objavljeno: Ned Feb 22, 2004 12:58 pm Naslov sporočila: Računanje zakasnitve |
|
|
Pozdravljeni zanima me kako naj preračunam oziroma sestavim program, ki bo v picu povzročil zakasnitev (delay).
Primer: Rad bi da je na pinu gp0 frekvenca 10Hz. Izračunam čas po formuli f=1/t in dobim, da je zakasnitev 0,1s. Program za realizacijo naj bi izgledal nekako takole:
bsf GP0
call delay
bcf GP0
call delay
Zanima me ali moja teorija drzi in kako nanj napisem kodo za zakasnitev (delay)? |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14557 Aktiv.: 65.26 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Feb 22, 2004 1:12 pm Naslov sporočila: |
|
|
klemen,
Seveda je izvedljivo tako kot si napisal. Napisano se mora zaključit v zanki. Stvar bo sicer funkcionirala, če s picem ne boš delal nič drugega. V koliko boš delal še kaj drugega boš moral dolžino te kode upoštevat v rutini pavze. Bolj elegantno je uporabiti prekinitveno rutino z uporabo TMR0 prekinitve.
Snami si priponi s posta PIC - generator kode _________________ lp
Silvo |
|
Nazaj na vrh |
|
|
klemen Član
Pridružen-a: Sre 01 Okt 2003 16:18 Prispevkov: 28 Aktiv.: 0.13 Kraj: Sežana
|
Objavljeno: Ned Feb 29, 2004 5:41 pm Naslov sporočila: |
|
|
Hm, kako pa bi to naredil z TMR0 zakasnitvijo, ali lahko malo razložiš? Ker te stvari ne poznam, sem bolj začetnik. |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14557 Aktiv.: 65.26 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Feb 29, 2004 5:59 pm Naslov sporočila: |
|
|
Na kratko:
Ob inicializaciji narediš sledeče
- v OPTION_REG nastaviš preddelilnik za TMR0 (PSA)
- ter določiš clock za TMR0 (T0CS)
- tam tudi nastaviš vrednost preddelilnika (PS2:PS0)
- v INTCON registru vključiš TMR0 prekinitev (T0IE)
-seveda moraš napisati prekinitveno rutino. Ob prekinitvi se v PC naloži vrednost 0x04 torej "kazalček" skoči na to lokacijo.
tam pač napišeš
Koda: |
org 0x04
goto PREKINITEV ;skok na prekinitveno rutino
|
sedaj se bo prekinitev izvajala točno po enakih intervalih kakršen je pač preddelilnik- V sami prekinitvi šteješ število prekinitev ter glede na to dobiš točen čas. Lahko delaš tudi korekcijo TMR0 zaradi lažjega izračuna (tako, da se TMR0 prekinitev izvaja točno ob "okrogli" številki. _________________ 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: 78 dni
Powered by phpBB © 2001, 2005 phpBB Group
|