RTCModuleDS1302 en LCDI2C16x02 (A0, A1, A2 niet gesoldeerd-zonder een brug) (2 / 6 stap)

Stap 2: Bibliotheek DS1302.cpp


/*

DS1302.cpp - Arduino library ondersteuning voor de DS1302 Chip voor de tijdwaarneming van de Trickle gratis

Copyright (C) 2010 Henning Karlsen. Alle rechten voorbehouden

U vindt de nieuwste versie van de bibliotheek op

http://www.henningkarlsen.com/Electronics

Deze bibliotheek is geboekt gemakkelijk interface en gebruiken van de RTC DS1302 met

de Arduino.

Als u eventuele wijzigingen of verbeteringen aan de code, zou ik het waarderen

dat u de code met mij, deelt zodat ik in de volgende release opnemen kan.

Ik kan gecontacteerd worden via http://www.henningkarlsen.com/electronics/contact.php

Deze bibliotheek is vrije software; je kunt het herdistribueren en/of

aanpassen onder de voorwaarden van de GNU Lesser algemene openbare

Licentie zoals gepubliceerd door de Free Software Foundation; beide

versie 2.1 van de licentie, of (naar uw keuze) een latere versie.

Deze bibliotheek wordt verspreid in de hoop dat het bruikbaar,

maar zonder enige garantie; zelfs zonder de impliciete garantie van

VERKOOPBAARHEID of geschiktheid voor een bepaald doel. Zie GNU

Lesser General Public License voor meer details.

U moet hebt ontvangen een kopie van de GNU Lesser algemene openbare

License along with this library; Als dit niet het geval is, schrijven aan de Vrije Software

Foundation, Inc., 51 Franklin St, vijfde verdieping, Boston, MA 02110-1301 USA

*/

#include "DS1302.h"

#define REG_SEC 0

#define REG_MIN 1

#define REG_HOUR 2

#define REG_DATE 3

#define REG_MON 4

#define REG_DOW 5

#define REG_YEAR 6

#define REG_WP 7

#define REG_TCR 8

/ * Openbare * /

Tijd:: Time()

{

Dit jaar -> = 2010;

this -> mon = 1;

Deze-> datum = 1;

this -> uur = 0;

dit min -> = 0;

this -> sec = 0;

this -> dow = 5;

}

DS1302_RAM::DS1302_RAM()

{

for (int i = 0; ik < 31; i ++)

cel [i] = 0;

}

DS1302::DS1302 (uint8_t ce_pin, uint8_t data_pin, uint8_t sclk_pin)

{

_ce_pin = ce_pin;

_data_pin = data_pin;

_sclk_pin = sclk_pin;

pinMode (_ce_pin, OUTPUT);

pinMode (_sclk_pin, OUTPUT);

}

Tijd DS1302::getTime()

{

Tijd t;

_burstRead();

t.sec = _decode(_burstArray[0]);

t.min = _decode(_burstArray[1]);

t.Hour = _decodeH(_burstArray[2]);

t.date = _decode(_burstArray[3]);

t.Mon = _decode(_burstArray[4]);

t.Dow = _burstArray [5];

t.Year _decodeY (_burstArray [6]) = +2000;

retourneren van t;

}

VOID DS1302::setTime (uint8_t uur, uint8_t min, uint8_t sec)

{

Als (((uur > = 0) & & (uur < 24)) & & ((min > = 0) & & (min < 60)) & & ((sec > = 0) & & (sec < 60)))

{

_writeRegister (REG_HOUR, _encode(hour));

_writeRegister (REG_MIN, _encode(min));

_writeRegister (REG_SEC, _encode(sec));

}

}

VOID DS1302::setDate (uint8_t date, uint8_t ma, uint16_t jaar)

{

Als (((date>0) & & (datum < = 31)) & & ((mon>0) & & (mon < = 12)) & & ((jaar > = 2000) & & (jaar < 3000)))

{

jaar-= 2000;

_writeRegister (REG_YEAR, _encode(year));

_writeRegister (REG_MON, _encode(mon));

_writeRegister (REG_DATE, _encode(date));

}

}

VOID DS1302::setDOW(uint8_t dow)

{

Als ((dow>0) & & (dow < 8))

_writeRegister (REG_DOW, dow);

}

