Sari la conținut
ELFORUM - Forumul electronistilor

Calcul durata temporizare (executie "loop")


messu

Postări Recomandate

Vreau sa citesc un port, o anumita perioada de timp, si as dori sa stiu cum pot sa faca asta.Mai exact, am pus un pin al portului intr-un loop cu un contor care se incrementeaza pana la o anumita valoare. Nu stiu daca-i cea mai buna idee, dar asta mi-a venit mie. Cu alte cuvinte, cum pot sa calculez cat timp ii ia microcontrolerului sa execute in set de instructiuni. Codul nu este scris direct in asm sau C (desi tot acolo se ajunge). Eu fac schema logica (in Flowcode) dupa care se genereaza automat fisierul hex.

Link spre comentariu
  • Răspunsuri 13
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • messu

    7

  • costi002

    3

  • Zerro

    2

  • mircang9

    2

Top autori în acest subiect

Cred ca poti folosi P r o t e u s ca sa vezi timpul de loop (daca e suportat microcontrolerul tau si daca flowcode genereaza in afara de fisierul hex si un fisier cof). Dar cred ca o alta metoda cu timer (sa scanezi la anumite intervale de timp bine definite pentru o anumita perioada) sau cu intreruperi pe portul respectiv (intreruperi care sa fie active tot pentru o perioada de timp asa cum vrei tu).Totusi, fi mai explicit ... ce anume se urmareste?!Toate bune!

Link spre comentariu

Da, uC-ul e suportat de Proteus. E un PIC16F628A. Am si simulat deja schema si totul e OK. Ideea e chiar asa cum am enuntat-o mai devreme.Lucrez la o alarma pentru apartament. Sau, mai bine spus, la imbunatatirea unei idei (alarma cu transmitere GSM din revista CONEX Club) care deja functioneaza, dar are niste limitari destul de suparatoare.Vreau sa citesc starea unui contact, doar o anumita perioada de timp dupa care, indiferent de starea contactului, sa nu se mai produca nicio schimbare in curgerea programului.Acum am rezolvat problema, total nestiintific. Adica prin incercari. Rezultatul e bun, dar mi-am pus problema cum sa putea sa rezolv problema cu o precizie cat mai mare.Sincer, mi-a venit si mie ideea cu timer si cu intreruperi, dar, la fel de sincer, nu prea stiu sa fac asta. Mai studiez :) Asa cum am tratat problema acum, functioneaza OK, cel putin in simulare, dar mi se pare cam triviala solutia...Dar chiar, pana la urma cum pot afla din Proteus cat dureaza loop-ul respectiv ?

Link spre comentariu

Daca Flowcode genereaza acel fisier cof atunci se incarca in microcontroler in loc de fisierul hex, fisierul cof ... se porneste simularea in proteus din debug (iconita de pauza si run) si in clipa asta se deschide fisierul cof unde se pot pune breakpoint-uri in cadrul buclei si asa se poate afla cat dureaza executia unui ciclu de bucla (proteus are in indicator de timp ... ).Sper ca m-am facut inteles.Toate cele bune!

Link spre comentariu

De inteles cred ca am inteles. Multumesc. Cu aplicarea, insa, se vede treaba ca e mai greu :) Adica nu-mi dau seama unde sa pun breackpoint-urile ...O sa incerc sa aloc mai mult timp maine poate-i dau de cap.Oricum, multumesc pentru sugestie !

Link spre comentariu
  • 3 săptămâni mai târziu...

Aaaa, osciloscop, din pacate, n-am...De reglat, am reglat deja empiric, prin cateva incercari, dar eram curios cum s-ar face daca trebuie o temporizare FOARTE exacta. Aici batea, defapt, intrebarea mea...

Link spre comentariu

@costi002Multumesc pentru link.Am impresia ca nu prea m-ajuta pentru ca eu nu vreau sa generez o intarziere, in mod direct.Pur si simplu ma interesa cum calculez cat dureaza ca uC sa parcurga un anumit numar de linii de program.Ma gandesc ca nu-i lucru foarte simplu, macar si pentru ca uC-ul nu lucreaza direct cu programul in C.In sfarsit, poate citeste cineva si poate ne invata vreo metoda mai simpla, daca exista...La proiectul meu, am rezolvat deja problema pentru ca nu-mi trebuia o "temporizare" foarte clara, asa c-am facut lautareste. Am propus niste valori si dup-aia am cronometrat, cu ceasul, cat dureaza ca uC sa parcurga, fizic, secventa respectiva. Si cu regula de 3 simpla am ajuns "exact" unde trebuia. :da Nu-s chiar mandru de ce-am facut dar, parca zicea cineva ca scopul scuza mijloacele. Nu ?

Link spre comentariu

pai ce zici tu e simplu. iei instructiunile, te uiti in datasheet-ul uC si vezi cate cicluri foloseste pentru a executa instructiunea respectiva. cele mai multe sunt cu un singur ciclu . apoi in f de frecventa vezi cate microsec dureaza un ciclu iar apoi....... cred ca ai prin ideea.(in primul rand sper sa fi inteles eu ce doresti :jytuiyu )

Link spre comentariu

Am inteles, problema e ca, din cate-mi amintesc eu, in datasheet sint date instructiunile in assembler. La mine e C si nu mi-e foarte clar cum se transforma C in asm sau in hex. Adica o linie de program, o instructiune in C inseamna tot o instructiune in assembler ? N-am nicio legatura cu assembler-ul si d-aia nu stiu ce inseamna o astfel de "conversie" ...

Link spre comentariu

Sincer, nici eu nu stiu C, decat un pic, dar folosesc Flowcode care din schema logica face C si codul C il compileaza in hex. D-aia ma leg eu de C. El genereaza si un fisier asm, dar parca arata mai ciudat decat un asm scris de mana omului si oricum, trebuie sa recunosc ca nu mi-e prea comod sa fac legatura intre C-ul si asm-ul generate de acest soft.

Link spre comentariu

Te uiti in fisierul cu extensia *.lst. Acolo ai codul generat din C in assemblerul controllerului.Ce e cu rosu sunt liniile scrise de tine in C. Intre este transliterarea in asm.Apoi iei frumos datashhetul si la sectiunea instruction vezi cum au zis si ceilaltisi socotesti.De exemplu instructiunea call ia doua cicluri de ceas adica 2*(Fs/4).Fs = frecventa la care ai setat sa lucreze CPU in CONFIG1 sauXTALUL extern cu quartz.Ai mai putea incerca, eu n-am incercat inca asa: iei codul generat de la compilator( lst-ul si il bagi in MPASM, programezi si apoi facu debug adica rulezi pas cu pas bucla si vezi exact ce instructini sunt executate ) sau poate chiar in debuggu de C ai si optiunea de rulare pas cu pas in fisierul cu extensia lst.La timer se ia din schema de Timer si socotesti in functie de setarile facute de tinecam cat timp dureaza un over flow sau pana TXxIF se face 1. :da

Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări