fratello Postat Decembrie 20, 2013 Partajează Postat Decembrie 20, 2013 "Ar trebui citită teoria despre obținerea secundei ”perfecte” cu orice quart de la http://www.romanblack.com/one_sec.htm" Exact acest algoritm este prezentat in schema Josepino : http://josepino.com/microcontroller/how ... controller ! Link spre comentariu
yo6pir Postat Decembrie 21, 2013 Partajează Postat Decembrie 21, 2013 DA baieti, va cred pe cuvant si am vazut si acea teorie a lui romanblack in legatura cu generarea secundei "perfecte". Numai ca pentru mine este extrem de complicat si de stufos sa implementez in softurile mele acea teorie; de aceea am abordat o solutie mult mai simpla: folosirea unui cristal cu frecventa 2^x si divizarea acesteia intr-o rutina simpla pe care din fericire o am deja inclusa in platforma IDE pe care o folosesc pentru scrierea softurilor mele BASCOM AVR. Cam asa arata la mine rutina de creare a "secundei perfecte": $regfile = "m8adef.dat" $crystal = 4000000 $hwstack = 40 $swstack = 16 $framesize = 32Config Submode = NewConfig Clock = Soft , Gosub = Sectic 'Use the softclock, 32.768KHz crystal connected to tosc1 and 2Time$ = "12:30" 'ceasul setat initial la 12:30Do'Aici se executa operatiile principlale ale programuluiLoop'Rutina de incrementare a secundeiSectic:Incr TreturnEnd Mai sunt si alte detalii ale codului dar nu le-am trecut cum ar fi variabilele deja incluse in rutina automat: _sec, _min, _hour. Deci se poate trage concluzia de ce nu ma "complic" cum as putea spune, nu? Si sa nu uitam, acesta este avantajul folosirii AVR-urilor nu al PIC-urilor, HI! (Fara suparare!) Link spre comentariu
XAN77 Postat Decembrie 21, 2013 Partajează Postat Decembrie 21, 2013 ...pentru mine este extrem de complicat si de stufos sa implementez in softurile mele acea teorie...Vaai dar este păcat să nu înțelegeți cum se implementează, este chiar foarte simplu.Să zicem că folosim un cristal de 20MHz că avem nevoie de viteză pentru a avea timp de alte taskuri.Punem un timer să numere ciclurile de ceas, astfel într-o secundă timerul va număra 5.000.000 de pulsuri. Acela e momentul unei secunde, când a numărat 5.000.000, numai că nu este un număr ”rotund” în binar, dar nu e o problemă.Punem la treabă orice timer cu un oarecare prescaler, cît să avem timp între întreruperi de ce mai e nevoie de făcut. De exemplu timer de 8 biți cu prescaler 16, în total 256*16=4.096 clocuri. Ce trebuie implementat practic în soft e următorul lucru:În întrerupere (ce se produce o dată la 4.096 cloci) incrementăm cu 4.096 o variabilă de 24 biți, ceva gen variabilă = variabilă + 4096, sau variabilă+=4096 cum s-ar scrie simplificat în CApoi comparăm variabila cu o constanta cu valoarea de 5.000.000 cît reprezintă o secundă. Cît timp variabila e mai mică, deci nu a trecut o secundă, nu se întîmplă nimic, iar cînd este mai mare sau egal cu constanta, scădem din variabilă valoarea de 5.000.000 (nu o resetăm), validăm în soft secunda (cu incrementările de rigoare minute ore etc daca e cazu).În acel moment variabila noastră nu va avea valoarea 0, ci o oarecare valoare dar sub 4096, valoare care va fi diferită la fiecare validare de secundă. Deci, nefiind 5 mil o putere a lui doi, rămîne mereu un rest, dacă la prima secundă s-a adunat de n ori 4096 și a depășit cele 5 milioane cu 359 de exemplu, la următoarea secundă va fi necesar de incrementat cu 359 mai puțin pentru a ajunge la 5 mil, astfel nici o secundă nu e perfectă, dar, per total ceasul nu se abate deloc de la ora exactă, teoretic nu cu mai mult de acel mic rest care rămîne după scăderea cu 5 mil din variabilă. Acele ”erori” se cumuleaza/anuleaza reciproc. La o secundă depășește 5 mil, dar la următoarea nu mai e nevoie să numere pînă la 5 mil că e rămas restu de la secunda anterioară și tot așa, de aceea se numește ”zero cumulative error”.Și pentru că astfel ai avantajul să reglezi precizia, nici un cuarț nefiind perfect, ajustezi din soft valoarea constantei care trebuie scăzută la fiecare secundă, de exemplu 5.000.200 sau 4.999.800 și poți spera spre perfecțiune. Doar problemele termice mai pot sta în calea ei.Sper că nu am bătut cîmpii Link spre comentariu
albasete Postat Decembrie 21, 2013 Partajează Postat Decembrie 21, 2013 Xan, cred ca ai dreptate. Frumos explicat si interesant. Nu stiam treaba asta. . Citind ceea ce a prezentat Fratello, am constatat ca seamana cu explicatiile lui Xan. Omu' cat traieste invata. Aseara am reusit sa mai "trag" cateva lipituri la ceas. Poate i-l termin pana la Craciun. Link spre comentariu
yo6pir Postat Decembrie 21, 2013 Partajează Postat Decembrie 21, 2013 XAN77 te felicit domnule pentru ca mi-ai dat o explicatie la acel algoritm, ca un adevarat profesor. Sincer te felicit caci am vazut ca stii. Jos palaria! Cu toate ca eu n-am inteles prea multe am convingerea ca este corect daca toti au facut ceasuri cu calculul secundei dupa acel algoritm. Numai ca eu mi-am facut deja o parere fata de ceea ce inseamna sa construiesti un ceas, si asta se refera la deja-bine-cunoscutele REAL TIME CLOCK uri pilotate de mini-cristale de 32768 fie ele integrate intr-un cip, sau folosirea de cristale cu frecventa puteri ale lui doi. Asta tine de experienta fiecaruia si nu spun ca celelalte sunt mai bune sau mai putin bune; spun numai ca un ceas trebuie imperios sa respecte secunda si sa arate ora exacta altfel nu se poate numi ceas ci orice altceva. Pe-de-alta-parte din cate ceasuri am construit, nici unul nu a functionat mai precis decat cele pilotate cu cristale de frecventa 32768 si nu trebuie sa-i ajustez frecventa din nici un trimer. Merge brici! Asta spune tot. P.S. Am construit chiar un ceas cu PIC16F873 pentru masina care era la inceput cu quartz de 4MHz. Grabea sau intarzia de nebun. Apoi am citit mai cu atentie datasheet-ul acelui uC si am vazut ca suporta cristal de ceas de LOW FRECVENCY pe terminalele TIMER1 care numara in ASYNCRONE MODE, si am rescris softul; a iesit un ceas de minune adica un adevarat RTC, asta ca sa nu se creada care-cumva ca am ceva cu PIC-urile! NU, le indragesc si pe alea, dar mai dragi mi-s AVR-urile, HI! Link spre comentariu
XAN77 Postat Decembrie 22, 2013 Partajează Postat Decembrie 22, 2013 Mulțumesc de aprecieri. Păi sunt mai multe moduri de a face un ceas, depinde de preferințe și/sau constrîngeri. Primele ceasuri le făceam cu cristal de 4,194304 MHz, apoi am devenit fan înrăit DS1307, însă cu niciuna din variante nu am fost pe deplin mulțumit de precizie, probabil cristale de proastă calitate, apelam la corecții în soft. DS1307 mi-a fost util însă la ce nu mă așteptam. Am avut probleme cu celulele eeprom datorită variațiilor de rețea și țineam datele în siguranță in SRAM-ul lui 1307. Ca ceas, ceasul lui bogdi mi-a plăcut cel mai mult http://bogdi.ro/electronics/digital%20clock/ Faptul că e cu PIC nu are relevanță. Link spre comentariu
Depanatoru Postat Decembrie 22, 2013 Partajează Postat Decembrie 22, 2013 Quartzurile nu-s super exacte , fara trimer de reglaj trebuie lucrat din soft daca esti pretentios si vrei precizie mare . Exact ca la un frecventmetru Link spre comentariu
yo6pir Postat Decembrie 22, 2013 Partajează Postat Decembrie 22, 2013 Afirmatia este valabila in cazul folosirii unor cristale de mare frecventa gen 4MHz sau mai sus. In cazul folosirii cristalelor de joasa frecventa gen 32768Hz nu este nevoie. Si iata de ce:- Din fisa de catalog a cristalelor de Quartz reiese ca abaterea lor poate fi de +/-30ppm (parti pe milion) fata de frecventa exacta inscrisa.-Daca facem un calcul sumar reiese ca pentru un cristal de 4MHz abaterea poate fi de +/-120Hz; mare zic eu! Cristalul de 32768Hz are abaterea calculata de +/-0,98304Hz, adica aprox. 1Hz; buna, zic eu!-Din trimer se poate regla in limita a 120Hz dar sa reglezi din trimer in limita a 1Hz sau mai putin, hai sa fim seriosi! Vedeti de ce toti producatorii de ceasuri folosesc pentru pilotare cristale de joasa frecventa? Si pot zice ca am vazut o gramada de montaje, placi de PC sau ceasuri cu cristale de 32768 si nici una nu avea pe bornele cristalului trimeri de ajustare. Trageti singur concluziile! Spor la construit! Link spre comentariu
XAN77 Postat Decembrie 22, 2013 Partajează Postat Decembrie 22, 2013 Electronica oricum divide semnalul oscilatorului, fie el de 4MHz sau 32KHz pentru a ajunge la 1 puls pe secundă. Ori 120Hz la 4MHz ori 1Hz la 32KHz e tot aia, abaterea e aceeași, nu e deloc mai mare la cel de 4MHz.Nu știu cu ce ceasuri v-ați întîlnit voi, oi fi eu prea pretențios sau ghinionist. Pentru mine un ceas care într-o lună se abate cu maxim o secundă e acceptabil. MAXIM am spus Credeți că calculatoarele merg bine? Acuma merg pentru că au internet la dispoziție sau rețea de unde își ia ora exactă, dar înainte îmi aduc aminte cum era, precizie ioc. La ceasurile de mînă însă, întradevăr, precizie. Link spre comentariu
Depanatoru Postat Decembrie 22, 2013 Partajează Postat Decembrie 22, 2013 Quartzul de 32KHz nu e in principiu cu nimic mai bun , cu totii am avut macar o data un ceas de mana nu f exact , daca unul de frecventa mare merge mai prost e de la soft , ca nu s-a stiut obtine exact secunda .Totusi probabil ca se gasesc quartzuri de 32KHz de calitate superioara si mai exacte in unele ceasuri , pe cand ce folosim noi de frecventa inalta sunt cele mai ieftine posibil . Link spre comentariu
fratello Postat Decembrie 22, 2013 Partajează Postat Decembrie 22, 2013 Cu tot respectul meu pentru initiatorul acestui topic, caruia ii admir munca si pe care il felicit, postez in atasament schema unui ceas/termometru, cu Attiny2313 si DS18B20 (2 senzori), ca o "completare" a discutiilor de mai sus ; RTC-ul este insa un DS1307. Schema am gasit-o pe undeva, pe la rusi ...nu mai stiu unde ... Sper sa nu se supere cineva ... Link spre comentariu
yo6pir Postat Decembrie 22, 2013 Partajează Postat Decembrie 22, 2013 Frumos proiect asta rusesc! E o bila alba la ceea ce sustin si eu ca un ceas cu cristal de 32Khz nu are nevoie de trimer de acord si este intr-adevar REAL-TIME-CLOCK. Nu degeaba s-au inventat cipurile dedicate gen DSxxxx, etc, care au atasate astfel de cristale. P.S. Cred totusi ca rusii trebuiau sa limiteze curentul de drive pentru LED-uri, cu niste rezistente, ca sa nu forteze iesirea uC-lui, nu? Link spre comentariu
val Postat Decembrie 27, 2013 Partajează Postat Decembrie 27, 2013 Am construit chiar un ceas cu PIC16F873 pentru masina care era la inceput cu quartz de 4MHz. Dacă faceţi referire la acest proiect: http://www.qsl.net/yo6pir/clockauto.html aş avea o mare rugăminte către dumneavoastră: puteţi să-mi oferiţi fişierul HEX necesar programării PIC-ului? Şi aş mai dori un sfat: display-ul pe care-l deţin este un SDA 5708-24 fabricat de Siemens (recuperat dintr-un receptor Nokia dBox), se poate folosi în locul celui folosit în proiectul dumneavoastră - SDA5708 Philips? Vă mulţumesc anticipat. Link spre comentariu
unuldinei Postat Decembrie 27, 2013 Partajează Postat Decembrie 27, 2013 foarte interesant topicul , s-a creeat ceva asa ca o mica Elvetie ... glumesc . Multe lucruri de invatat aici , dar pana sa va citesc am facut si eu un ceas cu atmega8 si l-am abandonat intr-o cutie pe undeva...fLRitUlOkIY acum lucrez la unul care stie cu anii bisecti , ziua din saptamana , fazele porcului... . Ce ma intereseaza e consumul ! Tre' sa fim in era LowPower !! poate initiem un concurs pe tema asta ?HNY! Link spre comentariu
fratello Postat Decembrie 28, 2013 Partajează Postat Decembrie 28, 2013 Acest ceas promite o functionare de pana la 5 ani cu un set de baterii (?!) : http://danyk.cz/avr_lcd_hod_en.html 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