char * DS1302::getTimeStr(uint8_t format)

{

char * output = "xxxxxxxx";

Tijd t;

t=getTime();

Als (t.hour < 10)

uitgang [0] = 48;

anders

uitgang [0] = char ((t.hour / 10) 48);

uitgang [1] = char ((t.hour % 10) 48);

uitgang [2] = 58;

Als (t.min < 10)

uitgang [3] = 48;

anders

uitgang [3] = char ((t.min / 10) 48);

uitgang [4] = char ((t.min % 10) 48);

uitgang [5] = 58;

Als (indeling == FORMAT_SHORT)

uitgang [5] = 0;

anders

{

Als (t.sec < 10)

uitgang [6] = 48;

anders

uitgang [6] = char ((t.sec / 10) 48);

uitgang [7] = char ((t.sec % 10) 48);

uitgang [8] = 0;

}

retourneren van de uitvoer;

}

char * DS1302::getDateStr(uint8_t slformat, uint8_t eformat, char divider)

{

char * output = "xxxxxxxxxx";

int yr, offset;

Tijd t;

t=getTime();

schakelaar (eformat)

{

Case FORMAT_LITTLEENDIAN:

Als (t.date < 10)

uitgang [0] = 48;

anders

uitgang [0] = char ((t.date / 10) 48);

uitgang [1] = char ((t.date % 10) 48);

uitgang [2] = scheidingslijn;

Als (t.mon < 10)

uitgang [3] = 48;

anders

uitgang [3] = char ((t.mon / 10) 48);

uitgang [4] = char ((t.mon % 10) 48);

uitgang [5] = scheidingslijn;

Als (slformat == FORMAT_SHORT)

{

yr=t.Year-2000;

Als (yr < 10)

uitgang [6] = 48;

anders

uitgang [6] = char ((yr / 10) 48);

uitgang [7] = char ((yr % 10) 48);

uitgang [8] = 0;

}

anders

{

yr=t.Year;

uitgang [6] = char ((yr / 1000) 48);

uitgang [7] = char (((yr % 1000) / 100) 48);

uitgang [8] = char (((yr % 100) / 10) 48);

uitgang [9] = char ((yr % 10) 48);

uitgang [10] = 0;

}

breken;

Case FORMAT_BIGENDIAN:

Als (slformat == FORMAT_SHORT)

offset = 0;

anders

offset = 2;

Als (slformat == FORMAT_SHORT)

{

yr=t.Year-2000;

Als (yr < 10)

uitgang [0] = 48;

anders

uitgang [0] = char ((yr / 10) 48);

uitgang [1] = char ((yr % 10) 48);

uitgang [2] = scheidingslijn;

}

anders

{

yr=t.Year;

uitgang [0] = char ((yr / 1000) 48);

uitgang [1] = char (((yr % 1000) / 100) 48);

uitgang [2] = char (((yr % 100) / 10) 48);

uitgang [3] = char ((yr % 10) 48);

uitgang [4] = scheidingslijn;

}

Als (t.mon < 10)

uitgang [3 + offset] = 48;

anders

uitgang [3 + offset] = char ((t.mon / 10) 48);

uitgang [4 + offset] = char ((t.mon % 10) 48);

uitgang [5 + offset] = scheidingslijn;

Als (t.date < 10)

uitgang [6 + offset] = 48;

anders

uitgang [6 + offset] = char ((t.date / 10) 48);

uitgang [7 + offset] = char ((t.date % 10) 48);

uitgang [8 + offset] = 0;

breken;

Case FORMAT_MIDDLEENDIAN:

Als (t.mon < 10)

uitgang [0] = 48;

anders

uitgang [0] = char ((t.mon / 10) 48);

uitgang [1] = char ((t.mon % 10) 48);

uitgang [2] = scheidingslijn;

Als (t.date < 10)

uitgang [3] = 48;

anders

uitgang [3] = char ((t.date / 10) 48);

uitgang [4] = char ((t.date % 10) 48);

uitgang [5] = scheidingslijn;

Als (slformat == FORMAT_SHORT)

{

yr=t.Year-2000;

Als (yr < 10)

uitgang [6] = 48;

anders

uitgang [6] = char ((yr / 10) 48);

uitgang [7] = char ((yr % 10) 48);

uitgang [8] = 0;

}

anders

{

yr=t.Year;

uitgang [6] = char ((yr / 1000) 48);

uitgang [7] = char (((yr % 1000) / 100) 48);

uitgang [8] = char (((yr % 100) / 10) 48);

uitgang [9] = char ((yr % 10) 48);

uitgang [10] = 0;

}

breken;

}

retourneren van de uitvoer;

}

