Liviu M Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Concluziile cu care ma retrag de pe topicul asta (cerandu-mi scuze ca l-am poluat cam degeaba):- Folosirea oscilatorului "general" pentru un ceas de timp real pare nerecomandata. Desi frecventa in cazul meu e stabila (am comutat un pin cu frecventa de 1 Hz si m-am uit cu osciloscopul la el), exactitatea lasa de dorit. Cu toate corectiile folosite in simulator, "pe teren" am secunda mea e cam 1.1 secunde reale. Se pare ca fiecare ceas trebuie calibrat; ori in program direct, ori modificat programul cu optiunea de calibrare. Cam complicat.- In cazul meu, folosirea unui senzor de temperatura (rezolutie 10 biti, timp de conversie necesar pentru senzor 187,5 ms) n-a modificat cu nimic ceasul (n-am vazut nici o modificare pe osciloscop).Sperand ca am poluat topicul cat de cat constructiv, va urez "dezvoltare placuta" in continuare. Link spre comentariu
gr1ph0n Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 In simulator, folosind oscilator de 4 MHz, TMR1 incarcat cu o valoarea de 55543 prescaler 1:1 obtin o intarziere de 0,514 s / zi(doar pentru ceas), iar pentru ceas si termometru 1.5 s/zi, ceea ce ar fi rezonabil. Practic insa cei ce au folosit aceasta varianta au raportat o intarziere mult mai mare.Asta pentru ca frecventa oscilatorului din simulator nu variaza ca in cazurile reale. Link spre comentariu
Liviu M Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Am zis ca "ma las" de topicul asta, da' mai scriu o data.Daca tot ai inceput, incearca totusi sa folosesti toate facilitatile oferite de hardware: prescaler mai mare si valoare mai mica incarcata in TMR1 (ca sa numerte mai mult timp, sa ai mai mult timp intre intreruperi).Si da, cum ziceam si mai sus, fiecare ceas va trebui "calibrat" individual. Daca ceasul ceasului (4 MHz sau 20 MHz sau...) e cu quarz, ceasul o data calibrat ar trebui sa fie stabil.Daca, in schimb, se folosesc oscilatorul intern sau RC extern, frecventa e dependenta de temperatura si ceasul va fi cam instabil.Si gata.Succes. Link spre comentariu
gr1ph0n Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Ceasul poata fi calibrat o singura data si apoi sa spui ca e exact, depinde foarte mult de cristalul folosit ( aici intervin: toleranta cristalului, stabilitatea acestuia, imbatranirea cristalului). Folosirea senzorilor de temperatura introduce o intarziere mai mult ca sigur, pentru ca apar in sistem mai multe variabile, care la randul lor trebuie salvate in momentul cand apare intreruperea. Parerea mea. Link spre comentariu
Liviu M Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Pe considerentul asta n-o sa mearga nici cu quarz dedicat. Ce mi-e o intrerupere pe secunda, ce mi-s 2.Si acum chiar ca-s out, ca deja rediscutam discutii. Link spre comentariu
Liviu M Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Concluziile cu care ma retrag de pe topicul asta (cerandu-mi scuze ca l-am poluat cam degeaba):- Folosirea oscilatorului "general" pentru un ceas de timp real pare nerecomandata. Desi frecventa in cazul meu e stabila (am comutat un pin cu frecventa de 1 Hz si m-am uit cu osciloscopul la el), exactitatea lasa de dorit. Cu toate corectiile folosite in simulator, "pe teren" am secunda mea e cam 1.1 secunde reale. Se pare ca fiecare ceas trebuie calibrat; ori in program direct, ori modificat programul cu optiunea de calibrare. Cam complicat.- In cazul meu, folosirea unui senzor de temperatura (rezolutie 10 biti, timp de conversie necesar pentru senzor 187,5 ms) n-a modificat cu nimic ceasul (n-am vazut nici o modificare pe osciloscop).Sperand ca am poluat topicul cat de cat constructiv, va urez "dezvoltare placuta" in continuare.Sunt nevoit sa-mi corectez concluziile - dupa ce am corectat o greseala (numaram un Ticks - cele 100.000200 ms de mai sus - prea mult), se pare ca ceasul functioneaza chiar bine. Cel putin osciloscopul zice ca o secunda are o secunda. Si asta in conditiile in care pentru o secunda mie imi trebuie 10 intreruperi si in conditiile in care, in afara de termometru, mai citesc si o intrare analogica (conversie AD), testez niste praguri si afisez totul pe un LCD (e un controller de acvariu).LE Ociloscopul zice la fel indiferent daca am senzorul de temperatura in circuit sau nu.LLE Functia mea pentru tratarea intreruperii#include "specific.h" interrupt isr(void){ di(); CLRWDT(); if(TMR1IF && TMR1ON) /*ceas*/ { T1CON = 0b10111100; // stop the timer// TMR1ON = 0; TMR1L = 0xE3; //teoretic 0xDB; da' intre stop si start dureaza 16 instructiuni TMR1H = 0x0B; // teoretic 0x0B; T1CON = 0b10111101; // restart the timer// TMR1ON = 1; if (ucTmr0Over<9) // mai putin de o secunda o secunda ucTmr0Over++; else //s-a umplut o secunda { ucClkInt = 1; //marchez secunda noua ucTmr0Over=0; //repornesc numaratoarea RC5^=1; //comut o iesire, sa pot vedea pe osciloscop } TMR1IF = 0; // sterg flagul } if(RCIF) /*comunicatie seriala*/ { bRxInt = 1; if(ucGlIdx >= 16) ucGlIdx = 0; if(RCREG != 'c') { ucComBuf[ucGlIdx] = RCREG; ucGlIdx++; bTxStart = 0; } else bTxStart = 1; } if(TMR0IF && TMR0ON ) /* dcf77 - perioada1-timer cu perioada ~10 ms*/ { if(ucDcf77Contor < 250) { ucDcf77Contor++; } else /* nu receptionez nimic*/ { ucDcf77Contor=0; ucDcf77Timer0Over++; TMR0ON = 0; /* opreste timer0*/ INT0IE = 0; /* dezactiveaza intreruperea pe INT0 (RB0)*/ T1CON = 0b00001111; // restart the T1 timer } TMR0IF =0; TMR0L = 60; } if((INT0IF) && (INT0IE)) /* dcf77 perioada 2 - numar cate perioada1 s-au scurs intre flancurile semnalului dcf77*/ { ucDcf77DataIndex = ucDcf77Contor; bDcf77SaveData = 1; ucDcf77Contor = 0; /* reseteaza contorul folosit la masurat timpul */ INT0IF =0; INTEDG0 = ~INTEDG0; /* INT0 trigerat pe celalalt flanc */ } ei();} Link spre comentariu
GeoMar Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Ceasul poata fi calibrat o singura data si apoi sa spui ca e exact, depinde foarte mult de cristalul folositNu se poate implementa metoda de reglaj a lui bogdi, de la ceasul lui?Adica asa cum se explica pe site-ul http://www.bogdi.ro/electronics/digital ... dexfp.html , probabil asa putem scapa de secundele pierdute/castigate de ceas.Cum funcţioneazăPostat de bogdi 10 februarie 2010» Prezentare generalăCând prima putere dispozitivul ceasul este mentained timp de 8 secunde. Apoi, la data de 2 secunde si temperatura va fi afişat timp de 3 secunde. Ceasul are patru butoane, cu un singur buton intraţi în modul stabilit, cu un alt buton va creşte valorile, al treilea buton vor fi utilizate pentru scăderea valorilor şi vă pot pune sau nu, de resetare. Dacă nu doriţi un buton de resetare conecta doar pini la 5 V.Puteţi schimba:oră>, 0-23 - honn - minut>, 0-59 (nu am putut afişa m asa ca am folosit n de două ori pentru el)zile data>, de la 1 la zile / lună - - dd> calculează pe baza lună şi andn - luna data> (JA FE | ° | A AP | ° | Y IC JL UA SE oc nu dE-sau-01 02 03 04 05 06 07 08 09 10 11 12, în funcţie de setarea dt)dy - anul data>, de la 0 sensul 2000-99 sensul 2099 (nu se afişează în timp / modul data, dar necesare pentru a calcula zile pe lună)DT - tip data> poate fi 1 sau 2, în cazul în care tipul de data este egal cu 1 atunci litere sunt folosite pentru luna, altfel numere sunt folositett - timp> in cateva secunde pentru a arăta timp / ceas, 2-99, nu puteţi seta 0 sau 1 pentru această setaretd - timp> in cateva secunde pentru a arăta data, 0-99, în cazul în care 0 este folosit apoi data nu este afişatTE - timp> in secunde pentru afişarea temperaturii, 0-99, în cazul în care 0 este utilizat atunci temperatura nu este afişatăSh -> calibra ceasul prin ajustarea doilea mare (vezi mai jos)Sl -> calibra ceasul prin ajustarea două mici (vezi mai jos)La stabilirea a doua zi de luni să ia în considerare luna şi anul şi zile / luna respectivă, în acel an. Nu puteţi seta 31 zile pentru luna februarie, de exemplu. Cele două puncte de mijloc nu sunt clipeşte atunci când data / temperatura sunt afişate şi, de asemenea, atunci când modul este setat pe. Dacă ambele TD şi TE sunt stabilite la 0 atunci timpul va fi singurul afişat. În cazul DS18S/B20 lipseşte puteţi seta TE la 0.[Settings]Setările implicite sunt salvate în memoria internă chip. Atunci când modificaţi ora / minute / .. toate dintre ele vor fi salvate. În cazul în care puterea este oprit nu va trebui sa le schimbe din nou, atunci când alimenta dispozitivul înapoi pe, probabil, doar timp / valorile data. Ceasul nu are o baterie şi nu va lucra în tăcere, dar cel puţin setările dvs. vor fi salvate (h / m / zz / dm / dY / dt / tt / td / te / sh / SL).[Clock Calibration 1]Ceasul poate fi calibrat prin intermediul software-ului. Acest lucru este util în cazul în care ceasul pierdut sau secunde câştiga într-o perioadă de timp. Acest lucru se poate întâmpla din diferite motive. Ideea este de a face în ultima secundă mai mult sau mai puţin. doua dureaza 1000000 microsecunde. Acesta este un număr mare de afişare mea unde eu pot scrie doar 4 numere, dar .. dacă ne reprezentăm acest număr în hexazecimal va avea această valoare:. 0F4240 Etalonari înseamnă aproximativ un milion de adaptare, aşa că am renunţat 0F, nu puteţi seta asta, dar puteţi ajusta 42 (Sh) şi 40 (SL) de la 00 la FF. Acest lucru vă oferă o posibilitate mare pentru a ajusta două dumneavoastră. Reglarea exemple:-> A pierdut 30 secunde / 24 ore => 30/86400 = 0.000347 1000000 - (1000000 * 0.000347) = 999653 (zecimal) = F40E5 (hexazecimal)Set => 40 pentru Sh şi E5 pentru Sl.-> Pierdut 2 secunde / 1 oră => 2 / 3600 = 0,000555 1000000 - (1000000 * 0.000555) = 999445 (zecimal) = F4015 (hexazecimal)Set => 40 pentru Sh şi 15 pentru Sl.- Câştig> 15 secunde / 60 zile => 15 / 5184000 = 0.0000021000000 + (1000000 * 0.000555) = 1000002 (zecimal) = F4242 (hexazecimal)Set => 42 pentru Sh şi 42 pentru Sl.O mai lungă perioadă de timp, fiind testate va avea o precizie mai bună de ceas.[Clock Calibration 2]alt mod de a calibra ceasul este de reglare Sh şi mai ales Sl ca de mai jos. În primul rând trebuie să ştiţi două valori: una care face ca ceasul a alerga mai repede şi una care face ca ceasul rula mai lent. Să spunem noastre două valori sunt: 999840 (ceas rulează mai rapid = FAST) şi 999884 (ceas rulează mai lent = SLOW). Repetaţi schimbarea lungimii a doua (FAST + LENT) / 2 = până la FAST SLOW (+ / -1). Acest lucru ar trebui să facă ceasul foarte precise.Am realizata versiunea de ceas, a lui bogdi, cu display led si merge destul de bine, reglat prin metoda prezentata pe site, din ''meniul'' ceasului.Am realizat si varianta cu Pic 16F628A si 2 senzori, dar nu este precis, pierde secunde, cu toate ca nu are momentan senzori conectati pentru ca nu mai am, unul l-am ars, altul este deja montat intr-un montaj incasetat [sursa reglabila de pe forum]. Link spre comentariu
gr1ph0n Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Ceea ce am spus mai sus gasesti in orice datasheet al unui cristal, nu le-am scos din burta.Nu am osciloscop, dar sunt curios Cel putin osciloscopul zice ca o secunda are o secunda In comparatie cu ce? Ce fel de osciloscop este? Poate determina daca este 1.000.0010 s sau 0.999990?Intrebarile nu au caracter tendentios. Link spre comentariu
Liviu M Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Osciloscopul este un amarat Tektronix vechi, analogic, cu 40MHz largime de banda. Ce-i drept, n-am masurat la virgula perioada/frecventa. Daca crezi ca e cazul, iau montajul la serviciu. Osciloscopul de acolo imi da frecventa/perioada cum zici tu (tektronix digital, cu 1GS/s si functii de masurare). Da' nu e cazul ;). La masuratoarea mea "era cam pe acolo" adica nu mai aveam cele ~100 ms in plus evidente de mai devreme, dar, mai important, am vazut ca semnalul e stabil in timp. Adica dureaza la fel masurand un timp ceva mai indelungat. Daca e chiar 1,0000 s sau 1,0001 s e irelevant; cum ziceam, oricum trebuie putin calibrat la inceput. Important e ca se potriveste oarecum cu rezultatele teoretice, are aceeasi durata de fiecare data si ca prezenta/absenta senzorului de temperatura nu schimba nimic. Oricum eu deja nu-ti mai inteleg problema. La inceput aveai probleme cu intreruperile prea dese (desi nu cred ca sunt probleme), acum desi sunt numai 2 ai in continuare probleme, vrei musai quarz. OK, pune-l. Da' si cand o sa ai quarz dedicat, avand acelasi mecanism de tratare a intreruperilor, o sa ai aceleasi "probleme". Daca mecanismul respectiv nu functioneaza cu ceasul de sistem, nu vad de ce-ar functiona mai bine cu un ceas suplimentar. Referitor la ceasul suplimentar, nu inteleg cu ce-ar fi un quarz de 32,768 kHz mai bun/stabil decat unul de 4MHz/20MHz (asta referitor la datele de catalog ale quarzurilor). Ba mai mult, as zice ca avand o componenta suplimenatar (de fapt 3, ca mai sunt si condensatorii de langa quarz) ai sanse mai mari sa se "destabilizeze". Da' asta e un fenomen inerent, care o sa apara oricum am noi implementa ceasul si nu cred ca-si are rostul in discutia asta. Cand am zis stabil, ma refeream la zile, nu la ani. Si acum terminand eu toate argumentele si motivele de interventie, chiar ma retrag. Succese depline! Link spre comentariu
gr1ph0n Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Am precizat ca intrebarile nu au caracter tendentios.Ma interesa ce tip de osciloscop ai, pentru a ne ajuta sa vedem care sunt diferentele intre ceas si ceas + termometru + setarile necesare ceasului, a datei, si pentru a stabili ce anume interfera cu precizia ceasului.Diferente exista. Luam de exemplu 100 intreruperi/s si 2 intreruperi/s. Eroarea in primul caz e mult mai mare (de aprox 50 ori), pentru ca eu cu creierul meu de gaina ma gandesc ca de fiecare data cand apare intreruperea, pic-ul trebuie sa salveze variabilele necesare pentru a putea reveni in siguranta la ceea ce facea anterior intreruperii. Nu am spus nicaieri ca am probleme cu cele 2 intreruperi/s.Nu cred ca in legatura cu quartz-ul am spus prostii. Am spus ca trebuie avut in vedere si lucrul acesta. Banuiesc ca exista o diferenta intre un cristal cu o toleranta de 0,035ppm si altul cu o toleranta de 100 ppm. Da' si cand o sa ai quarz dedicat, avand acelasi mecanism de tratare a intreruperilor, o sa ai aceleasi "probleme". Daca mecanismul respectiv nu functioneaza cu ceasul de sistem, nu vad de ce-ar functiona mai bine cu un ceas suplimentar. a fost prezentat in posturile anterioare cu o trimitere spre o discutie (http://www.picbasic.co.uk/forum/showthr ... ed_INT.bas) si s-a spus ca ceasul (doar ceasul isi pastreaza precizia.Am modificat acest "mecanism de tratare a intreruperilor" si am pastrat doar un singur flag si modificarea secundelor.Imi pare rau ca am deranjat inutil si cred ca e timpul sa ma fac nevazut.Multumesc pentru rabdare. Link spre comentariu
Liviu M Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Ai inteles gresit. N-ai deranjat cu nimic. Ba mai mult, spre deosebire de mine care doar "vorbesc", tu ai si facut cate ceva.Incercam numai sa-ti spun/arat ca intreruperile sunt tratate la fel, asa ca teoretic n-ar trebui sa fie "intarziate" diferit de complexitatea programului, ca in cazul asta sunt cam inutile.Daca am reusit, OK, daca nu nu mai am argumente, asa ca nu mai continui. Da' tu poti continua cu varianta de program cu 2 intreruperi, poate de data asta se "stabilizeaza".Pace.(n-au iconite cu bere)! Link spre comentariu
fratello Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 De ce v-ati suparat ? Toata lumea (eu SIGUR !) apreciaza ajutorul vostru ! Daca cei care solicita softul (si aici ma includ si pe mine, care am generat, oarecum, discutia...) s-ar descurca singuri, acest topic era deja finalizat... Cum am spus, este vorba de cunostinte de programare pe care eu nu le am...uneori discutiile despre intreruperi si TMR0 ma cam depasesc. Dar, personal, am incercat zeci de variante, poate-poate reusesc sa-i dau de cap. Eu sper ca veti continua sa postati aici ! Poate, impreuna, vom realiza ceva, invatand ceva ! Va salut si, sincer, ma plec in fata voastra cu respect ! Link spre comentariu
vasile eugen Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 Ajung diseara acasa si iti voi comunica si tipul display-ului...ceva de genu 15-MT-96 parcaDisplay-ul e un VFD (Vacuum Fluorescent Disp) filamentul acestuia se alimenteaza cu o tensiune alternativa..Ceva de genul asta.http://en.futaba.co.jp/display/vfd/calc/vfd_segm_1.htmlati reusit sa finalizati cu acest disply? Link spre comentariu
Liviu M Postat Ianuarie 30, 2011 Partajează Postat Ianuarie 30, 2011 In urma discutiilor de pe topicul asta, am ajuns la concluzia ca nu prea am idee ce face PIC-ul in cazul unei intreruperi (deh, programez in C, care-mi ascunde o parte din bucatarie).Asa ca am citit putin prin documentatia de la 16F628 si am descoperit un lucru interesant: pic-ul de unul singur nu salveaza pe stiva decat PC; restul "datelor", daca e cazul, trebuie salvate de programator. Am pus datelor intre ghilimele pentru ca, dupa parerea mea (asa cum scrie si in documentatie), e vorba mai mult despre registrul de stare (STATUS) si W: 14.7 Context Saving During InterruptsDuring an interrupt, only the return PC value is savedon the stack. Typically, users may wish to save keyregisters during an interrupt (e.g., W register andSTATUS register). This will have to be implemented insoftware.Cu alte cuvinte, atata timp cat programatorul /compilerul nu face ceva special in cazul unei intreruperi, timpul "pierdut" la servirea unei intreruperi ar trebui sa fie independent de complexitatea programului.Din pacate eu nu prea am idee ce mestereste compilerul meu in cazul unei intreruperi (ce anume salveaza). Asa ca m-am uitat acum in documentatia compilerului.Chipuriel din seria mid-range enhanced (habar n-am ce-s alea, or fi cele cu A?) salveaza in hard registrii importanti si nu trebuie facut nimic special.Enhanced Mid-Range PIC devices save the W, STATUS, BSR and FSRx registers inhardware (using special shadow registers) and hence these registers do not need tobe saved by software.Cipurile neenhanced trebuie "prelucrate" in soft. In afara de registrii speciali (mentionati in citat), compilerul meu salveaza "toate obiectele si registrii necesari", adica nu se poate cuantiza. Hm, ramane de studiat. Noapte buna! Link spre comentariu
dorelb Postat Ianuarie 31, 2011 Autor Partajează Postat Ianuarie 31, 2011 Am facut rost de un quartz de 4194,304 Mhz . Daca vrea cineva sa refaca softul pentru - Clock and dual thermometer- , cu acest quartz, sunt aici. Am si montat quartul pe placa. Si inca ceva. Cum pot sa masor niste quartzuri la care a disparut scrisul. Ceea ce face un lucru valoros, este nu ceea ce ai tu de castigat facandu-l, ci ceea ce pierzi daca nu-l faci. 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