Vizitator flopir Postat Noiembrie 4, 2011 Partajează Postat Noiembrie 4, 2011 Cred ca merge sa comanzi 2 transformatoare de cuplaj in paralel (serie) si le folosesti ca pe unul singul cu 4 secundare ... Link spre comentariu
mircang9 Postat Noiembrie 5, 2011 Partajează Postat Noiembrie 5, 2011 Salut la toata lumea,Pentru referinte anterioare vedeti la sectiunea CQ-YO la radioamatorism topicurile "Stie cineva un soft free de filtrare FTB la un fisier mp3 ?" si"Filtrarea digitala a spectrului de frecvente".Implementarea este placa demo dsPIC starter Kit1. Ultima postare la "Stie cineva un soft free de filtrare FTB la un fisier mp3 ?".Acum sunt la faza de a transfera cele 256 sau 512 valori fractionale filtrate lamodulul PWM output compare pentru a genera semnalul filtratfara sa folosesc DMA.Exista dsPIC cu 4K sau mai mult de memorie DMA ?Scuze, trebuia sa introduc acestea ca topic nou. O sa deschid topicul azi sau maine ca nu-mi da voie sa scriu un nou mesaj mai repede.dsPIC33FJ256GP506 de pe placa demo are 2K DMA adrese adica 1K de datein DMA.Topicul acesta cu filtrarea digitala a fost deschis de Cirip, insa si pe mine ma intereseaza foarte mult. Link spre comentariu
moro Postat Decembrie 1, 2011 Autor Partajează Postat Decembrie 1, 2011 Salut, am revenit, ca sa nu mai deschid alt topic, intreb si eu pe cei care au patit`o inaintea mea, cu pic18f4431 cand activez intreruperea void interrupt () in simulator (proteus vsm isis7) imi apre un mesaj de eroare de genul: PIC18 MEMORY PC=0x0034 Read of unimplemented memory address 0x0C2B returns Mai jos este codul... int sine[16]={64,90,111,124,127,119,101,77,51,27,9,1,4,17,38,64};int i;void main() {INTCON=0xC0;// enable GIE and PEIE interruptsPIE3.PTIE=1; // enable pwm module interruptsTrisB=0; PortB=0x00; PTCON0=0x00; // 1:1 postscale; 1:1 prescale; Freerunning mode PWMCON0=0x20; PWMCON1=0x03; //////////// PTMR - PWM TIME BASE 12 bit register ///////////////// PTMRL=0x05; // lower 8 bits of PTMR PTMRH=0x00; // upper 4 bits of PTMR /////////// END OF PTMR /////////////////////////////// ////////////PTPER - PWM TIME BASE PERIOD 12 bit register//////////////// PTPERL=0xe8; // lower 8 bits of PTPER PTPERH=0x07; // upper 4 bits of PTPER/////////// END OF PTPER ///////////////////////////////////////////// dutycycle registersPDC0L=0x0f;PDC0H=0x01;//////////////////////////////////PTCON1=0x80; // pwm timebase enabled, timebase counts upwhile(1);}void interrupt() {if(PIR3.PTIF==1) {i++;PDC0L=sine[i];return;} } Am observat ca atuci cand nu activez bitii GIE si PEIE din INTCON nu am aceea eroare. Eu ca si compilator C folosesc mikroC... si vruiam sa stiu daca a mai intampinat cineva problema asta.... ce ar fi de facut Link spre comentariu
10vid Postat Decembrie 1, 2011 Partajează Postat Decembrie 1, 2011 Bitul PIR3.PTIF nu trebuie sa-l mai verifici daca e setat, el este intotdeauna setat la intrarea in rutina de servire a intreruperii, pentru ca el este acela care a provocat intreruperea. Totusi, el trebuie sters inaintea iesirii din acea intrerupere, ca sa nu mai provoace si alte intreruperi nedorite, ci sa fie setat din nou de timer. Deci in rutina aceea trebuie doar incrementat acel " i " si sters bitul PIR3.PTIF. Link spre comentariu
Liviu M Postat Decembrie 1, 2011 Partajează Postat Decembrie 1, 2011 Esti sigur ca e nevoie de return cand iesi din functia interrupt? In eventualitatea extinderii ulterioare a functiei, eu as lasa testul flagului, numai ca l-as extinde din if(PIR3.PTIF==1) {in (sper sa existe mnemonicele respective in mikroC) if(PIR3.PTIF && PIR3.PTIE) {Motivul - flagurile sunt "activate" in caz de eveniment, chiar daca intreruperile nu-s activate. Testul "dublu" te poate scapa de batai de cap.Sunt de acord cu 10vid - flagul (PTIF) trebuie resetat la iesirea din functie. De asemenea, daca e cazul (daca iti trebuie timpi mai scurti decat ce poate timerul), trebuie reincarcat timerul cu valoarea de start. Link spre comentariu
10vid Postat Decembrie 1, 2011 Partajează Postat Decembrie 1, 2011 Ai dreptate, Liviu. Am omis sa spun de reincarcarea timerului cu o noua valoare.Totusi, testarea bitilor de intrerupere nu trebuie facuta decat in cazul in care avem mai multe surse generatoare de intreruperi, testam toti acei biti ca sa aflam care a generat intreruperea. In cazul de fata, cu o singura posibila sursa de intrerupere, e clar cine a generat intreruperea, asa ca nu mai trebuie testat. Link spre comentariu
Liviu M Postat Decembrie 1, 2011 Partajează Postat Decembrie 1, 2011 Ai dreptate, nu cunosc tot proiectul, nici daca moro il extinde, asa ca daca ramane asa cum e, nu-i nevoie de test. Pen'ca testul nu consuma nici mult timp si nici multe resurse, ma gandeam (si am specificat asta) ca-l poate lasa "sa fie gata" incaz de dezvoltari ulterioare. M-am uitat putin in documentatia de la mikroC si nici ei nu folosesc return la iesirea din functie, asa ca sunt sanse ca asta sa fie problema lui moro. Link spre comentariu
moro Postat Decembrie 1, 2011 Autor Partajează Postat Decembrie 1, 2011 daca pun in bucla if PIR3.PTIF==1 && PIE3.PTIE==1 si fara return; imi da eroare : PIC18 MEMORY PC=0x003A Read of unimplemented memory address 0x0XXX returns daca nu includ o bucla if cu cele doua conditii void interrupt() { i++; PDC0L=sine; } imi da PIC18 MEMORY PC=0x0032 Read of unimplemented memory address 0x0XXX returns Am incercat si asa: void interrupt() { if(PIR3.PTIF==1){ PDC0H=sine; PDC0L=sine; PIE3.PTIe=0; } } cu s-au fara PIE3.PTIE=0 nu mai imi da acele erori de mai sus dar nici dutycycle nu-mi face... Deja incep sa raman fara idei :-? Problema asta am mai intalnito si cu PIC18F25K20 si atunci stiu ca nu am folosit return; ... acolo era putin mai simplu ca foloseam doar modulul CCP1 si timer2 dar la fel ca aici primeam acele erori, nu inteleg unde nu pusca intreruperile astea Link spre comentariu
10vid Postat Decembrie 1, 2011 Partajează Postat Decembrie 1, 2011 Ai uitat sa incrementezi pe i. 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