Stap 1: De DS1307 realtime klok
Voor dit kleine project zullen we alleen gebruiken om de tijd bij te houden. Het moet daarom een 32.768kHz kwartskristal verbonden tussen pin 1 en 2. We kunnen ook een batterij met + op pin 3 en pin 4 toevoegen. Hierdoor kunnen de IC blijven werken wanneer de mainpower is uitgeschakeld. Als u niet wilt dat deze functie wilt gebruiken, u kunt gewoon verbinden met pin 3 pin 4 en alles zal werken prima.
Pin 5 en pin 6 zal worden gebruikt om de gegevens overbrengen naar onze microprocessor. Zij moeten worden aangesloten op de SCL en SDA pinnen op uw microprocessor. Deze regels moeten door een weerstand van 4K 7 pullup hoge worden getrokken.
Bascom maakt het werken met I2C apparaten gemakkelijk. U hoeft alleen te weten 4 opdrachten:
- I2cstart: deze commant zal opstarten I2c communicatie
- I2cstop: met deze opdracht stopt I2c communicatie
- I2crbyte var: deze opdracht leest een byte van het apparaat en slaat ze in 'var'
- I2cwbyte var: deze opdracht schrijft u de variabele 'var' naar het apparaat
Met de opdracht schrijven of lezen is niet genoeg, we zullen ook moeten vertellen het apparaat of we willen naar het schrijven of lezen van het. Wij doen dit met behulp van het juiste adres. Deze adressen kunnen worden gevonden in het gegevensblad. Het schrijven-adres voor de DS1307 is D0H en het lezen-adres D1H (de H erachter vertellen ons dat dit zijn hexadecimale cijfers).
De DS1307 verzendt en ontvangt gegevens in de BCD-indeling wil. Dit is een variatie op binary voor diplays waarin elk cijfer wordt vertegenwoordigd door vier stukjes. Meer over dat hier. Gelukkig converteren van BCD naar decimaal en visa versa is zeer makkelijk in Bascom.
- var Makebcd(var) = zal converteren naar decimaal, hexadecimaal en binair BCD
- var Makedec(var) = hex, binary zal omzetten en BCD in decimaal
De gegevens worden opgeslagen op de IC in het register. U kunt hen voorstellen als die ouderwetse filingcabinets. Elke bak een nummer en bevat één of andere info:
00H Seconds
01H minuten
02H uur
Dag 03H
04 H datum The H vertellen ons dat dit zijn hexadecimale cijfers.
05H maand
06H jaar
07H controle
08H tot 3FH Ram
Als we willen lezen of opslaan van sommige gegevens moet we eerst vertellen het apparaat in welke lade die we willen zijn. Kunnen we dit door het schrijven van de hexadecimale code voor die bak aan het apparaat. Het apparaat zal dan verlenen ons toegang tot die lade. Nadat u schrijven of iets te lezen van of naar dit register die het apparaat zal automatisch naar de volgende dia springen. Dus is er geen noodzaak voor het verzenden van de locatie elke keer
Laat nu zet dit in code:
Deze code moet u dim uren als byte, als byte minuten en seconden als byte. Eerst, zullen wij de klok instellen:
Seconden = Makebcd(Seconds) wij onze variabelen in de BCD-indeling converteren
Minuten = Makebcd(Minutes)
Uren = Makebcd(Hours)
Reset hours.6 We opnieuw instellen van bit 6 van de hoursbyte om ervoor te zorgen dat
onze klok in 24h-modus wordt uitgevoerd. Als bit 6 1 is dan is de
klok loopt op 12u modus en bit 5 zal dan
de AM/PM-gegevens bevatten.
I2cstart
I2cwbyte & HD0 We vertellen het apparaat dat we willen schrijven een byte
2cwbyte & H00 We beginnen bij het register voor seconden hex 00
I2cwbyte seconden toevoegen seconds
I2cwbyte minuten toevoegen notulen
I2cwbyte uur toevoegen uur
I2cstop
Onze klok is nu ingesteld! Laat nu van het lezen.
I2cstart
I2cwbyte & HD0 wij vertellen het apparaat dat we willen een byte schrijven.
I2cwbyte & H00 wij vragen het apparaat naar het register seconden.
I2cstop
I2cstart
I2cwbyte & HD1 wij vertellen het apparaat dat we willen lezen bytes.
I2crbyte seconden, Ack We de gegevens lezen en erkennen dat we willen
om te lezen ook de volgende byte.
I2crbyte minuten, Ack
I2crbyte uur, Nack We niet ackowledge hier, zodat het apparaat weet
dat zijn we klaar lezing.
I2cstop
Uren = uren en & B00111111 We verwijderen bit 6 en 7 als ze andere bevatten
gegevens. Bent u in 12h modus, moet u
bit 5 te verwijderen
Uren = Makedec(Hours) We terug omzetten in decimale notatie.
Minuten = Makedec(minutes)
Seconden = Makedec(seconds)
Nu weten we hoe laat het is.
In de volgende stap zullen we een kijkje op de DS18B20.