Vizitator alex Postat August 20, 2004 Partajează Postat August 20, 2004 In continuarea topicului cum se calculeaza timpul de intarziere la PIC16F84A am si eu o problema. Inspirandu-ma de acolo am facut scris urmatorul cod: ORG 0 GOTO INIT ORG 4 GOTO BREAK #include "bank.inc" #include "lcd.inc"BREAK decfsz COUNT1,1 GOTO BREAK CALL CLOCK CALL DISPLAY movlw .244 movwf COUNT1 RETFIEINIT LCDinit BANK1 movlw b'00000111' movwf OPTION_REG BANK0 clrf TMR0 movlw b'10100000' movwf INTCON movlw .244 movwf COUNT1 MAIN GOTO MAIN Intrebarea este de ce codul nu intarzie cu o secunda (e un ceas si o ia razna)? E ca si cum nu ar tine cont de decfsz COUNT1,1. P.S. Quartz de 4MHZ, PIC16F84. Link spre comentariu
cirip Postat August 20, 2004 Partajează Postat August 20, 2004 Salut alex,Asa la o prima vedere am impresia ca nu numeri intreruperile. Din ceea ce citesc eu, codul tau face asa.-initializeaza intreruperile de la T0 si asteapta.-cand primeste prima intrerupere, numara repede-repede pana la zero, chiar in rutina de intrerupere, apoi iese.Intreruperile le primesti la 1/(1e6/256)=0.2ms. Nu e de mirare ca (probabil) ca o ia inainte bezmetic.Ca sa faci intarziere trebuie sa numeri intreruperile. Adica la fiecare intrerupere, decrementezi contorul si iesi din int.Chiar si asa, daca ai numara intreruperi, tot nu pare sa iasa o secunda. Ar iesi (1/(1e6/256))*244=62ms.Ca sa obtii o secunda, tinand cont ca pleci de la 1MHz, ar trebui ca dupa prescaler sa mai divizezi cu ceva de ordinul 1M/256=3906=0xF42, adica mai ai nevoie de 12 biti. 8 biti nu sunt suficienti. Dezvoltarea in factori ptr intarzierea exacta o faci tu. Eu am calculat numai un ordin de marime ptr ratele de divizare.Cirip Link spre comentariu
Vizitator alex Postat August 20, 2004 Partajează Postat August 20, 2004 Merci mult. Mi-am dat seama acum ca gandeam gresit treaba. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum