MCP7940M RTC op arduino

Hallo allen,

Ik heb voor een schoolproject als opdracht gekregen het aantal mensen te tellen, die voorbij een bepaald punt komen. Ik gebruik hiervoor de Arduino Uno r3, een 24AA1025 EEPROM (via I²C), een LCD scherm en een MCP7940M RTC (Real Time Clock).

Deze laatste speelt mij echter parten. Ik heb deze aangesloten volgens de datasheet (zie bijlage), en kan via de arduino communiceren (via I²C). Ik kan de registers schrijven en lezen, dus de communicatie werkt. Het probleem is dat de RTC niet wil optellen (de tijd bijhouden dus)..

Datasheet:
http://ww1.microchip.com/downloads/en/DeviceDoc/22292A.pdf

Dit is mijn functie om de waarden in te stellen bij aanvang.

code:


void WireRTCSetup() {
   // RTC address
   Wire.beginTransmission(0x6F);
   // register
   Wire.write((uint8_t)0x00);
   // 00h (seconden)
   Wire.write((uint8_t)0x00);   // 0 to bit 7 starts the clock
   // 01h (minuten)
   Wire.write((uint8_t)0x00); 
   // 02h (uren)
   Wire.write((uint8_t)0x01);

   // 03h (dag van week)
   Wire.write((uint8_t)0x01);
   // 04h (dag)
   Wire.write((uint8_t)0x01);
   // 05h (maand)
   Wire.write((uint8_t)0x01);
   // 06h  (jaar)
   Wire.write((uint8_t)0x01);
   
   // 07h  (control reg)
   Wire.write((uint8_t)0x80);
   // 08h  (calibration)
   Wire.write((uint8_t)0x00);
   Wire.endTransmission();
}

En hier bijgevoegd is het schema:
http://i40.tinypic.com/35a3nt4.jpg

Adres is goed. Naar het secondenregister moet je 0x80 sturen, de seconden gaan dan op 00 en het startbit naar '1'. Doe je dat niet dan loopt de klok niet. Mijn ervaring is dat de MCP7940X al gauw te snel loopt, bij mijn configuratie met kristal/condensatoren moet ik ongeveer 0x16 naar het calibratieregister sturen dan is hij behoorlijk precies...

Je moet ook de waarden maskeren, vooral bij uitlezen/wijzigen/wegschrijven. Houd er rekening mee dat het BCD is.

Als ik dat doe, en daarna de klok uitlees, zie ik gwn 1 (uren), 0 (minuten) en 128 (seconden - decimale vorm van 0x80)..
Dus de chip loopt niet

Als de klok niet loopt met het ST bit geset dan klopt er iets niet met het kristal of de combinatie kristal/condensatoren. In oude datasheets staat dat de MCP7940X geschikt is zowel 12.5pF als 6/7pF kristallen, dit is in latere datasheets gewijzigd; het moet echt een 6/7pF type zijn. Met een 12.5pF kristal loopt hij wel maar zo snel dat het met het calibratieregister niet meer te corrigeren valt. Ik zou even kijken of het kristal wel wat doet...

Aha, dat zou wel kunnen.. Ik had als kristal 3 van deze besteld:
http://be.farnell.com/jsp/search/productdetail.jsp?SKU=1652573

Dus best op zoek gaan naar een 6/7pF type?
edit:
een van deze zou moeten voldoen?
http://be.farnell.com/jsp/search/productdetail.jsp?SKU=1641085

[Bericht gewijzigd door Ramvan op dinsdag 17 april 2012 15:33:46 (24%)

Je zult merken dat je de MCP7940X met dit 12.5pF type kristal bijna niet op tijd kunt laten lopen, hij loopt er veel te snel mee. Dat neemt niet weg dat hij wel zou moeten lopen. Ik begrijp dat je niet een complete print gekocht hebt maar gewoon losse componenten, loop de verbindingen van het kristal met de beide condensatoren even goed na. Ik weet niet of je ze gesoldeerd hebt of met een breadboard werkt, voor een breadboard zijn de kristal aansluitingen erg dun; als er al een dikkere draden ingezeten hebben kan het zijn dat hij net geen contact maakt. Bij solderen moet je opletten dat je het kristal niet onnodig lang heet stookt; hij kan er kapot van gaan. Hij zou ook met twee 10pF condensatoren gewoon moeten lopen, hoewel te snel dus...

Kristal van 6/7pF bestellen kan altijd nog dan ;-)

