Stap 13: DS1307 Real timerklok IC
http://www.Maxim-IC.com/Datasheet/index.MVP/id/2688
Lees het gegevensblad, bevat het de opdrachten voor de chip en andere details. Moet u weet dat dit spul als je kijkt naar mijn broncode zodat u weet wat er gaande is.
Wat doet het? Zij sporen tijd, zodat uw microcontroller niet te hoeft zijn. Het zal zelfs het bijhouden van tijd met behulp van een knoopcelbatterij geplaatst, terwijl de belangrijkste stroom uitgeschakeld is, dus je krijgt niet dat classic 12:00 uur knipperen dat gebeurt er met oude wekkers als de stroom uitvalt. Oh en het de datum te worden bijgehouden.
Merk op dat er veel betere alternatieven voor de DS1307 vandaag met betere eigenschappen, echter, vond ik deze chip in mijn collectie van oneven getallen, dus ik ga om het te gebruiken.
Deze chip moet de volgende dingen eromheen: een horloge kristal, een batterij back-up (3V-cel van lithiummagnesiumoxide uit de dollar winkel zal laatste 9 jaar), een voeding en een ontkoppeling van de condensator.
De microcontroller zal communiceren aan de DS1307 via een I2C (inter geïntegreerde circuit) bus. De I2C-bus is ook bekend als TWI (twee wire interface, het maakt slechts gebruik van twee draden). Het is bedoeld voor communicatie tussen meerdere geïntegreerde schakelingen. Zie bijlage D voor meer informatie over de I2C en TWI.
Wat we moeten doen met de DS1307 is eenvoudig, we moeten alleen de tijd en de tijd lezen.
De DS1307 houdt de gegevens in verschillende registers. Verwijzen naar het gegevensblad, tabel 2, bladzijde 8. Het toont de gegevens worden opgeslagen in binary coded decimale notatie, die onze broncode zal coderen en te decoderen. We zullen deze registers schrijven, wanneer we de tijd instellen en lezen uit de dezelfde registers op te halen van de tijd.
Een goede beschrijving van de I2C-bus wordt gegeven op pagina 10 van het gegevensblad. Het gedeelte van het AC-elektrische karakteristieken van het gegevensblad vermeldt dat onze I2C-bus moet uitvoeren op 100 KHz of lager (dit is configureerbaar binnen onze broncode), houd hier rekening mee. Het adres van de DS1307 is 1101000, onthoud dat ook.
Wij willen bijvoorbeeld, stelt u de seconden, zodat het register 0x00 is. Wij verzenden eerst via I2C
0b11010000
Dit behandelt de DS1307, en zegt dat we willen schrijven
dan sturen we
0x00
om aan te geven van het register 0x00
dan sturen we het nummer we wilt instellen, gecodeerd in binary coded decimale notatie
Dan, als we willen lezen terug de seconden, het register is weer, 0x00, sturen wij eerst
0b11010000
Merk op dat dit het adres is, maar we nog steeds opgeven zijn dat we willen schrijven
Waarom opgeven "schrijven" wanneer we willen lezen? Want we hebben de DS1307 niet verteld waar we willen om te lezen van (het opzetten van het register adres binnen de DS1307). Dus sturen wij
0x00
dan beëindigen wij de gegevensoverdracht
Vervolgens sturen
0b11010001
nu zijn we aanpak van de DS1307 en geven dat we willen lezen
vervolgens rijden we de klok terug de om gegevens te lezen, die de DS1307 op de data lijn voor ons. We kunnen vervolgens de gegevens uit de binary coded decimale notatie decoderen.
Het is belangrijk te begrijpen dat omdat we van onze AVR ingebouwde TWI-module voor I2C communicatie gebruiken, het weet om automatisch de SDA lijn wanneer we aangeven "lezen" in de eerste byte die we sturen. De hardware en de software (we zijn met behulp van "twi.c" uit "Wire" bibliotheek voor de Arduino). ALLES is geautomatiseerd, zelfs de bevestigingen.
Voor onze doeleinden, zullen we worden lezen en schrijven alle van de instellingen voor tijd in één keer, voor de efficiëntie. De details van hoe dit werkt is in het gegevensblad. Je kunt ook mijn broncode later zien. Het idee is hetzelfde voor één registers, maar wij herhaaldelijk lezen/schrijven zonder te beëindigen van de overdracht. Ziet u hoe dit werkt door middel van het gegevensblad, mijn broncode en mijn logic analyzer golfvormen.
Bijgevoegd is een demonstratie van een eenvoudig programma dat stelt de tijd en geeft de tijd op uw LCD-scherm. Zij zal aantonen met behulp van de TWI bus één/meerdere byte lezen/schrijven bewerkingen (Bekijk de golfvormen die ik heb verstrekt) uit te voeren.
De DS1307 eerst aan je schakeling volgens mijn diagram toevoegen. Een hogere resolutiebeeld is binnen de. ZIP-pakket. Het belangrijke punt is dat de DS1307 5V moet, en we modified de Teensy ++ te lopen op 3,3 v, het diagram toont u waar u 5V van de Teensy ++.
Hier moet u het LCD-scherm nog steeds aangesloten als u wilt zien van de werking van de klok. De seriële terminal zal nog tonen dat u debug berichten.
Ik heb de logic analyzer golfvormen opgenomen zodat u duidelijk zien wat I2C eruit ziet kunt, het gegevensblad van de DS1307 toont ook soortgelijke golfvormen, bestuderen de golfvormen samen terwijl ook het onderzoek van de gegevens die worden uitgewisseld (zoals welke opdracht wordt verzonden, wat was het antwoord), probeer overeenkomen met de gebeurtenissen op de punten in de broncode weergeven.