char * DS1302::getDOWStr(uint8_t format)

{

char * output = "xxxxxxxxx";

Tijd t;

t=getTime();

schakelaar (t.dow)

{

Case maandag:

uitvoer = "Maandag";

breken;

Case dinsdag:

uitvoer = "Dinsdag";

breken;

Case woensdag:

uitvoer = "Woensdag";

breken;

Case donderdag:

uitvoer = "Donderdag";

breken;

Case vrijdag:

uitvoer = "Vrijdag";

breken;

Case zaterdag:

uitvoer = "Zaterdag";

breken;

Case zondag:

uitvoer = "Zondag";

breken;

}

Als (indeling == FORMAT_SHORT)

uitgang [3] = 0;

retourneren van de uitvoer;

}

char * DS1302::getMonthStr(uint8_t format)

{

char * output = "xxxxxxxxx";

Tijd t;

t=getTime();

schakelaar (t.mon)

{

Case 1:

uitvoer = 'Januari';

breken;

Case 2:

uitvoer = "Februari";

breken;

Case 3:

uitvoer = "March";

breken;

Case 4:

uitvoer = "April";

breken;

Case 5:

uitvoer = "Mei";

breken;

Case 6:

uitvoer = "Juni";

breken;

Case 7:

uitvoer = "Juli";

breken;

zaak 8:

uitvoer = "Augustus";

breken;

Case 9:

uitvoer = "September";

breken;

zaak 10:

uitvoer = "Oktober";

breken;

zaak 11:

uitvoer = "November";

breken;

zaak 12:

uitvoer = "December";

breken;

}

Als (indeling == FORMAT_SHORT)

uitgang [3] = 0;

retourneren van de uitvoer;

}

VOID DS1302::halt (bool inschakelen)

{

uint8_t _reg = _readRegister(REG_SEC);

_reg & = ~ (1 << 7);

_reg | = (inschakelen << 7);

_writeRegister (REG_SEC, _reg);

}

VOID DS1302::writeProtect (bool inschakelen)

{

uint8_t _reg = (inschakelen << 7);

_writeRegister (REG_WP, _reg);

}

VOID DS1302::setTCR (uint8_t waarde)

{

_writeRegister (REG_TCR, waarde);

}

/ * Particuliere * /

uint8_t DS1302::_readByte()

{

pinMode (_data_pin, INPUT);

uint8_t waarde = 0;

uint8_t currentBit = 0;

for (int i = 0; ik < 8; ++ ik)

{

currentBit = digitalRead(_data_pin);

waarde | = (currentBit << ik);

digitalWrite (_sclk_pin, hoge);

delayMicroseconds(1);

digitalWrite (_sclk_pin, laag);

}

retourwaarde;

}

VOID DS1302::_writeByte (uint8_t waarde)

{

pinMode (_data_pin, OUTPUT);

shiftOut (_data_pin, _sclk_pin, LSBFIRST, waarde);

}

uint8_t DS1302::_readRegister (uint8_t reg)

{

uint8_t cmdByte = 129;

cmdByte | = (reg << 1);

uint8_t readValue;

digitalWrite (_sclk_pin, laag);

digitalWrite (_ce_pin, hoge);

_writeByte(cmdByte);

readValue = _readByte();

digitalWrite (_ce_pin, laag);

Return readValue;

}

VOID DS1302::_writeRegister (uint8_t reg, uint8_t waarde)

{

uint8_t cmdByte = (128 | (reg << 1));

digitalWrite (_sclk_pin, laag);

digitalWrite (_ce_pin, hoge);

_writeByte(cmdByte);

_writeByte(Value);

digitalWrite (_ce_pin, laag);

}

VOID DS1302::_burstRead()

{

digitalWrite (_sclk_pin, laag);

digitalWrite (_ce_pin, hoge);

_writeByte(191);

for (int i = 0; ik < 8; i ++)

{

_burstArray [i] = _readByte();

}

digitalWrite (_ce_pin, laag);

}

