Jump to content
ELFORUM - Forumul Electronistilor
Sign in to follow this  
Guest Sisqo

ajutor intreruperi PIC

Recommended Posts

Guest 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:)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
Guest 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..

Share this post


Link to post
Share on other sites

in c++ era mai usor cu conditiile da in asambler..

Vezi ca poti folosi compilatorul C, PICC-Lite si il poti folosi si din MPLAB.

Share this post


Link to post
Share on other sites

Iti trebuie "debouncing" la tratarea tastelor apasate (chiar daca folosesti intreruperile).Peste cap se da ca-i dai tu voie :)

Share this post


Link to post
Share on other sites

Guest 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?

Share this post


Link to post
Share on other sites

"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 :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.