messu Posted August 8, 2017 Share Posted August 8, 2017 Pe scurt, incerc sa realizez un controller, dublu, pentru o statie de lipit cu letcon si generator de aer cald. Topologia, e clasica si nu stiu daca necesita detalii. Totul a functionat corect pana in momentul in care am hotarat sa adaug o functie de Auto Oprire, dupa un interval de timp. Intervalul ales a fost de 1 ora. Masurarea timpului am hotarat sa o fac cu overflow pe TMR0. Frecventa de lucru a uC-ului este de 8MHz.Timerul 0 are o prescalare de 1:256. Tot din soft, la pornire, am introdus posibilitatea de a alege intre functionarea cu Timer, sau fara. Daca aleg functionarea fara timer, totul este in regula si nu apare nicio problema. Daca insa aleg activarea timer-ului, treaba se schimba si uneori totul functioneaza perfect alteori, softul se blocheaza si pe display apar niste caractere incescifrabile, dupa cum se poate vedea si display-ul clipeste cu frecventa foarte mare ("fileaza") Blocarea apare , cel putin aparent, aleator. Care ar putea fi explicatia pentru functionarea, diferita, a aceluiasi cod hex, in aceeasi schema ? Imi pare rau ca nu pot atasa filmarea care ar fi fost probabil mult mai clara. Link to comment
nico_2010 Posted August 8, 2017 Share Posted August 8, 2017 Neavand globul de cristal la mine (este pe moment imprumutat altcuiva) nu as putea sa-ti spun exact de ce functioneaza asa si nu corect! Nu crezi ca ar fi fost mai bine daca postai si codul? L.E.: Timer0 are o prioritate mai mica decat celelalte timere. Vezi foaia de catalog pag.46 Link to comment
messu Posted August 8, 2017 Author Share Posted August 8, 2017 :) Cod nu stiu sa scriu. Proiectul este facut cu Flowcode si am bagat de seama ca lumea nu prea agreeaza asa ceva. Dar pot sa postez codurile *.c si *. hex asa cum le genereaza Flowcode, daca sint de interes. Nelamurilrea mea era legata de faptul ca functionarea nu este mereu la fel. Buna sau rea, dar la fel. Nu se executa mereu acelasi cod ? P.S. Nu pot sa atasex nici c nici hex. Nu sint permise astfel de fisiere. am schimbat, un pic, extensiile.... ss_2_c.txt ss_2_hex.txt Link to comment
nico_2010 Posted August 8, 2017 Share Posted August 8, 2017 Nu folosesc Flowcode. Poti incerca sa atasezi fisierele .c si .hex copiindu-le in Notepad si salvandu-le apoi sub forma de text. Va fi amuzant sa vad un astfel de cod generat de Flowcode. Link to comment
messu Posted August 8, 2017 Author Share Posted August 8, 2017 Am sa incerc sa schimb Timer0 cu Timer1 sau Timer2. M-am gandit mai devereme la asta insa ca alternativa nu ca explicatie la ceea ce se intampla in momentul asta. Am atasat deja codurile. Sper ca vizualizarea lor sa fie doar amuzanta nu si....enervanta. Sper... Link to comment
nico_2010 Posted August 8, 2017 Share Posted August 8, 2017 Vad ca folosesti PWM cu Timer0? sau ma insel? in orice caz, mi se pare ciudat codul de mai jos: //Interrupt //Interrupt: Enable TMR0 TCCR0 &= 0xf8; TCCR0 |= 0x04; sei();// asta trebuia sa fie dupa linia urmatoare TIMSK |= (1 << TOIE0); Link to comment
messu Posted August 8, 2017 Author Share Posted August 8, 2017 PWM folosesc, dar, cinstit sa fiu, nu stiu cum si cu ce timer se face pentru ca Flowcode-ul nu e prea clar la pasul asta. Daca PWM este pe Timer0, atunci nu stiu daca e o situatie prea fericita, cata vreme si Auto Standby e tot pe Timer0 si mai fi folosesc si prescalere diferite. Cred ca am sa incerc sa mut Auto Standby pe Timer2, sa vad ce se intampla. Multumesc de sugestie si am sa revin cu rezultatul ! Link to comment
nico_2010 Posted August 8, 2017 Share Posted August 8, 2017 Schimbarea timerului poate aduce si alte probleme (Timer2 are prioritate mai mare decat Timer0), asa ca manifesta atentie la aceasta schimbare.Poate ar fi bine sa folosesti functia Compare pentru Timer2 (este hardware si nu ar trebui sa genereze probleme). Si totusi, o ora??? Link to comment
messu Posted August 8, 2017 Author Share Posted August 8, 2017 Am inteles ! Am redus timpul la 30 de minute Din pacate in Flowcode nu gasesc nimic despre functia Compare. Iar utilizarea TMR1 si TMR2 vad ca, cel putin momentan, nu merge. Imi da erori la complilare. C:\Users\Exocad\Desktop\SS_30M~1\ss_28_05_2017_stabilizatADC_timer.c:1846: error: 'TCCR2B' undeclared (first use in this function) C:\Users\Exocad\Desktop\SS_30M~1\ss_28_05_2017_stabilizatADC_timer.c:1849: error: 'TIMSK2' undeclared (first use in this function) Am sa incerc si acasa, pe Win 7, pentru ca pe Win 10 merge cam aiurea Flowcode-ul asta, dar am impresia ca nu o sa rezolv nimic... Link to comment
nico_2010 Posted August 8, 2017 Share Posted August 8, 2017 Foaia de catalog este prietena ta. Studiaza registrii timerului cu pricina Link to comment
messu Posted August 8, 2017 Author Share Posted August 8, 2017 Stiiiiiu asta. Necazul e ca nu prea am EU ce sa fac, in privinta asta, mai ales datorita faptului ca n-am abilitati de programare. Am, totusi, impresia ca e ceva problema cu compilatorul integrat in Flowcode. Am portat intreg proiectul pe Atmega328, care e asemanator cu Atmega8 si n-am mai patit eroarea de mai sus nici cu TMR1, nici cu TMR2. In simulare functioneaza. Am sa incerc si fizic ca stiu cam am niste Atmega328...pe undeva... Link to comment
Elison Posted August 8, 2017 Share Posted August 8, 2017 Incearca sa inlocuiesti fisierul ATMEGA8.fcd din Flowcode(AVR) cu cel din arhiva, dar inainte de a face asta salveaza fisierul original. ATMEGA8.rar Link to comment
messu Posted August 8, 2017 Author Share Posted August 8, 2017 Acum s-a compilat. Am incercat o simulare in Proteus, pentru TMR1 si a fost OK de catreva ori, dupa care i-ar s-a blocat. Am sa incerc si cu uC-ul real, dar am impresia ca nu-i prieste treaba asta cu timerele, cel putin in proiectul asta al meu Link to comment
Elison Posted August 8, 2017 Share Posted August 8, 2017 Scrie hexul si incearca-l in circuit ! Daca tot nu merge poate postezi si fisierul fcf_avr. Poate fi o problema in macro care este apelat atunci cand este generata intreruperea, am vazut chiar si delay-uri in astfel de macro. Link to comment
messu Posted August 9, 2017 Author Share Posted August 9, 2017 Da, pare ca macro-ul apelat la intrerupere, era cam aglomerat. Am mutat intreruperea pe TMR2, am "curatat" macro-ul, am lasat in el strict incrementarea secundelor si restul am pus intr-un alt macro. Am rulat cateva simulari si nu s-a mai blocat. Abia astept sa ajung acasa si sa incerc direct pe uC ca sa vad cum se comporta.... Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now