|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 6.08 Kraj: Koroška-Mežica
|
Objavljeno: Čet Jun 12, 2008 7:04 pm Naslov sporočila: Čas instrukcije |
|
|
Zanima me, če piše v datasheetih posameznih kontrolerjev, v koliko urinih ciklih opravi ta mikrokontroler eno navadno in eno vejitveno instrukcijo pri taki in taki frekvenci (največji dovoljeni), ter v kakšnem času se to zgodi? Namreč se še učim programirati, pa zakasnitve delam z zankami na enostavnih primerih vklapljanja in izklapljanja ledice na določenih pinih po določenem času, pa bi si rad izračunal koliko ponovitev ene zanke je potrebnih, da bom dosegel želen čas zakasnitve...Ker sem še amater tudi nisem dovolj izkušenj za gledanje datasheetov, kar sem opazil sam, ko ne znam najdit tega kar iščem sedaj...Upam, da se na to da odgovoriti splošno, če ne pa bom navedel konkreten primer (vrsta kontrolerja, program...)
Hvala
Lp |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.30 Kraj: Ljubljana
|
Objavljeno: Čet Jun 12, 2008 7:27 pm Naslov sporočila: |
|
|
Navadno imaš tabelo ukazov (asm) s podatkom v koliko ciklih se ukaz izvrši. |
|
Nazaj na vrh |
|
|
drVrh Član
Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.68 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Čet Jun 12, 2008 7:35 pm Naslov sporočila: |
|
|
Glej v asemblerju recimo takšna koda povzroči utripanje LED!:
Vse kode se nanašajo na PIC 16F84
Koda: |
BSF STATUS,5 ;GREMO V BANK 1
MOVLW 0x00 ;NALOŽIMO SAME NIČLE V W
MOVWF TRISA ;POŠLJEMO VSEBINO W V TRISA
BCF STATUS,5 ; NAZAJ V BANK 0
ZACNI MOVLW b`01000` ; V reg. W pošljemo 01000, kar pomeni da bomo log.
MOVWF PORTA1 ; 1 poslali na pin 4 v Port-u A. Ta pin bo visok!
MOVLW 0x00 ; Pišemo ničle v register W.
MOVWF PORTA ; POŠLJEMO VSEBINO W V PORTA IN VSE PINE
;POSTAVIMO NIZKO (LOG. 0)
GOTO ZACNI ; SKOK NAZAJ NA LABELO ZACNI |
Če pogledamo nazaj v program utripajočega LED vsak ukaz traja en urin cikel. Če uporabljamo 4MHz kristal traja vsak ukaz 1/4 MHz kar pomeni 1uS. Ker za utripanje uporabljamo 5 ukazov bo vse skupaj trajalo 5uS. Čeprav LED utripa mi tega ne vidimo ker je utripanje za človeško oko prehitro. Zato moramo utripanje upočasniti! To pa naredimo z zakasnitvami oz. pavzami!
Potrebujemo spremenljivko, ki jo uporabljamo kot STEVEC Potem potrebujemo neko stevilo od katerega bomo odštevali; največja vrednost ki jo lahko izberemo je 255 ali 0xFF po šestnajstiško!
Več o teh števcih in o tem imaš v knjigi Programirajmo mikrokontrolerje!
Torej koda bo zgledala tako:
Koda: |
###################
;OPIS: Program v zanki prižiga in ugaša
; LED na pinu 4 Port-a A.
;##########################
;*********************************************
; Definirajmo konstante
;*********************************************
STEVEC1 EQU 0x0C ;prvi števec za pavzo
STEVEC2 EQU 0x0D ;drugi števec za pavzo
;*********************************************
; Nastavitve PORTA/ov
;*********************************************
BSF STATUS,5 ;gremo v Bank 1
MOVLW 0x00 ;naložimo nile v reg. W
MOVWF TRISA ;nastavimo vse pine kot izhode
BCF STATUS,5 ;nazaj v Bank 0
;*********************************************
; Prižgimo LED
;*********************************************
ZACNI MOVLW 4 ;naložimo 4 v reg. W
MOVWF PORTA ;pin 4 je visok (LED gori)
;*********************************************
; Pavza 1
;*********************************************
MOVLW 255 ;v W naložimo vrednost 255
MOVWF STEVEC1 ;jo vpišemo v STEVEC1
MOVWF STEVEC2 ;in STEVEC2 (vrednost 255 v W se ne spreminja,
;dokler je mi ne spremenimo
ZANKA1
DECFSZ STEVEC1,1 ;odštej 1 od 255
GOTO ZANKA1 ;e ni 0 skoi na ZANKA1, drugae nadaljuj na naslednjem ukazu
DECFSZ STEVEC2,1 ;odštej 1 od 255
GOTO ZANKA1 ;e ni 0 skoi na ZANKA1, drugae nadaljuj
;*********************************************
; Konec pavze - ugasni LED
;*********************************************
MOVLW 0x00 ;v W naloži 0
MOVWF PORTA ;in postavi vse bite Port-a A nizko
;*********************************************
; Pavza 2
;*********************************************
MOVLW 255 ;v W naložimo vrednost 255
MOVWF STEVEC1 ;jo vpišemo v STEVEC1
MOVWF STEVEC2 ;in STEVEC2 (vrednost 255 v W se ne spreminja,
;dokler je mi ne spremenimo
ZANKA2
DECFSZ STEVEC1,1 ;odštej 1 od 255
GOTO ZANKA2 ;cece nini 0
DECFSZ STEVEC2,1 ;odštej 1 od 255
GOTO ZANKA2 ;č ni 0 skoi na ZANKA1, drugae nadaljuj
;**********************************************
; Nazaj na zacetek
;**********************************************
GOTO ZACNI ;pojdi nazaj in prižgi spet LED
END ;Oznanimo prevajalniku, da je konec programa.
;Ta ukaz koristi samo prevajalnik!
;**********************************************
; KONEC
;****************************************
|
Pa oprosti če ni lepo napisano! Drugače pa knjiga Programiranje PIC mikrokontrolerje ti je Biblija ali Sveto pismo! _________________ Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega |
|
Nazaj na vrh |
|
|
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 6.08 Kraj: Koroška-Mežica
|
Objavljeno: Čet Jun 12, 2008 7:49 pm Naslov sporočila: |
|
|
Heh, vem, kaj pa, ko knjige ne bo več in bom delal na drugih primerih in kontrolerjih. Ne lej, vem kako se program napiše, znam izračunati, mene samo zanima, kje dobivam podatke o posameznih kontrolerjih, nisem vprašal za podatke same...Bom še malo podrobneje pogledal datasheet.
Hvala in lp |
|
Nazaj na vrh |
|
|
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 6.08 Kraj: Koroška-Mežica
|
Objavljeno: Čet Jun 12, 2008 7:56 pm Naslov sporočila: |
|
|
Aha sem že našel: Kl!k
Kako pa sedaj izračunam čas t, recimo za 4Mhz frekvenco. Neka formula je 1/t, da je frekvenca, se motim? Še nekaj. Je tista enka cikel? V primeru 2 ciklov je 2? Prosim za eno razlago... |
|
Nazaj na vrh |
|
|
drVrh Član
Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.68 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Čet Jun 12, 2008 7:59 pm Naslov sporočila: |
|
|
Z 4MHz kristalom lahko izračunaš da traja ena instrukcija en urin cikel torej 1uS!
Če so dve, tri, štiri instrukcije pa bo tudi čas dve, tri, štiri uS.
To je edini problem asemblerja, s temi urini cikli ki jih moraš računati, recimo v mikroBasicu ti tega ni treba in še marsi kje drugje programskih jezik tam samo postaviš instrukcijo: npr; delay_ms(1000) to je v mikroBasicu in če boš to uporabil v kodi bo program obstal za 1000uS oz. eno sekundo!
Drugače pa mislim, da to tudi piše v datasheetih glede teh urinih ciklov. _________________ Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega |
|
Nazaj na vrh |
|
|
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 6.08 Kraj: Koroška-Mežica
|
Objavljeno: Čet Jun 12, 2008 8:04 pm Naslov sporočila: |
|
|
To je konkreten podatek oziroma rešitev. Menda ja ne bom za vsak nov oscilator tukaj spraševal, kakšen je čas. Zanima me, kako to izračunaš... |
|
Nazaj na vrh |
|
|
drVrh Član
Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.68 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Čet Jun 12, 2008 8:09 pm Naslov sporočila: |
|
|
V knjigi Programirajmo PIC mikrokontrolerje piše:
Citiram: |
Pri 4MHz kristalu se vsaka instrukcija izvede v le 1uS vejitvene pa v 2us! |
Po moje je potem če je 8 MHz kristal potem se instrukcija izvede v 2uS in pa vejitvena v 4uS! _________________ Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega |
|
Nazaj na vrh |
|
|
kavelj22 Član
Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.22 Kraj: Ljubljana
|
Objavljeno: Čet Jun 12, 2008 8:21 pm Naslov sporočila: |
|
|
Ce se ne motim moras uro oscilatorja deliti z 4 da dobis dejansko frekvenco s katero deluje mikrokontroler (zakaj - nevem, nekje sem enkrat prebral pa si nisem zapomnil).
in potem enostavno delis:
za 4MHz kristal
4MHz/4=1MHz
f=1/t, se pravi 1/1MHz=1usec
za 20MHz
20MHz/4=5MHz
f=1/5MHz=200nsec
Kako je pa z vejitvenimi pa spet nevem
Ce sem povedal bedarijo me naj kdo popravi!
lp _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
|
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 6.08 Kraj: Koroška-Mežica
|
Objavljeno: Čet Jun 12, 2008 8:23 pm Naslov sporočila: |
|
|
Tako, piše pa tudi, da se večina instrukcij izvede pri tretjini frekvence oscilatorja, torej 4Mhz je potem 1Mhz, se pravi t0=1/1Mhz= to=1/10na6 in dobimo rezultat 10na-6, se pravi 1us.
Ampak, zakaj se večina operacij izvaja pri tretjini frekvence? Je pri vseh procesorjih tako? |
|
Nazaj na vrh |
|
|
ljudsko Član
Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 6.08 Kraj: Koroška-Mežica
|
Objavljeno: Čet Jun 12, 2008 8:25 pm Naslov sporočila: |
|
|
kavelj22 je napisal/a: |
Ce se ne motim moras uro oscilatorja deliti z 4 da dobis dejansko frekvenco s katero deluje mikrokontroler (zakaj - nevem, nekje sem enkrat prebral pa si nisem zapomnil).
in potem enostavno delis:
za 4MHz kristal
4MHz/4=1MHz
f=1/t, se pravi 1/1MHz=1usec
za 20MHz
20MHz/4=5MHz
f=1/5MHz=200nsec
Kako je pa z vejitvenimi pa spet nevem
Ce sem povedal bedarijo me naj kdo popravi!
lp |
Z vejitvenimi je isto, le da dejansko frekvenco (se pravi tisto tretjino) podvojiš ali potrojiš...odvisno, koliko strojnih ciklov operacija potrebuje. |
|
Nazaj na vrh |
|
|
kavelj22 Član
Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.22 Kraj: Ljubljana
|
Objavljeno: Čet Jun 12, 2008 8:28 pm Naslov sporočila: |
|
|
Pic potrebuje 4 strojne cikle za izvrsitev instrukcije!!!
lp _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
|
kavelj22 Član
Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.22 Kraj: Ljubljana
|
Objavljeno: Čet Jun 12, 2008 8:32 pm Naslov sporočila: |
|
|
Aha si me prehitel
Citiram: |
Ampak, zakaj se večina operacij izvaja pri tretjini frekvence? Je pri vseh procesorjih tako? |
To bo moral pa kdo drug povedat
lp _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
|
drVrh Član
Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.68 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Čet Jun 12, 2008 8:42 pm Naslov sporočila: |
|
|
Po moje zato ker se frekvenca deli na tri dele in en del gre kaj pa vem recimo na Vpp nogico ena gre na Vss in en del gre pa na Vdd. Po moje je zato tretjina frekvence namenjena izvajanju programa v mikrokontrolerju!
Samo tudi mislim da se ne izvaja program z tretjino frekvence ampak z četrtino frekvence!
Mogoče bi več o tem nam povedal Silvo! _________________ Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega |
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.30 Kraj: Ljubljana
|
Objavljeno: Čet Jun 12, 2008 8:56 pm Naslov sporočila: |
|
|
ljudsko je napisal/a: |
Ampak, zakaj se večina operacij izvaja pri tretjini frekvence? Je pri vseh procesorjih tako? |
Na splošno ni pravila.
Najprej moraš pogledati, kakšna je povezava med interno uro (ciklom) in frekvenco oscilatorja. Potem lahko izračunaš periodo cikla.
Perioda cikla je lahko večja, enaka, ali manjša od periode oscilatorja.
Koliko ciklov traja določen ukaz je v veliki meri odvisno od družine mikrokontrolerja.
Npr. 8bit AVR precej ukazov izvrši v enem ciklu. |
|
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: 47 dni
Powered by phpBB © 2001, 2005 phpBB Group
|