Het gekozen 6pF kristal van Farnell zou moeten voldoen, jammer genoeg heeft Farnell niet de in de datasheet aanbevolen kristallen.

Dus als ik het goed begrijp zou de chip ook moeten lopen op de kristallen die ik nu heb (weliswaar te snel)?

Wel, ik heb alle aansluitingen (op mijn breadboard) al minstens 5 keer uitgemeten en nagekeken, en alles is goed aangesloten. Ook heb ik al 3 verschillende kristallen geprobeerd, en 2 verschillende chips. Geen idee waar het dan nog aan kan liggen dat hij gwn totaal niet loopt

edit: ik gebruik voor alle duidelijkheid een breadboard, en de 2 draden van het kristal heb ik gewoon bij de pinnen van de IC gestoken, dus deze heeft zeker verbinding

[Bericht gewijzigd door Ramvan op dinsdag 17 april 2012 15:47:47 (18%)

Heb je wel echt 10pF/12pF condensatoren en niet 10nF/12nF???

Als je hele dunne draden in een breadboard bij dikke draden steekt is het helemaal niet gezegd dat het contact maakt. Je gebruikt dus een adapter printje voor de MCP7940X want deze is niet in DIL verkrijgbaar. Kun je het kristal en de condensatoren niet op het adapterprintje solderen???

Heel zeker, ben er enkele dagen geleden speciaal voor naar de winkel gegaan :)

Ik heb de MCP7940M als PDIP (sample) besteld, dus ik gebruik geen adapter printje
hier:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en557488#3

[Bericht gewijzigd door Ramvan op dinsdag 17 april 2012 15:54:31 (53%)

Ah ik zie het al, ik gebruik de MCP79410 en die is er alleen in SMD. Maar behalve dat de mijne een aansluiting heeft voor een batterij zie ik geen verschillen. Hij zou dus gewoon moeten lopen...

Dan zou ik beter gewoon zo'n rtc-arduino-module kopen :p dan ben ik van de problemen af

[Bericht gewijzigd door Ramvan op dinsdag 17 april 2012 16:08:52 (22%)

Nee joh, gewoon een stukje gaatjesprint in plaats van een breadboard en dan de boel goed solderen. Ik heb toch mijn bedenkingen tegen breadboard contactjes. Je kunt ook proberen het kristal juist niet bij het ic in hetzelfde gaatje te stoppen. Het IC drukt de breadboard contacten vrij ver uit elkaar; kijk maar eens goed op internet hoe een breadboard in elkaar zit. Een pennetje van een DIL IC is iets van 0,7mm dik in de breedte, een aansluiting van zo'n kristal is maar 0,3-0,4mm dik. Als het al een oud breadboard is zou je het kristal ook direct op de pennetjes van het ic kunnen solderen.

Kun je niet even een foto maken hoe je opstelling er nu uitziet?

idd, het lag dus aan het breadboard. Ik heb zonet het kristal rechtstreeks aan de pootjes van de RTC gesoldeerd, en nu werkt het.

Nu nog eens opzoeken hoe dat werkt met die calibratrie..

Alvast heel erg bedankt :)

[Bericht gewijzigd door Ramvan op dinsdag 17 april 2012 16:51:47 (19%)

You're welcome ;-)

Je zult nu denk ik toch wel een kristal van 6/7pF moeten gaan bestellen want ik denk niet dat als je nu al ziet dat hij te snel is hij nog met het calibratieregister bijgesteld kan worden...

Ik heb zelf nu na veel proberen inderdaad een condensator van 10pF en een van 12pF en een kristal van 7pF; dit loopt nog steeds te snel maar dat is te verhelpen door 0x17 in het calibratieregister te schrijven; dan pas is hij echt nauwkeurig...

Denk er ook aan dat als je leest/schrijft de niet gebruikte bits weg te maskeren...

Ik ga nu over een periode van een paar uur testen wat de afwijking is.

Voor zover ik die calibratie snap:
jij zegt 0x17 -> dus worden er 23 (17 naar dec) clock cycles bijgeteld per minuut? Hierdoor zal de klok dus 46 (register aantal * 2) cycles per minuut vertraagd worden.

Juist?

En voor mijn geval, is er een manier om deze calibratie te berekenen? Of doe ik dit best door trial & error?