Vizitator Sisqo Postat Iunie 12, 2007 Partajează Postat Iunie 12, 2007 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
bld Postat Iunie 13, 2007 Partajează Postat Iunie 13, 2007 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 Postat Iunie 13, 2007 Partajează Postat Iunie 13, 2007 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
laStudiu Postat Iunie 13, 2007 Partajează Postat Iunie 13, 2007 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. Link spre comentariu
Abram Burel Postat Iunie 13, 2007 Partajează Postat Iunie 13, 2007 Iti trebuie "debouncing" la tratarea tastelor apasate (chiar daca folosesti intreruperile).Peste cap se da ca-i dai tu voie Link spre comentariu
Vizitator Sisqo Postat Iunie 13, 2007 Partajează Postat Iunie 13, 2007 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
Abram Burel Postat Iunie 13, 2007 Partajează Postat Iunie 13, 2007 "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
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