Stefan Postat Martie 11, 2020 Partajează Postat Martie 11, 2020 Este pentru prima oara cand ma joc cu PICe dastea mai "exotice" cu pin peripheral select si nu reusesc sa-l conving ca pe RC5 (sau RC3) am nevoie de impulsuri modulate in durata. PIC-ul este 16F1704 tactat la 1MHz intern si cu un LED conectat (si functional) la RC0 pentru a verifica functionarea timerului 1. Mentionez ca in PROTEUS totul functioneaza perfect. Adica aplicatia intreaga are PWM la RC5 modulat de o intrare analogica la RA0 + feedback la RA2, controlul unui LED RGB pentru a "arata" procentul (factorul de umplere) PWM si un LED de status general. Dupa ce am scris tot codul si am vazut ca nu functioneaza "on real machine" am lasat doar codul de mai jos pentru a verifica PWM, nu vrea sa mere! TRISC = 0x00; // All pins is output LATC = 0x00; // All RC pins sets to low Unlock_IOLOCK(); PPS_Mapping_NoLock(_RC3, _OUTPUT, _CCP1); PPS_Mapping_NoLock(_RC5, _OUTPUT, _CCP2); Lock_IOLOCK(); PWM2_Remappable_Init(1000); // 1KHz PWM2_Remappable_Start(); // PWM2_Remappable_Set_Duty(128); //di tiest Aveti ceva experiente cu MikroC, PPS si PWM ? Link spre comentariu
bercioiu Postat Martie 11, 2020 Partajează Postat Martie 11, 2020 Nu stiu cum este in MicroC, eu lucrez cu FlowCode si la configurarea microcontrollerului, pentru PWM, trebuie sa setez bitul 18 (PPSLOCK One Way). Mie mi-au rezultat urmatoarele cuvinte de configurare: 0x1=0x1a4 (si aici trebuie sa configurezi bitul OSCCON pentru ceas intern <OSCCON=0x70;>) 0x2=0x18fb 16f1704.TXT 1 Link spre comentariu
Stefan Postat Martie 11, 2020 Autor Partajează Postat Martie 11, 2020 @bercioiu mulțumesc pentru răspuns. GUI-ul arată superb față de cum știam eu flowcode-ul. Abia diseară o sa vad cum este cu PPSLOCK, am presupus ca asta face funcția din biblioteca PPS. Lock_IOLOCK(); Oscilatorul intern funcționează (am setat OSSCON dar nu am postat tot codul) pentru ca am "martor" un LED controlat de TMR1. Tot diseară testez HEX-ul atasat și dacă funcționează imi e clar ca ori eu ori bibliotecile din MikroC suntem praf. Link spre comentariu
Bandi Szasz Postat Martie 11, 2020 Partajează Postat Martie 11, 2020 Exact cu modelul respectiv de PIC nu am lucrat insa am folosit alte modele cu PPS, vezi ca in setarile proiectului (properties) ai aoclo o optiune care trebuie activata ca sa lasi software-ul sa poata seta de mai multe ori registrii PPS altfel o poti seta o singura data, acuma nu stiu daca asta o fi problema. Insa am intalnit situatii cu UART in care nu mergea corect libraria de "PPS_Mapping_NoLock" si am recurs la setarea manuala a registriilor de "RxyPPS" pentru PWM2 la RC5 ar fi: Unlock_IOLOCK(); RC5PPS = 0xD; Lock_IOLOCK(); 1 Link spre comentariu
informer Postat Martie 11, 2020 Partajează Postat Martie 11, 2020 La fel si io prefer sa fac "de mana" lucrurile care-s simple... un exemplu pt. 1705, I2C si UART (I2C e "dublu" de complicat ca e bidirectional...): //mapping I2C and UART pins SSPCLKPPS = 0b00010000; //pin C0 SSPDATPPS = 0b00010001; //pin C1 RC0PPS = 0b00010000; //SCL-SCK RC1PPS = 0b00010001; //SDA RC4PPS = 0b00010100; //TX on C4 1 Link spre comentariu
kit Postat Martie 11, 2020 Partajează Postat Martie 11, 2020 Fara a oferi o rezolvare punctuala, voi sugera mai mult o directie. Pentru picurile astea mai noi eu folosesc MPLABX. Suporta doar programatoarele mai noi (Pickit4 in cazul meu), dar are un utilitar MPLAB Code Configurator. Utilitarul asta iti configureaza picul si creeaza toate functiile corespunzatoare. Dupa care nu mai ramane decat sa le introduci in main.c si gata. Oarecum, uneori mai trebuie sa modifici cate ceva. Cand nu imi place ce a facut, preiau partea de initializare si mai departe scriu eu functiile. In orice caz, ma ajuta sa trec mai usor peste partea de initializare. In plus, utilitarul asta te scuteste uneori sa mai sapi in datasheet (in cazul meu era gresit, foloseam 16F18855; dupa o zi de cautari absurde, m-am scos cu MCC). Spor! 1 Link spre comentariu
bercioiu Postat Martie 11, 2020 Partajează Postat Martie 11, 2020 A! Inca ceva! Se pare ca PWM-ul hard, la picul asta, foloseste doar timer2, timer4 si timer6. Link spre comentariu
Stefan Postat Martie 12, 2020 Autor Partajează Postat Martie 12, 2020 (editat) @bercioiu HEX-ul postat de dvs. genereaza PWM la RC5, frecventa nu corespunde dar nu asta conteaza acum. In PICKIT4 bitul respectiv (PPSLOCK) cred ca este PPS1WAY si l-am invartit pe toate partile (doua) dar degeaba. Cand spui PWM hard te referi la CCP sau chiar la modulele PWM dedicate? Eu vreu sa generez un singur semnal PWM cum asa de usor se facea la 16F877/887... FlowCode era chiar simpatic dar parca ma obosea sa urmaresc "codul", avantajul la el e ca poti avea ceva functional in doar cateva minute. In mod normal CCP1 era la RC5 dar atata le-am frecta ca nici nu mai stiam cum sunt. Unlock_IOLOCK(); PPS_Mapping_NoLock(_RC3, _OUTPUT, _CCP2); PPS_Mapping_NoLock(_RC5, _OUTPUT, _CCP1); Lock_IOLOCK(); @Bandi Szasz la sfatul Dv.s am incercat si asa: Unlock_IOLOCK(); //PPS_Mapping_NoLock(_RC3, _OUTPUT, _CCP2); //PPS_Mapping_NoLock(_RC5, _OUTPUT, _CCP1); RC3PPS = 0xD; //PWM2 la RC3 RC5PPS = 0xC; //PWM1 la RC5 Lock_IOLOCK(); Atat cu apelarea bibliotecii PWMx_Remappable cat si cu biblioteca PWMx. @kit a fost o scurta perioada cand imi placeau PICele dar am cam abandonat partea asta de progamare MCU si nu mai am rabdare sa invat MPLABX cu al sau compilator de C, dar niciodata nu se stie. Editat Martie 12, 2020 de Stefan Link spre comentariu
bercioiu Postat Martie 12, 2020 Partajează Postat Martie 12, 2020 Da, probabil ca nu am setat pll-ul si de aceea nu corespunde frecventa. Pwm hard, ma refer la cpp, in FlowCode, la propirietati pwm, pot seta doar tmr2,4 sau 6. Link spre comentariu
Stefan Postat Martie 12, 2020 Autor Partajează Postat Martie 12, 2020 (editat) Ma gandeam ca de CCPTMRS se ocupa biblioteca din MikorC si nu ii mai spun eu ce sa faca, oricum eu nu am utilizat timerele alea. Totusi se pare ca au mari probleme cu testarea bibliotecilor pentru unele PIC-uri si cine vrea sa rezolve cu adevarat trebuie sa deschisa un ticket (program cu licenta). Am testat un exemplu dat de ei, pentru un alt model de PIC tot cu remap, si nu merge nici daca-l ... Singura rezolvare probabil e sa scriu totul de gheruta. Editat Martie 12, 2020 de Stefan Link spre comentariu
Stefan Postat Martie 12, 2020 Autor Partajează Postat Martie 12, 2020 @kit m-am uitat putin pe internet si am vazut ca MCC e destul de simplu de utilizat si am zis ca nu am ce pierde daca il incerc. Am reusit sa scot PWM la RC5 1KHz 50% fara a scrie o linie de cod Link spre comentariu
kit Postat Martie 13, 2020 Partajează Postat Martie 13, 2020 @stefan: mda, cam la asta ma refeream. Daca ceva merge insa stramb, trebuie sa citesti bine de tot codul generat, sa vezi daca-l folosesti corect. Eventual daca nu mai trebuie sa adaugi si tu cate ceva. Mare atentie insa, adaugirile/modificarile nu se fac in fisierele generate, ca se pierd! Spor! Link spre comentariu
Stefan Postat Martie 13, 2020 Autor Partajează Postat Martie 13, 2020 E destul de bine gandit si la o noua generare imi arata daca fisierele vechi (cele generate de MCC) sunt diferite de ce trebuie sa genereze si iti face o analiza intre ele. Partea amuzanta e ca am generat si setarile pentru DAC, in realitate functioneaza dar nu mai functioneaza in Proteus O sa incerc sa fac totul in MPLAB cu XC8 si daca nu imi iese ma mut in MikroC si "fur" registrii pentru PWM. Data viitoare trebuie sa ma gandesc de 3 ori cand cumpar PICe doar ca dau bine la pret si in fisa tehnica. Link spre comentariu
M.Adrian Postat Aprilie 10, 2020 Partajează Postat Aprilie 10, 2020 Imi cer scuze de offtopic, @Stefan forma de unda din screenshot e captura de la osciloscopul dvs sau este vreun add-on de la mplab ? Link spre comentariu
Stefan Postat Aprilie 11, 2020 Autor Partajează Postat Aprilie 11, 2020 @M.Adrian forma de unda este de la un osciloscop pe USB (VDS3102). MPLABX are un plugin (X2CScope) interesant dar nu stiu sa-l folosesc si nici nu stiu daca merge pentru orice PIC. 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