uint8_t DS1302::_decode (uint8_t waarde)

{

uint8_t gedecodeerd = waarde & 127;

gedecodeerde = (gedecodeerde & 15) + 10 * ((gedecodeerd & (15 << 4)) >> 4);

retourneren gedecodeerde;

}

uint8_t DS1302::_decodeH (uint8_t waarde)

{

Als (waarde & 128)

waarde = (waarde & 15) + (12 * ((value & 32) >> 5));

anders

waarde = (waarde & 15) + (10 * ((value & 48) >> 4));

retourwaarde;

}

uint8_t DS1302::_decodeY (uint8_t waarde)

{

uint8_t gedecodeerd = (waarde & 15) + 10 * ((waarde & (15 << 4)) >> 4);

retourneren gedecodeerde;

}

uint8_t DS1302::_encode (uint8_t waarde)

{

uint8_t gecodeerd = ((value / 10) << 4) + (waarde 10%);

terugkeer gecodeerd;

}

VOID DS1302::writeBuffer (DS1302_RAM r)

{

digitalWrite (_sclk_pin, laag);

digitalWrite (_ce_pin, hoge);

_writeByte(254);

for (int i = 0; ik < 31; i ++)

{

_writeByte(r.Cell[i]);

}

digitalWrite (_ce_pin, laag);

}

DS1302_RAM DS1302::readBuffer()

{

DS1302_RAM r;

digitalWrite (_sclk_pin, laag);

digitalWrite (_ce_pin, hoge);

_writeByte(255);

for (int i = 0; ik < 31; i ++)

{

r.Cell[i] = _readByte();

}

digitalWrite (_ce_pin, laag);

retourneren van r;

}

VOID DS1302::poke (uint8_t addr, uint8_t waarde)

{

Als ((addr > = 0) & & (addr < = 30))

{

addr = (addr * 2) + 192;

digitalWrite (_sclk_pin, laag);

digitalWrite (_ce_pin, hoge);

_writeByte(addr);

_writeByte(Value);

digitalWrite (_ce_pin, laag);

}

}

uint8_t DS1302::peek (uint8_t addr)

{

Als ((addr > = 0) & & (addr < = 30))

{

addr = (addr * 2) + 193;

uint8_t readValue;

digitalWrite (_sclk_pin, laag);

digitalWrite (_ce_pin, hoge);

_writeByte(addr);

readValue = _readByte();

digitalWrite (_ce_pin, laag);

Return readValue;

}

anders

keren 0;

}

Gerelateerde Artikelen

Heerlijke zelfgemaakte honing boter zelfs als u niet beschikt over een koe

Heerlijke zelfgemaakte honing boter zelfs als u niet beschikt over een koe

Ik herinner me als een kind zit in de kleuterschool en het passeren rond een container voor een paar seconden goed schudden en vervolgens doorgeven aan de volgende jongen... Ik herinner me wanneer het moment is gebeurd en in de container iets begonne
Hoe het niet bouwen van een reflectie zwembad met Galium

Hoe het niet bouwen van een reflectie zwembad met Galium

Hallo!Dit is een introductie van hoe het niet bouwen van een reflectie zwembad met gallium!De eerste paar stappen was om aan te tonen de stappen van het begin, maar uiteindelijk zal ik document de fouten die ik heb gedaan en wat je niet moet doen.Het
Hoe niet uitzien als een eikel terwijl het reizen in het buitenland

Hoe niet uitzien als een eikel terwijl het reizen in het buitenland

Mijn beste vriend is een fervent wereldreiziger en komt thuis van haar reizen (IJsland, Chili, Mexico, Egypte, Rusland, Frankrijk, Peru, en meer) met veel interessante verhalen over omgaan met het onverwachte. Deze verrassingen komen soms in de vorm
Hoe het niet bouwen van een vliegtuig

Hoe het niet bouwen van een vliegtuig

Dus, heb je eindelijk besloten om te bouwen van dat vliegtuig droom! Niet een model ditmaal, u daadwerkelijk kunt zitten in en vliegen! Goed voor u! U begint een groots avontuur. Omdat je doel ongetwijfeld is om enorme hoeveelheden geld uitgeven en m
Hoe herken ik als de idee voor de volgende opslaan van brandstof is legitieme of niets meer dan een Gimmick ontworpen om uw geld te stelen

