Barebone digitalklocka rev2
Hej stötarna...
Här är en uppföljning för digital klocka projektet jag har skrivit om ett år sedan. Jag har inte funderat på drivan av modulen RTC! Jag har hittat den tendens att vara plus 1 RTC minut för varje 21 dagar passerat, det är enorma. Detta är redan efter att omorientera xtal oscillatorn i modulen DS1307 bryta ut för att vara så nära det chip som möjligt, som föreslog tillsammans med andra överväganden, i maxim app Anmärkning.
Alternativ som övervägs:
1. optimera RTC: titt för bästa xtal, matchande kapacitanser, etc, etc <--omöjligt
2. Lägg till manuell dekrement knappen för minuter värdet <--detta innebär ändringar i maskinvara. Den lätt väg ute!
3. auto-kalibrering av värd mikrokontroller
Algoritm:
Vad jag behöver är en mjukvaran-baserat automatisk kalibrering rutin. Efter några försök (och faktiskt att hitta tid att göra det!), kom jag upp med detta... Spara den cal factor 21 (dagar per minut) och dag den sista cal gjordes i ett bekvämt läge i beständiga. Varje gång klockan drivs upp (i mitt fall det vill säga varje morgon 07:05., utom helger och helgdagar ;), mcu läser dessa värden och jämför med RTC startdatum om multiplar av 21 dagar har redan passerat. Om ja, dekrement minut värdet med antalet motsvarande sedan spara nuvarande dag tillbaka till den platsen "lastCalDay". Samma gör check på nästa makt...
Genomförandet:
För cal platsen har DS1307 en 'general-purpose batteriuppbackat ram med obegränsad skriver'. Vi behöver två 8-bitars byte vardera för de calFactor och lastCalDay. För att räkna dagar skillnad, kommer att vi konvertera RTC datum (månad och dag nummer) till en enda heltal från ett referensdatum. För detta använder vi första dagen i innevarande år som referens, dag nummer 1. Detta innebär att det maximala antalet dagar mellan cal inte bör överstiga 365. Med dag nummer är praktiskt för att få skillnaden och också för att spara datumet till ram. Lägg bara till avsättning för nya år när dagar räkna går tillbaka från 365 till 1. En gång bestäms dagar skillnaden vi kan sedan stegvis minskning motsvarande antal minuter. För kod enkelhet valde jag att hoppa över cal om den resulterande minuten skillnaden kommer att rulla tillbaka den timmar siffran. Se attachmed för komplett kod genomförande.
Resultaten:
Min validering visade fungerar som avsett. Naturligtvis, koden och faktiskt algoritmen kan fortfarande vara optimerad för noggrannhet och elegans men nu den här en arbeten för mitt syfte bara bra!
Låt mig veta om du behöver mer information om du vill göra detta projekt... Förslag är också välkomna.
Tack. Njut!