Numitron Klocka & termometer (1 / 8 steg)
Steg 1: DS1307 realtime klockan
För denna lilla projekt använder vi endast det att hålla reda på tiden. Det måste därför en 32.768kHz kvartskristall ansluten mellan stift 1 och 2. Vi kan också lägga till ett batteri med + till stift 3 och -till pinne 4. Detta gör IC att fortsätta arbeta när mainpower är avstängd. Om du inte vill använda den här funktionen, du kan bara ansluta stift 3 till stift 4 och allt kommer att fungera bra.
Stift 5 och stift 6 kommer att användas för att överföra data till våra mikroprocessor. De bör vara ansluten till SCL och SDA stiften på mikroprocessorn. Dessa rader ska pull high en 4K 7 pullup motstånd.
BASCOM gör arbetet med I2C enheter lätt. Du behöver bara veta 4 kommandon:
- I2cstart: denna commant kommer start I2c kommunikation
- I2cstop: det här kommandot kommer att stoppa I2c kommunikation
- I2crbyte var: detta kommando läser en byte från enheten och lagrar den i 'var'
- I2cwbyte var: detta kommando skriver variabeln 'var' till enheten
Använda kommandot Skriv eller Läs räcker inte, vi måste också berätta för enheten om vi vill skriva till det eller läsa från den. Vi gör detta genom att använda rätt adress. Dessa adresser finns i databladet. Skriva-adressen för DS1307 är D0H och den Läs-adress D1H (H bakom det säga oss att det är hexadecimala siffror).
DS1307 skickar och vill ta emot data i BCD-format. Detta är en variant på binär för visar där varje siffra representeras av fyra bitar. Mer om det här. Lyckligtvis konvertering från BCD till decimal och visum versa är mycket lätt i Bascom.
- var = Makebcd(var) kommer att konvertera decimala, hexadecimala och binära till BCD
- var = Makedec(var) kommer att konvertera hex, binär och BCD till decimal
Data lagras på IC i register. Du kan tänka dig dem som gammaldags filingcabinets. Varje låda har sitt nummer och innehåller lite info:
00H sekunder
01H minuter
02H timmar
03H dag
04 H datum H: berätta att dessa är hexadecimala siffror.
05H månad
06H år
07H kontroll
08H till 3FH Ram
Om vi vill läsa eller lagra vissa uppgifter har vi först att berätta den enhet i vilken låda vi vill vara. Vi kan göra detta genom att skriva hex koden för att lådan till enheten. Enheten kommer att sedan ge oss tillgång till att lådan. När du skriver eller läsa något från eller till detta register enheten kommer automatiskt hoppa till nästa. Så finns det ingen anledning att skicka platsen varje gång
Nu kan sätta detta i koden:
För denna kod måste du dim timmar som byte, minuter som byte och sekunder som byte. Det första kommer att vi ställa klockan:
Sekunder = Makebcd(Seconds) vi konvertera vår variabler i BCD-format
Minuter = Makebcd(Minutes)
Timmar = Makebcd(Hours)
återställa hours.6 vi återställa bit 6 av hoursbyte se till att
vår klocka körs i 24h modus. Om bit 6 är 1 då den
går klockan i 12h modus och bit 5 kommer då
innehåller data som AM/PM.
I2cstart
I2cwbyte & HD0 vi berätta för den enhet som vi vill skriva en byte
2cwbyte & H00 börjar vi i kassan för sekunder hex 00
I2cwbyte sekunder lägga sekunder
I2cwbyte minuter lägga till minuter
I2cwbyte timmar lägga timmar
I2cstop
Nu är vår klocka inställd! Kan läsa från det nu.
I2cstart
I2cwbyte & HD0 vi säga enheten att vi vill skriva ett byte.
I2cwbyte & H00 ber vi att enheten ska gå till sekunder registret.
I2cstop
I2cstart
I2cwbyte & HD1 vi säga enheten att vi vill läsa byte.
I2crbyte sekunder, Ack vi läsa data och erkänna att vi vill ha
att läsa den nästa byten också.
I2crbyte minuter, Ack
I2crbyte timmar, Nack vi inte ackowledge här så vet att enheten
som vi gjort läsning.
I2cstop
Timmar = timmar och & B00111111 vi bort bitar 6 och 7 eftersom de innehåller andra
data. Om du är i 12h modus, måste du
ta bort bit 5 för
Timmar = Makedec(Hours) vi konvertera tillbaka till decimalformat.
Minuter = Makedec(minutes)
Sekunder = Makedec(seconds)
Nu vet vi vilken tid det är.
I nästa steg tar vi en närmare titt på DS18B20.