Sari la conținut
ELFORUM - Forumul electronistilor

ajutor intreruperi PIC


Vizitator Sisqo

Postări Recomandate

Vizitator Sisqo

am pe montaj 4 butoane, 2 pentru a modifica duty cycle al semnalului de tip pwm +/- si 2 pentru frecventa +/- legate la pic p16f84a pe pinii rb4-7. programul l-am scris in mplab, dar nu merge asa cum trebuie. daca poate sa se uite cineva peste .asm-ul atasat si sa-mi dea o mana de ajutor, as fi recunoscator. merci:)

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

Top autori în acest subiect

  • Abram Burel

    2

  • bld

    1

  • laStudiu

    1

Top autori în acest subiect

Din ce stiu eu despre assemblerul de PIC de la Microchip, o runtina se apeleaza cu instructiunea CALL si se termina cu RETURN, RETLW sau RETFIE(daca este rutina de tratare a intreruperilor). Nu inteleg si nici nu cred ca e normal sa ai mai multe instructiuni RETFIE in codul tau avand in vedere ca pt PIC16F doar o singura rutina de tratare a intreruperilor se poate folosi.Eu te sfatuiesc sa renunti la GOTO-urile alea si sa faci frumos o runtina care sa o apelezi cu CALL si sa o termini cu RETFIE.

Link spre comentariu
Vizitator Sisqo

pai am nevoie de tratarea intreruperilor la 4 butoane, cand apas pe pwmplus sa-mi mareasca duty cycle si tot asa..nu stiu cum as putea sa scap de goto-urile alea. deci am scris pe pic programul, imi merge in mare parte, imi urca frecventa si duty cycle cand ii dau pe butoane, dar dintr-o data o ia razna urca prea tare..se da peste cap..cred ca trebuie sa mai pun niste conditii..in c++ era mai usor cu conditiile da in asambler..

Link spre comentariu
Vizitator Sisqo

si cum fac debouncing?am rezolvat cu pwm, doar marirea si micsorarea frecventei nu merge..ca se face nopval*temp perioada si creste exponential cand incrementez nopval..noptempinit movfw nopval movwf noptemppwma decfsz noptemp goto pwma decfsz temp goto noptempinito alta modalitate de a creste normal?

Link spre comentariu

"Debouncing" presupune sa:- detectezi o schimbare- citesti intrarea imediat- astepti 10-50ms- citesti intrarea- daca coincide cu cea citita imediat dupa schimbare te apuci de treaba- altfel, au fost spike-uri (asa se intampla la facerea/desfacerea contactelor electrice); ele pot cauza (in cazul tau) incrementari/decrementari multiple la aceeasi apasare sau... dezapasare- o sa iti apara un efect parazit (probabil insesizabil) dat de faptul ca pe durata intarzieri pulsul PWM va fi ori On or Off dupa cum l-a prins intreruperea; o solutie mai eleganta, in general pentru PWM soft este sa lucrezi pe intreruperea data de TMR0 (chiar si TMR1 desi e mai pernicios de lucrat cu el); la fiecare "tact" dat de intrerupere te hotarasti daca e On sau Off si testezi care-i treaba cu intrarile; in plus ai un mecanism de control destul de bun al frecventei (din prescaler si din valoarea incarcata in TMR0 la initializare)In ceea ce priveste modificarea frecventei, avand in vedere ca tu oricum vei manipula perioada, iar relatia ei cu frecventa, chiar daca nu e exponentiala tot cam asa arata :) imi trec prin cap 2 solutii:Amandoua presupun sa iti stabilesti un numar de pasi de modificare si stabilesti frecventa pe care o vrei la fiecare. Acum:- fie calculezi de manuta factorul corespunzator de modificare a perioadei si inscrii rezultatele intr-un tabel pe care il parcurgi in sus si in jos cand apesi pe butoane (ele "actionand" asupra indexului ce da valoarea din tabel si apoi asta o folosesti pentru a modifica perioada semnalului)- fie calculezi in program; daca scopul e "didactic" si nu ai altceva cu care sa ocupi memoria, cauti niste rutine aritmetice sau folosesti un limbaj de nivel inalt si tragi cu ochiul in codul rezultat de unde "importi" ce a "gandit" el.Cam atat, pentru azi :)

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