Hoe herken ik als de idee voor de volgende opslaan van brandstof is legitieme of niets meer dan een Gimmick ontworpen om uw geld te stelen

Meeste iedereen weet over brandstofverbruik, maar niet velen van ons begrijpen waarom onze auto's krijgen de kilometerstand ze krijgen, of waarom auto's slechter kilometers in de stad dan krijgen ze doen op de snelweg. Hopelijk kan ik helpen kant-en
Hoe niet te doen een Testimonial Video met de MB

Hoe niet te doen een Testimonial Video met de MB

Bikeskills versie van Failblog. Terwijl video-onttrekt een paar getuigenissen van Santa Cruz fiets eigenaars, zet de MB op een geweldig secundaire prestaties. Houd uw ogen op de gele jas. En Nee, hij was niet gewond. Helemaal nietTerwijl de video ble
Hoe niet te doen een instructable

Hoe niet te doen een instructable

niet gebruiken als inpiration, of misschien gebruiken als inspiratie als op hoe niet te zijn lui en vergeetachtig en missen de kans om te winnen een laser cutter.Nu neem ik aan een heleboel hobby projecten, voornamelijk bezig te houden omdat wanneer
Hoe niet te bestellen een Arctic Laser

Hoe niet te bestellen een Arctic Laser

veel mensen hebben zeer onaangename ervaringen bestellen Arctic lasers omdat zij hebben het bestellen van de verkeerde manier.Lees hoe niet te bestellen een Arctic laser en ontdek hoe vermijden veel frustratie en angst. Een must read voor iedereen di
IMMO Tool kan niet worden uitgevoerd zonder een licentiesleutel

IMMO Tool kan niet worden uitgevoerd zonder een licentiesleutel

Mijn IMMO Tool V26.12.2007 heeft een fout gemeld wanneer mij stormloop haar software vanmorgen. Het systeem gevraagd dat "Sorry, deze software kan niet worden uitgevoerd zonder een vergunning toonsoort. Neem contact op met de ondersteuning die ik koc
Hoe niet te bouwen een boot Pop-Pop Valved

Hoe niet te bouwen een boot Pop-Pop Valved

het probleemPop-Pop boten zijn notoir inefficiƫnt om vele redenen, maar het grootste probleem is de actie waarmee het gaat vooruit.De UitlegUitlaatWanneer de motor het springt spuit water uit de uitlaat. Dit water reist bijna recht naar buiten met kl
Hoe om niet te worden een A-gat spelen rol spelen

Hoe om niet te worden een A-gat spelen rol spelen

Hoi! We NatOne Productions, een online gaming-groep die leuke en geweldige verhalen door de kracht van Role Playing Games vertelt!Zo hebt u enkele vrienden, lees de regels, en kocht enkele dobbelstenen? Geweldig, ziet eruit als u bent klaar om te rol
Hoe niet te rollen een aluminiumfolie condensator

Hoe niet te rollen een aluminiumfolie condensator

Hallo.In mijn tweede Instructable ga ik om te praten over het plezier dat ik had vanmiddag.Specifiek, zal ik descibe het maken van een grote waarde gerold aluminiumfolie/plastic wrap film condensator.Hoewel dit Instructable zou anders in aanmerking k
Hoe (niet) te koken een Turkije-onder-een-can

Hoe (niet) te koken een Turkije-onder-een-can

dit Instructable wordt beschreven hoe u een Turkije onder een (schone) verf kan barbecue in net onder twee uren. Dit is niet de enige Instructable op Turkije-kan-barbecue methoden, maar ik heb zeer positieve resultaten mee. Zoals opgemerkt in de tite
Hoe te zetten van een hoofd dat kan dan niet jou, op een kameel

Hoe te zetten van een hoofd dat kan dan niet jou, op een kameel

Stap 1: Een afbeelding van een vrij koele kameel zoeken Zoals u zien kunt, ik kies deze foto (van google images) omdat deze kameel als een koel is schijnt.Stap 2: Kies uit een hoofd dat kan al dan niet jou Zoals u zien kunt, ik pakte dit hoofd omdat