Indholdsfortegnelse:
- Trin 1: Tilslutning af dit modul til en Arduino
- Trin 2: Læsning og skrivning af tiden fra dit RTC -modul
- Trin 3:
Video: Brug af DS1307 og DS3231 Real-time urmoduler med Arduino: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Vi bliver ved med at få anmodninger om, hvordan du bruger DS1307 og DS3231 real-time urmoduler med Arduino fra forskellige kilder-så dette er den første af en todelt tutorial om, hvordan du bruger dem. Til denne Arduino-vejledning har vi to real-time urmoduler at bruge, et baseret på Maxim DS1307 (det firkantede modul) og DS3231 (det rektangulære modul).
Der er to hovedforskelle mellem IC'erne på realtidsurmodulerne, hvilket er nøjagtigheden af tidsopbevaring. DS1307, der bruges i det første modul, fungerer meget godt, men den ydre temperatur kan påvirke frekvensen af oscillatorkredsløbet, der driver DS1307s interne tæller.
Dette kan lyde som et problem, men vil normalt resultere i, at uret er slukket med cirka fem minutter om måneden. DS3231 er meget mere præcis, da den har en intern oscillator, der ikke påvirkes af eksterne faktorer - og dermed er nøjagtig op til et par minutter om året højst. Hvis du har et DS1307-modul- føler dig ikke dårlig, det er stadig et værdibord og vil tjene dig godt. Med begge moduler kræves et backupbatteri.
Det er en god idé at købe et nyt CR2032 -batteri og passe det til modulet. Sammen med at holde styr på tid og dato har disse moduler også en lille EEPROM, en alarmfunktion (kun DS3231) og evnen til at generere en firkantbølge af forskellige frekvenser-som alle vil blive genstand for en anden vejledning.
Trin 1: Tilslutning af dit modul til en Arduino
Begge moduler bruger I2C -bussen, hvilket gør forbindelsen meget let.
Først skal du identificere, hvilke ben på din Arduino eller kompatible tavler, der bruges til I2C -bussen - disse kendes som SDA (eller data) og SCL (eller ur). På Arduino Uno eller kompatible tavler er disse ben A4 og A5 til data og ur; På Arduino Mega er benene D20 og D21 til data og ur; Og hvis du bruger en Pro Mini-kompatibel, er benene A4 og A5 for data og ur, som er parallelle med hovedstifterne.
DS1307 modul
Hvis du har DS1307 -modulet, skal du lodde ledningerne til brættet eller lodde på nogle inline header pins, så du kan bruge jumperwires. Tilslut derefter SCL- og SDA -benene til din Arduino og Vcc -stiften til 5V -stiften og GND til GND.
DS3231 modul
Tilslutning af dette modul er let, da headerstifter er installeret på kortet på fabrikken. Du kan simpelthen køre jumper -ledninger igen fra SCL og SDA til Arduino og igen fra modulets Vcc- og GND -ben til dit tavles 5V eller 3.3. V og GND. Disse er dog kopieret på den anden side til lodning af dine egne ledninger. Begge disse moduler har de nødvendige pull-up modstande, så du behøver ikke tilføje dine egne. Ligesom alle enheder, der er tilsluttet I2C -bussen, skal du prøve at holde længden af SDA- og SCL -ledningerne til et minimum.
Trin 2: Læsning og skrivning af tiden fra dit RTC -modul
Når du har tilsluttet dit RTC -modul. indtast og upload følgende skitse. Selvom noterne og funktionerne i skitsen kun refererer til DS3231, fungerer koden også med DS1307.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Konverter normale decimaltal til binært kodet decimal byte decToBcd (byte val) {return ((val/10*16) + (val%10)); } // Konverter binær kodet decimal til normale decimaltal byte bcdToDec (byte val) {return ((val/16*10) + (val%16)); } ugyldig opsætning () {Wire.begin (); Serial.begin (9600); // indstil starttiden her: // DS3231 sekunder, minutter, timer, dag, dato, måned, år // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (byte sekund, byte minut, byte time, byte dayOfWeek, byte dayOfMonth, byte måned, byte år) {// indstiller tid og dato data til DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // indstil næste input til at starte ved sekundærregistret Wire.write (decToBcd (sekund)); // sæt sekunder Wire.write (decToBcd (minut)); // sæt minutter Wire.write (decToBcd (time)); // indstil timer Wire.write (decToBcd (dayOfWeek)); // angivet ugedag (1 = søndag, 7 = lørdag) Wire.write (decToBcd (dayOfMonth)); // indstil dato (1 til 31) Wire.write (decToBcd (måned)); // sæt måned Wire.write (decToBcd (år)); // sæt år (0 til 99) Wire.endTransmission (); } void readDS3231time (byte *sekund, byte *minut, byte *time, byte *dayOfWeek, byte *dayOfMonth, byte *måned, byte *år) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // indstil DS3231 registermarkør til 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // anmode om syv bytes data fra DS3231 fra register 00h *second = bcdToDec (Wire.read () & 0x7f); *minut = bcdToDec (Wire.read ()); *time = bcdToDec (Wire.read () & 0x3f); *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *måned = bcdToDec (Wire.read ()); *år = bcdToDec (Wire.read ()); } void displayTime () {byte sekund, minut, time, dayOfWeek, dayOfMonth, måned, år; // hent data fra DS3231 readDS3231time (& sekund, & minut, & time, & dayOfWeek, & dayOfMonth, & måned, & år); // send den til den serielle skærm Serial.print (time, DEC); // konverter bytevariablen til et decimaltal, når den vises Serial.print (":"); hvis (minut <10) {Serial.print ("0"); } Serial.print (minut, DEC); Serial.print (":"); hvis (anden <10) {Serial.print ("0"); } Serial.print (andet, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (måned, DEC); Serial.print ("/"); Serial.print (år, DEC); Serial.print ("Ugedag:"); switch (dayOfWeek) {case 1: Serial.println ("søndag"); pause; sag 2: Serial.println ("mandag"); pause; sag 3: Serial.println ("tirsdag"); pause; sag 4: Serial.println ("onsdag"); pause; sag 5: Serial.println ("torsdag"); pause; sag 6: Serial.println ("fredag"); pause; sag 7: Serial.println ("lørdag"); pause; }} void loop () {displayTime (); // vis real-time urdata på den serielle monitor, forsinkelse (1000); // hvert sekund }
Der kan være meget kode, men den opdeles godt i overskuelige dele.
Det inkluderer først Wire -biblioteket, der bruges til I2C -buskommunikation, efterfulgt af at definere busadressen for RTC som 0x68. Disse efterfølges af to funktioner, der konverterer decimaltal til BCD (binært kodet decimal) og omvendt. Disse er nødvendige, da RTC IC'erne fungerer i BCD ikke decimal.
Funktionen setDS3231time () bruges til at indstille uret. Brug af det er meget let, enkelt indsæt værdierne fra år ned til sekund, og RTC starter fra det tidspunkt. Hvis du f.eks. Vil angive følgende dato og klokkeslæt - onsdag den 26. november 2014 og 21:42 og 30 sekunder - ville du bruge:
setDS3231time (30, 42, 21, 4, 26, 11, 14);
Trin 3:
Bemærk, at klokkeslættet er indstillet ved hjælp af 24-timers tid, og den fjerde parameter er "ugedag". Dette falder mellem 1 og 7, som er henholdsvis søndag til lørdag. Disse parametre er byteværdier, hvis du subsituerer dine egne variabler.
Når du først har kørt funktionen, er det klogt at prefikse det med // og uploade din kode igen, så det nulstiller ikke tiden, når strømmen er blevet cyklet eller micrcontroller nulstillet. Læsning af tidspunktet fra din RTC er lige så enkel, faktisk kan processen følges pænt inde i funktionen displayTime (). Du skal definere syv bytevariabler for at gemme dataene fra RTC, og disse indsættes derefter i funktionen readDS3231time (). For eksempel hvis dine variabler er:
byte sekund, minut, time, dayOfWeek, dayOfMonth, måned, år;
… du ville opdatere dem med de aktuelle data fra RTC ved at bruge:
readDS3232time (& sekund, & minut, & time, & dayOfWeek, & dayOfMonth, & måned, & år);
Derefter kan du bruge variablerne, som du finder passende, fra at sende klokkeslæt og dato til den serielle skærm, som eksempelskitsen gør - til at konvertere dataene til en passende form til alle slags outputenheder.
Bare for at kontrollere, at alt fungerer, skal du indtaste den passende tid og dato i demonstrationsskitsen, uploade den, kommentere funktionen setDS3231time () og uploade den igen. Åbn derefter den serielle skærm, og du skal have et løbende display med den aktuelle tid og dato.
Fra dette tidspunkt har du nu software-værktøjer til at indstille data til og hente dem fra dit real-time urmodul, og vi håber, at du har en forståelse for, hvordan du bruger disse billige moduler.
Du kan lære mere om de særlige real-time ur-IC'er fra producentens websted-DS1307 og DS3231.
Dette indlæg blev bragt til dig af pmdway.com - alt for producenter og elektronikentusiaster, med gratis levering over hele verden.
Anbefalede:
P10 DMD -skærm med Arduino og RTC DS3231: 4 trin (med billeder)
P10 DMD -skærm Med Arduino og RTC DS3231: P10 -skærme er en række punkter med matrix -LED'er. P10 LED er generelt kendt som en Dot Matrix Display eller DMD display. Det er baseret på skiftregistre, generelt bruges 74595 skiftregistre. De kan kaskades med flere lignende lignende brædder. EN
Hjemmeautomatisering Trin for trin Brug af Wemos D1 Mini Med PCB -design: 4 trin
Hjemmeautomatisering Trin for trin Brug af Wemos D1 Mini Med PCB -design: Hjemmeautomatisering Trin for trin ved hjælp af Wemos D1 Mini med PCB -design For et par uger siden udgav vi en tutorial "Home Automation using Raspberry Pi" i rootsaid.com, som blev godt modtaget blandt hobbyfolk og universitetsstuderende. Så kom et af vores medlemmer
Sådan bruges DS1307 Brug af Arduino: 7 trin
Sådan bruges DS1307 Brug af Arduino: DS1307 er en IC i realtid (RTC). Denne IC bruges til at levere tidsdata. Den tildelte tid starter fra sekunder, minut, timer, dage, dato, måned og år. Denne IC kræver yderligere eksterne komponenter, såsom Crystal og 3,6V batterier. Krystal
I2C / IIC LCD -skærm - Brug et SPI LCD til I2C LCD Display Brug SPI til IIC modul med Arduino: 5 trin
I2C / IIC LCD -skærm | Brug en SPI LCD til I2C LCD -skærmen Brug af SPI til IIC -modulet med Arduino: Hej fyre, da en normal SPI LCD 1602 har for mange ledninger at tilslutte, så det er meget svært at grænseflade det med arduino, men der er et modul på markedet, som kan konverter SPI -skærm til IIC -skærm, så du skal kun tilslutte 4 ledninger
Neopixel Ws2812 Rainbow LED Glød Med M5stick-C - Kører Rainbow på Neopixel Ws2812 Brug af M5stack M5stick C Brug af Arduino IDE: 5 trin
Neopixel Ws2812 Rainbow LED Glød Med M5stick-C | Kører Rainbow på Neopixel Ws2812 Brug af M5stack M5stick C Brug af Arduino IDE: Hej fyre i denne instruktion vil vi lære at bruge neopixel ws2812 LED'er eller led strip eller led matrix eller led ring med m5stack m5stick-C udviklingstavle med Arduino IDE, og vi vil lave et regnbuemønster med det