De arduino uno heeft geen ingebouwde klok, maare en extrene klok met I2C verbinding kan aangesloten worden. |
-
Voor de RTC (real time clock) wordt er een DS1307 of DS3231 gebruikt. De tweede RTC heeft een extra data ruimte waar we de alarmtijd in kunnen opslaan, maar dit is niet echt nodig, want de Atmel processor die in de arduino gebruikt wordt heeft ook EEPROM geheugen die we byte per byte kunnen lezen of schrijven. Eigenlijk hebben we maar drie bytes nodig: uur, minuten en alarm aan/uit. De EEPROM wordt geschreven bij het verlaten van de alarm instelmodus (en enkel als de instelling veranderd is geweest). Er lopen 4 aansluitingen tussen de arduino en de klok: de massa, de 5V voeding, SDA en SCL (data en klok voor de seriele verbinding). Er moet een library bijgeladen worden om de communicatie te verzorgen, en dan kan er op eenvoudige manier met de klok gecommuniceerd worden. Opgelet, er zijn libraries die de digitale lijnen gebruiken en andere libraries die de analoge lijnen gebruiken, en er is geen mogelijkheid om dat te veranderen. Omdat ik bijna alle digitale lijnen nodig heb, heb ik voor een library gekozen die de analoge lijnen gebruikt. De libraries die op de site van arduino zelf staan betreffen de arduino zero met ingebouwde klok. In de voorbeelden gebruik ik de arduino uno. De bij te voegen includes moeten in een folder staan in de "libraries" met als foldernaam de naam van het bestand, maar zonder ".h" (RTClib.h moet dus in een folder RTClib staan). Opletten, Linux maakt een verschil tussen hoofd- en kleine letters! Er kunnen problemen ontstaan omdat men een bepaalde library downloadt, maar dan de instructies van een andere library gebruikt. Het is belangrijk de instructies te gebruiken die bij de betreffende library horen. Voor de basisfunkties zijn er weinig verschillen tussen de verschillende modules. Sommige libraries hebben een extra include nodig voor de I2C communicatie (wire.h), andere libraries hebben de nodige kode zelf aan boord. Kijk naar de gebruikte IC op het printje (meestal is dat DS1307) om de nodige library te zoeken. De RTC funkties die op de site van arduino zelf aangeboden worden zijn voorzien voor de arduino zero, een module met ingebouwde RTC klok. Wat de communicatie beteft: die is ondertussen volledig gestandardiseerd en er zouden hier geen problemen moeten zijn. Het is niet zo dat het I2C protocol een nieuwe uitvinding is: het protocol bestaat sinds de jaren 1980. Het printje dat hier getoond wordt heeft als extra een geheugen EEPROM 24C32 die hier niet gebruikt wordt. Er kunnen een groot aantal IC's met elkaar verbonden worden via de I2C bus, en ieder IC heeft een eigen adres, zodat storingen vermeden kunnen worden. Om het geheugen-IC te gebruiken moet gewoon de nodige library geladen worden. Er is een 3V batterij nodig die de print jaren van spanning kan voorzien. De software (listing) is hier te vinden. Dergelijke RTC modules worden ook gebruikt in thermostaten van de centrale verwarming voor het bewaren van de tijd en de temperatuurinstellingen bij een stroomonderbreking. Als je geluk hebt bestaat de RTC uit een inplugbaar module en moet je enkel nog uitvissen wat de massa, de 5V, de SDA en de SCL lijnen zijn. Het kristal is het zwart blokje boven links. Soms is het gebruikte IC niet compatibel (het IC wordt immers ook gebruikt om andere data op te slaan). De lithium niet-oplaadbare batterij (bijvoorbeeld een CR2032) kan in bepaalde modules vervangen zijn door een lithium accu (bijvoorbeeld type LIR2032). De capaciteit van een accu is veel lager, namelijk 50mAh in plaats van 240mAh, maar die wordt automatisch weer bijgeladen als er spanning is. |
Publicités - Reklame