Jste zde

Arduino BOB RTC moduly pro práci s reálným časem

Pro mnoho začínajících elektrotechniků je Arduino nejlepší volba pro uskutečnění svých přestav a inovací. Pro měření různých fyzikálních veličin je nutné připojit analogové nebo digitální snímače a pro časové aplikace je nutné mít spolehlivý zdroj hodiny reálného času.

Tento článek se bude zabývat použitím Arduina a příslušných přídavných open source hardware modulů, které se často označuje jako tzv. „Breakout Boards“ BOBs. K jednotlivým modulům je k dispozici zdrojový kód ve formě knihovny a mnoho ukázkových příkladů. Jako příklad budeme používat hodiny v reálném čase RTCS od Maxim Integrated a BOBs moduly od Adafruit Industries.

Vznik internetu věcí

Jeden z prvních okamžiků, kdy se uvádí vznik IoT je začátek roku 1980. V této době byl nápojový automat Coca-Cola na Carnegie Mellon University připojen k internetu kabelem. Programátoři mohli používat internet ke kontrole, zda nápojový automat byl prázdný a zda nápoje byly dostatečně vychlazené. IoT jako koncept nebyl oficiálně pojmenován až do roku 1999.

Přesný čas vzniku IoT je předmětem diskusí. Doba zrodu internetu věcí se udává ta, ve které počet zařízení nebo objektů připojených do internetu je větší, než počet připojených lidí. Na základě toho se odhaduje, že internet věcí se narodil někdy mezi lety 2008 a 2009. Poměr věcí/lidí připojených v roce 2003 byl 0,08 a v roce 2010 to bylo již 1,84.

Vznik Arduina

Počátek internetu věcí se shodoval se vzestupem hnutí maker v roce 2000. První nasazení Arduina se konalo v roce 2005. Ve stejném roce, kdy se vydalo první vydání časopisu Make a jeden rok před prvním konáním akce Maker Faire.

Od svého vzniku se Arduino vyvinulo do sofistikovaného open source softwarového a hardwarového ekosystému. Bylo zapotřebí najít způsob, jak přivést dobře podporovaný ekosystém Arduino do sféry profesionálních designérů, aby si zjednodušili svou práci, čas a rychlost uvedení výrobku na trh. Ve skutečnosti se dosáhlo toho, že mnoho profesionálních vývojářů si jednotlivé prvky(senzory, periferie) odzkouší na platformě Arduino a pak je nasadí do vlastního designu.

Interní nebo externí RTC

Téměř každý moderní 32-bit mikrokontroler má integrovány hodiny reálného času RTC. Totéž platí pro mnoho 16bitových a dokonce i 8-bitových mikrokontrolerů. Použití vnitřního RTC má své výhody (zmenší se výsledná deska, sníží se kusovník BOM a sníží se cena finálního produktu). Má to ale i své nevýhody.

Jednou z nevýhod je, že samotný mikroprocesor musí zapínat a vypínat svoje vnitřní hodiny RTC softwarově. Takže pokud dojde k hardwarové poruše mikrokontroleru nebo kód se dostane do slepé uličky (To by se nemělo stát) mikrokontroler může nechtěně zakázat RTC hodiny. Externí RTC hodiny jsou považovány za robustnější řešení, jelikož mají samostatné napájecí napětí a krystal. Je méně pravděpodobné, že dojde k náhodnému vypnutí. Vnější RTC hodiny jsou vyrobeny z větší vrstvy křemíku než v mikrokontroleru, a tím jsou více odolnější na vnější vlivy způsobené zářením.

Externí RTC: Maxim Integrated DS1307 a DS3231

Dva velmi populární obvody RTC jsou DS1307 a DS3231 od Maxim Integrated. Oba tyto obvody poskytují sekundy, minuty, hodiny, dny, měsíc a rok. Mezi jejich další funkce patří automatické nastavení měsíce s méně než 31 dny, berou v úvahu přestupné roky a nabízí dva režimy hodin 24 nebo 12. Oba obvody komunikují s hostitelským mikrokontrolerem pomocí sériového rozhraní I2C. Zahrnují snímací obvod, který zjišťuje výpadky proudu a automaticky přepne na záložní napájení (zpravidla baterii). Přičemž měření času je zachováno (Obrázek 1).

Obrázek 1: DS1307 je dobrým příkladem externích RTC hodin. Externí RTC mají tu výhodu, že mají své vlastní napájení a svůj krystal. Komunikuje s hostitelským mikrokontrolerem přes I 2 C rozhraní. (Zdroj obrázku: Maxim Integrated)

DS1307 vyžaduje napájení 5 V a vnější krystal. Přesnější DS3231 může pracovat s napájením od 2,3 do 5,5V a je vybaven integrovaným teplotně kompenzovaným krystalovým oscilátorem (TCXO). Rozdíly mezi těmito komponentami nejsou na první pohled zřejmé. Oba poskytují SQW (obdélníkový signál). Výstup vyžaduje externí pull-up rezistor.

DS1307: výstup SQW může být naprogramován pro generování 1 Hz, 4,096 kHz, 8.192 kHz nebo signálu 32,768 kHz.

DS3231: výstup SQW může být naprogramován pro generování 1 Hz, 1024 kHz, 4,096 kHz nebo signálu 8,192 kHz.

U DS1307 přesnost hodin závisí na přesnosti krystalu a přesnosti kapacitní zátěže oscilačního obvodu. Teplotně kompenzovaný DS3231 má přesnost definovanou v rozmezí ± 2 minuty za rok v teplotním rozmezí od -40 °C do + 85 °C (obrázek 2).

