www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Čas instrukcije
Pojdi na stran 1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.06
Kraj: Koroška-Mežica

PrispevekObjavljeno: Čet Jun 12, 2008 7:04 pm    Naslov sporočila:  Čas instrukcije Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.27
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 12, 2008 7:27 pm    Naslov sporočila:   Odgovori s citatom

Navadno imaš tabelo ukazov (asm) s podatkom v koliko ciklih se ukaz izvrši.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.67
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Čet Jun 12, 2008 7:35 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.06
Kraj: Koroška-Mežica

PrispevekObjavljeno: Čet Jun 12, 2008 7:49 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.06
Kraj: Koroška-Mežica

PrispevekObjavljeno: Čet Jun 12, 2008 7:56 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.67
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Čet Jun 12, 2008 7:59 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.06
Kraj: Koroška-Mežica

PrispevekObjavljeno: Čet Jun 12, 2008 8:04 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.67
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Čet Jun 12, 2008 8:09 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
kavelj22
Član
Član



Pridružen-a: Tor 23 Jan 2007 23:56
Prispevkov: 465
Aktiv.: 2.22
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 12, 2008 8:21 pm    Naslov sporočila:   Odgovori s citatom

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
Very Happy

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.06
Kraj: Koroška-Mežica

PrispevekObjavljeno: Čet Jun 12, 2008 8:23 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 6.06
Kraj: Koroška-Mežica

PrispevekObjavljeno: Čet Jun 12, 2008 8:25 pm    Naslov sporočila:   Odgovori s citatom

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
Very Happy

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
kavelj22
Član
Član



Pridružen-a: Tor 23 Jan 2007 23:56
Prispevkov: 465
Aktiv.: 2.22
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 12, 2008 8:28 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
kavelj22
Član
Član



Pridružen-a: Tor 23 Jan 2007 23:56
Prispevkov: 465
Aktiv.: 2.22
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 12, 2008 8:32 pm    Naslov sporočila:   Odgovori s citatom

Aha si me prehitel Smile

Citiram:
Ampak, zakaj se večina operacij izvaja pri tretjini frekvence? Je pri vseh procesorjih tako?


To bo moral pa kdo drug povedat Wink

lp

_________________
Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
drVrh
Član
Član



Pridružen-a: Sre 20 Feb 2008 20:17
Prispevkov: 918
Aktiv.: 4.67
Kraj: Slovenija-Koroska-Prevalje-Lese

PrispevekObjavljeno: Čet Jun 12, 2008 8:42 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.27
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jun 12, 2008 8:56 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2, 3  Naslednja
Stran 1 od 3

 
Pojdi na:  
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: 69 dni


Powered by phpBB © 2001, 2005 phpBB Group