Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako izračunati točnu vrijednost Loop petlje?

[es] :: Elektronika :: Mikrokontroleri :: Kako izračunati točnu vrijednost Loop petlje?

[ Pregleda: 3034 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ebaketa
Hrvatska

Član broj: 273882
Poruke: 1
*.adsl.net.t-com.hr.



Profil

icon Kako izračunati točnu vrijednost Loop petlje?21.12.2010. u 16:26 - pre 161 meseci
E ovako prije tri tjedna nabavio sam EasyPIC6 razvojni sustav i učim programirati u asembleru, pa me zanima može li mi tko pomoći kako točno izračunati vrijeme trajanja Loop petnje npr. ove ispod:
Code:

    movlw         0xFA
    movwf         COUNT1
    movlw         0xC8
    movwf         COUNT2
    movlw         0x0A
    movwf         COUNT3

Loop1          
    decfsz         COUNT1, 1         ;Umanji COUNT1 za 1
    goto         Loop1             ;Ako je 0 nastavi dalje
    decfsz         COUNT2, 1         ;Umanji COUNT2 za 1
    goto         Loop1             ;Ako je 0 nastavi dalje
    decfsz         COUNT3, 1         ;Umanji COUNT3 za 1
    goto         Loop1             ;Ako je 0 nastavi dalje


Mikrokontroler je PIC16F887 na 8MHz.

Unaprijed hvala.
 
Odgovor na temu

foxhunter1
KN03NL

Član broj: 234323
Poruke: 238
87.116.155.*



+48 Profil

icon Re: Kako izračunati točnu vrijednost Loop petlje?22.12.2010. u 20:22 - pre 161 meseci
Posto vec pises u asembleru, verujem da koristis MPLAB, kao IDE. Lepo napravis novi projekat u MPLABu, odaberes tvoj kontroler i kao simulator odaberes MPSIM. Kod njega postoji alatka 'Stop watch', sto bi mi rekli stoperica. Postavis brejkpointe tamo gde tebi odgovara i gledas proteklo vreme? To je laksi nacin, a tezi je da u setu instrukcija (postoji u data sheet-u za svaki kontroler) pogledas koliko traje izvrsenje svake instrukcije ... i malo mozganja i to je to.

Pozdrav..
73 de YU1OL
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: Kako izračunati točnu vrijednost Loop petlje?22.12.2010. u 22:31 - pre 161 meseci
Pogledajte i PicLoops (nađite ga na gogle). I na www.piclist.com imate par
programčića koji sami generišu asemblerski kod za zadatu pauzu.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Kako izračunati točnu vrijednost Loop petlje?23.12.2010. u 03:07 - pre 161 meseci
picloops: http://www.biltronix.com/picloops.html
ja cesce koristim pikloops: http://pikloops.sourceforge.net/

inace, pogledaj data sheet, strana 229 pa na dalje

MOV* je 1 cycle
DECFSZ je 2 cycle
GOTO je 2 cycle

uzmes i saberes koliko imas ciklusa, znas na kojoj frekvenciji ti radi pic ..

 
Odgovor na temu

zoligen
subotica

Član broj: 59732
Poruke: 81
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Kako izračunati točnu vrijednost Loop petlje?23.12.2010. u 10:44 - pre 161 meseci
Code:

     LIST P=16F84, R=DEC
        INCLUDE "P16F84.INC"
#DEFINE    BANK0    BCF    STATUS,5
#DEFINE    BANK1    BSF    STATUS,5

 __CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON &_WDT_OFF    ;CODE PROTECTION-OFF
                            ;OSCILATOR=XT
                            ;POWER UP TIMER-ON
                            ;WATCHDOG TIMER-OFF
    CBLOCK    0X0C
     BR0
     BR1
     BR2
     NBR0
     NBR1
     NBR2
    ENDC

    ORG 0X00
    GOTO MAIN    

MAIN: 
    BANK1
    MOVLW    B'01111'
    MOVWF    TRISA        
    MOVLW    B'00000000'
    MOVWF    TRISB
    BANK0    
    CLRF    PORTA
    CLRF    PORTB

    MOVLW    D'4'
    MOVWF    NBR2
    MOVLW    D'3'
    MOVWF    NBR1
    MOVLW    D'2'
    MOVWF    NBR0

    CALL    PAUZA

LOOP:    GOTO    LOOP

PAUZA:
        MOVF    NBR0,W
        MOVWF    BR0
P3:     MOVF    NBR1,W
        MOVWF    BR1
P2:     MOVF    NBR2,W
        MOVWF    BR2
P1:     DECFSZ    BR2,F
        GOTO    P1
        DECFSZ    BR1,F
        GOTO    P2
        DECFSZ    BR0,F
        GOTO    P3
        RETURN

    END



Ovo sam izvadio iz neke stare arhive mozda ce biti od pomoci.
registri BR0, BR1, i BR2 ne smeju imati vrednosti 0 ili 1

Broj ciklusa u rutini pauza se mogu izracunati:

6+(BR0*(BR1*((BR2-1)*3)))+(BR0*(BR1*7))-(BR0*3)+((BR0-1)*7)+2

Konkretno sa ovim vrednostima rezultat je 105

call i return nisu uracunati

Pozdrav!
 
Odgovor na temu

grobokap
dipling
Zagreb

Član broj: 278738
Poruke: 1
*.dsl.iskon.hr.



Profil

icon Re: Kako izračunati točnu vrijednost Loop petlje?02.02.2011. u 14:04 - pre 160 meseci
kada sam ja zapocinjao sa radom na PIC mikrokontrolerima mucio me isti problem koji sam rijesio nakon puno raspisivanja i proba i srecom imam ga arhivirano
u primjeru se radi sa instrukcijama (ti sa svojim PIC-om na 8 MHz imas 2 000 000 instrukcija u sekundi)
dakle:
recimo da imas primjer sa 2x decfsz:

movlw .12 ; npr ovo je 18-ta instrukcija
movwf 0x21
movlw .5
movwf 0x22

count
decfsz 0x21
goto count
decfsz 0x22,f
goto count
return ; onda je ovo 3135-ta instrukcija

delta = 3135 - 18 = 3117 potrošenih instrukcija
ili po izrazu:
n1 = 12
n2 =5
delta = [(n1-1)*3+2]+[(255*3+2)+3]*(n2-1)+2 = 3117 instrukcija

a ako imas primjer sa 3 decfsz-a npr:
n1 = 14
n2 = 7
n3 = 28
tada je:
delta = [(n1-1)*3+2]+[(255*3+2)+3]*(n2-1)+2+{[(255*3+2)+3]*255+2+3}*(n3-1)+2 = 5 306 250 instrukcija

radi garant, provjereno



 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Kako izračunati točnu vrijednost Loop petlje?

[ Pregleda: 3034 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.