Obrázek 2: DS3231 je teplotně kompenzovaný krystalový oscilátor s přesností ± 2 minuty za rok v rozsahu teplot od -40 °C do + 85 °C. (Zdroj obrázku: Maxim Integrated)

RTC BOB moduly: Adafruit DS1307 a ChronoDot

Dvě populární BOBs moduly s integrovanými obvody DS1307 a DS3231 jsou Adafruit 3296 DS1307 Real-Time Clock BOB modulu (obrázek 3) a 255 ChronoDot Ultra-Precise Real-Time Clock v2.1 BOB modulu (obr.4).

Obrázek 3: Adafruit DS1307 RTC BOB. (Zdroj obrázku: Adafruit Industries)

Obrázek 4: ChronoDot Ultra-přesné Real-Time Clock v2.1 BOB. (Zdroj obrázku: Adafruit Industries)

Tyto BOB moduly se jednoduše dají připojit k desce Arduino Uno R3. Pro tuto desku a tyto moduly existuje mnoho open source knihoven a příklady kódu. Vývojář může část kódu odladit přímo na této desce a začlenit tyto úseky kódu přímo do svých vlastních návrhů.

Hardwarové tipy a triky pro vývoj software

Jak bylo již dříve uvedeno DS1307 a DS3231 RTCS komunikují s hostitelským mikrokontrolerem přes I2C sběrnici. Jedním z problémům je, že oba signály tvořící tuto sběrnici (SCL a SDA) vyžadují pull-up rezistor.

Ani DS1307 nebo DS3231 tyto odpory nemají. Ačkoli ChronoDot má pro rezistory R1 a R2 plošky, kde mohou být přidány.

Důvod, proč nejsou na modulu pull-up rezistory je, že na I2C sběrnici může být připojeno více zařízení. I2C sběrnice používá 7-bitovou adresu (2 7 = 128). Nicméně adresa 0000000 je obecná adresa (broadcast). Čili je možno teoreticky připojit až 127 samostatných zařízení. V praxi je skutečný počet připojených zařízení daný kapacitou sběrnice, kapacitou jednotlivých tras na PCB a kapacitou zátěže. Celková kapacita je omezena na 400 pF.

Pokud jsou na sběrnici dvě zařízení s pull-up rezistory stejné hodnoty, výsledný odpor je poloviční. Pokud jsou čtyři zařízení na sběrnici s pull-up rezistory stejné hodnoty, výsledný odpor je čtvrtinový. Závěr je takový, že pokud je již připojeno na sběrnici I2C zařízení s pull-up odpory, pak již další pull up rezistory nesmíme přidávat. Pokud jsme si jisti, že se na sběrnici nebudou přidávat další zařízení, použijeme dvojici pull up rezistorů o hodnotě 4,7 kΩ. Ale pokud existuje možnost, že bude přidáno další BOB modul nebo zařízení s pull up rezistory v budoucnu, pak by měli mít hodnotu 10 kΩ.

Softwarové tipy a triky pro hardware

Wire knihovna je komunikační knihovna, která usnadňuje komunikaci s I2C zařízeními. V případě Arduina je tato knihovna součástí vývojového prostředí (IDE), takže vše co se musí udělat, je přidat příkaz #include <Wire.h> na začátek programu.

Skutečný trik spočívá ve vystopování vhodné knihovny RTC. Jedna vhodná knihovna je RTClib od Adafruit, kterou lze stáhnout z GitHubu. Dále přidat příkaz #include "RTClib.h" na začátek programu.

Poté, co byly definovány všechny konstantní hodnoty, je čas vytvořit instance RTC pomocí příkazu RTC_ DS1307 RTC; nebo RTC_DS3231 RTC; v závislosti na BOB modulu. Pak je nutné v programu (jako součást setup() funkce ) přidat výraz  Wire.begin(); a RTC.begin();, aby se inicializovala I2C komunikace a subsystém RTC.

Jak získat přístup k výstupu SQW (obdélníkový signál)? Ve výchozím nastavení je tento výstup neaktivní z důvodu úspory energie. Jedno z použití tohoto signálu je, že se použije ke spuštění přerušení v hostitelském mikrokontroleru. Frekvence tohoto signálu nastavíme na 1Hz.

V případě DS1307 je třeba přidat příkaz RTC.Ds1307SqwPinMode(<option>, kde podporované možnosti jsou ON, OFF, SquareWave1HZ, SquareWave4kHz, SquareWave8kHz nebo SquareWave32kHz.

Stejně tak v případě DS3231 přidat příkaz RTC.Ds3231SqwPinMode(<option>);, kde podporované možnosti jsou ON, OFF, DS3231_SquareWave1Hz, DS3231_SquareWave1kHz, DS3231_SquareWave4kHz nebo DS3231_SquareWave8kHz.

Závěr

Neustále hledáme způsoby, jak urychlit a snížit náklady na posouzení integrovaných obvodů, senzorů a periferií. Jedním ze způsobů je použít Arduino, který v sobě skrývá otevřený zdrojový kód ve formě knihovny, ukázkových příkladů a příslušného hardware v podobě modulů (BOBS). Jednotlivé prvky(senzory, periferie) si můžeme odzkoušet na platformě Arduino a pak je nasadit do vlastního designu.

 

Článek vyšel v originále "Use Arduino BOBs to Quickly Evaluate Sensors and Peripherals" na webu DigiKey.com, autorem je Clive Max Maxfield.

 

Hodnocení článku: 

Komentáře

Dobrý den, chtěl jsem se zeptat jestli existuje  nějaký modul, který umí i milisekundy, pro přesné měření času.

Děkuji Navrkal