Ceas cu display 1602 i2c numere mari. Conectarea ceasului în timp real ds1302 la Arduino

În multe proiecte Arduino, este necesar să urmăriți și să înregistrați ora de apariție a anumitor evenimente. Modulul ceas în timp real, echipat cu o baterie suplimentară, vă permite să stocați data curentă, indiferent de prezența alimentării pe dispozitivul însuși. În acest articol, vom vorbi despre cele mai comune module RTC DS1307, DS1302, DS3231 care pot fi utilizate cu placa Arduino.

Modulul ceasului este o mică taxă, conținând, de regulă, unul dintre microcircuitele DS1307, DS1302, DS3231. În plus, puteți găsi practic un mecanism pentru instalarea unei baterii de alimentare pe placă. Astfel de plăci sunt adesea folosite pentru a ține cont de ora, data, ziua săptămânii și alți parametri cronometrici. Modulele funcționează cu energie autonomă - baterii, acumulatori și continuă să numere, chiar dacă alimentarea este oprită pe Arduino. Cele mai comune modele de ceasuri sunt DS1302, DS1307, DS3231. Acestea se bazează pe modulul RTC (Real Time Clock) conectat la Arduino.

Ceasul numără în unități care sunt convenabile pentru o persoană obișnuită - minute, ore, zile ale săptămânii și altele, spre deosebire de contoarele convenționale și generatoarele de ceas care citesc „căpușe”. Arduino are o funcție specială millis() care poate citi, de asemenea, diferite intervale de timp. Dar principalul dezavantaj al acestei funcții este resetarea la zero atunci când temporizatorul este pornit. Cu ajutorul lui, puteți citi doar ora, este imposibil să setați data sau ziua săptămânii. Pentru a rezolva această problemă, se folosesc module de ceas în timp real.

Circuitul electronic include un microcircuit, o sursă de alimentare, un rezonator cu cuarț și rezistențe. Rezonatorul de cuarț funcționează la o frecvență de 32768 Hz, ceea ce este convenabil pentru un contor binar convențional. Circuitul DS3231 are încorporat un cristal și o stabilizare termică, ceea ce vă permite să obțineți valori ridicate de precizie.

Comparație dintre modulele RTC populare DS1302, DS1307, DS3231

În acest tabel, am oferit o listă cu cele mai populare module și principalele lor caracteristici.

Nume Frecvență Precizie Protocoale acceptate
DS1307 1 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHz Depinde de cuarț - de obicei valoarea ajunge la 2,5 secunde pe zi, este imposibil să se obțină o precizie mai mare de 1 secundă pe zi. De asemenea, precizia depinde de temperatură. I2C
DS1302 32,768 kHz 5 secunde pe zi I2C, SPI
DS3231 Două ieșiri - prima la 32,768 kHz, a doua - programabilă de la 1 Hz la 8,192 kHz ±2 ppm la temperaturi de la 0C la 40C.

±3,5 ppm la temperaturi de la -40C la 85C.

Precizia măsurării temperaturii – ±3С

I2C

Modul DS1307

DS1307 este un modul care este folosit pentru cronometrare. Este asamblat pe baza cipului DS1307ZN, alimentat de o baterie cu litiu pentru a realiza durata de viata a bateriei dupa o perioada lunga de timp. Bateria de pe placă este atașată la reversul. Modulul are un cip AT24C32 - aceasta este o memorie EEPROM nevolatilă de 32 Kbytes. Ambele microcircuite sunt interconectate prin magistrala I2C. DS1307 are o putere redusă și include un ceas și un calendar până în anul 2100.

Modulul are următorii parametri:

  • Putere - 5V;
  • Interval de temperatură de funcționare de la -40C la 85C;
  • 56 de octeți de memorie;
  • baterie cu litiu LIR2032;
  • Implementează modurile de 12 și 24 de ore;
  • Suport pentru interfața I2C.

Modulul este justificat să fie folosit în cazurile în care datele sunt citite destul de rar, cu un interval de o săptămână sau mai mult. Acest lucru vă permite să economisiți energie, deoarece în timpul utilizării neîntrerupte va trebui să cheltuiți mai multă tensiune, chiar și cu o baterie. Prezența memoriei vă permite să înregistrați diverși parametri (de exemplu, măsurarea temperaturii) și să citiți informațiile primite de la modul.

Interacțiunea cu alte dispozitive și schimbul de informații cu acestea se realizează folosind interfața I2C de la contactele SCL și SDA. Rezistoarele sunt instalate în circuit, care vă permit să furnizați nivelul necesar de semnal. Tot pe placa se afla un loc special pentru montarea senzorului de temperatura DS18B20.Contactele sunt impartite in 2 grupuri, pas 2,54 mm. Primul grup de contacte conține următoarele concluzii:

  • DS - iesire pentru senzorul DS18B20;
  • SCL - linia ceasului;
  • SDA - linie de date;
  • VCC - 5V;

În al doilea grup de contacte sunt:

  • SQ - 1 MHz;
  • BAT - Intrare baterie cu litiu.

Pentru a vă conecta la placa Arduino, aveți nevoie de placa în sine (în acest caz, se ia în considerare Arduino Uno), modulul de ceas în timp real RTC DS1307, fire și un cablu USB.

Pentru a conecta controlerul la Arduino, se folosesc 4 pini - VCC, masă, SCL, SDA.

Pentru a începe să lucrați cu modulul de ceas, trebuie să instalați bibliotecile DS1307RTC, TimeLib și Wire. Poate fi folosit pentru lucru și RTCLib.

Verificarea modulului RTC

Când rulați primul cod, programul va citi datele din modul o dată pe secundă. În primul rând, puteți vedea cum se va comporta programul dacă scoateți bateria din modul și o înlocuiți cu alta în timp ce placa Arduino nu este conectată la computer. Trebuie să așteptați câteva secunde și să scoateți bateria, ca urmare, ceasul se va reporni. Apoi trebuie să selectați un exemplu din meniul Exemple→RTClib→ds1307. Este important să setați corect rata de transmisie la 57600 bps.

Când deschideți fereastra monitorului serial, ar trebui să apară următoarele linii:

Va afișa ora 0:0:0. Acest lucru se datorează faptului că ceasul își pierde puterea, iar numărătoarea inversă se va opri. Din acest motiv, bateria nu trebuie scoasă în timp ce modulul funcționează.

Pentru a seta ora pe modul, trebuie să găsiți linia în schiță

RTC.adjust(DateTime(__DATE__, __TIME__));

Această linie va conține date de la computer care este folosit pentru a flash modulul de ceas în timp real. Pentru o funcționare corectă, trebuie mai întâi să verificați corectitudinea datei și orei pe computer și abia apoi să începeți să clipească modulul ceasului. După setare, următoarele date vor fi afișate pe monitor:

Setarea a fost făcută corect și nu este nevoie să reconfigurați suplimentar ceasul în timp real.

Citirea timpului. Odată configurat modulul, puteți trimite cereri pentru a obține timpul. Pentru a face acest lucru, utilizați funcția now(), care returnează un obiect DateTime care conține informații despre oră și dată. Există o serie de biblioteci care sunt folosite pentru a citi ora. De exemplu, RTC.year() și RTC.hour() - primesc separat informații despre an și oră. Când lucrați cu ei, poate apărea o problemă: de exemplu, o solicitare de afișare a orei va fi făcută la 1:19:59. Înainte de a afișa ora 1:20:00, ceasul va afișa ora 1:19:00, adică, de fapt, se va pierde un minut. Prin urmare, este recomandabil să folosiți aceste biblioteci în cazurile în care lectura are loc rar - o dată la câteva zile. Există și alte funcții pentru apelarea orei, dar dacă trebuie să reduceți sau să evitați erorile, este mai bine să utilizați acum () și să scoateți deja citirile necesare din acesta.

Exemplu de proiect cu modul de ceas i2C și afișaj

Proiectul este un ceas obișnuit, indicatorul va afișa ora exactă, iar două puncte dintre cifre vor clipi la un interval de o dată pe secundă. Pentru a implementa proiectul, veți avea nevoie de o placă Arduino Uno, un indicator digital, un ceas în timp real (în acest caz, modulul ds1307 descris mai sus), un scut pentru conectare (în acest caz, se folosește Troyka Shield), un bateria ceasului și firele.

Proiectul folosește un indicator simplu de patru cifre pe un cip TM1637. Dispozitivul are o interfață cu două fire și oferă 8 niveluri de luminozitate a monitorului. Folosit doar pentru a afișa timpul în format ore:minute. Indicatorul este ușor de utilizat și ușor de conectat. Este benefic de utilizat pentru proiecte în care nu este necesară validarea datelor minut cu minut sau pe oră. Pentru a obține informații mai complete despre oră și dată, se folosesc monitoare cu cristale lichide.

Modulul de ceas este conectat la pinii SCL/SDA, care sunt legați de magistrala I2C. De asemenea, trebuie să conectați la pământ și la alimentare. Este conectat la Arduino în același mod ca cel descris mai sus: SDA - A4, SCL - A5, împământare de la modul la masă cu Arduino, VCC -5V.

Indicatorul este conectat simplu - ieșirile de la acesta CLK și DIO sunt conectate la orice pin digital de pe placă.

Schiță. Pentru a scrie codul, se folosește funcția de configurare, care vă permite să inițializați ceasul și indicatorul, să înregistrați timpul de compilare. Afișarea orei pe ecran se va face folosind bucla.

#include #include „TM1637.h” #include „DS1307.h” //trebuie să includeți toate bibliotecile necesare pentru a lucra cu ceasul și afișajul. char compileTime = __TIME__; //timpul de compilare. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 // numere de la ieșirile Arduino la care este conectat ecranul; void setup() ( display.set(); display.init(); //conectați și configurați ecranul. clock.begin(); //porniți ceasul. byte hour = getInt(compileTime, 0); byte minute = getInt(compileTime, 2); octet secundă = getInt(compileTime, 4); // obține ora. ceas. fillByHMS(oră, minut, secundă); // se pregătește pentru scriere în modulul de timp. clock. setTime( ); // scrie în curs informațiile primite în timpul memorie interna, începe să citești ora. ) void loop() ( int8_t timeDisp; //afișează pe fiecare dintre cei patru biți. clock.getTime();//request time. timeDisp = clock.hour / 10; timeDisp = clock.hour % 10; timeDisp = ceas . minute / 10; timeDisp = clock.minute % 10; //diverse operații pentru a obține zeci, unități de ore, minute etc. display.display(timeDisp); //afișează timpul pe indicatorul display.point(clock.second % 2 ? POINT_ON: POINT_OFF);//activează și dezactivează două puncte după o secundă. ) char getInt(const char* șir, int startIndex) ( return int(șir - "0") * 10 + int(șir) - "0 "; //acțiuni pentru a scrie corect ora într-un număr întreg de două cifre, altfel ecranul va afișa doar câteva caractere. )

După aceea, schița trebuie încărcată și ora va fi afișată pe monitor.

Programul poate fi ușor actualizat. Când alimentarea este oprită, schița scrisă mai sus va face ca afișajul să arate ora care a fost setată în timpul compilării după pornire. Funcția de configurare va calcula de fiecare dată timpul care a trecut de la 00:00:00 până la începutul compilării. Acest hash va fi comparat cu ceea ce este stocat în EEPROM, care este salvat atunci când alimentarea este oprită.

Pentru a scrie și a citi ora în memorie non volatila sau trebuie să adăugați funcțiile EEPROMWriteInt și EEPROMReadInt din acesta. Sunt necesare pentru a verifica dacă hash-ul se potrivește/nu se potrivește cu hash-ul stocat în EEPROM.

Proiectul poate fi îmbunătățit. Dacă utilizați un monitor cu cristale lichide, puteți realiza un proiect care va afișa data și ora pe ecran. Conexiunea tuturor elementelor este prezentată în figură.

Ca rezultat, va trebui să specificați o nouă bibliotecă în cod (pentru ecranele cu cristale lichide, acesta este LiquidCrystal) și să adăugați linii la funcția loop() pentru a obține data.

Algoritmul de lucru este următorul:

  • Conectarea tuturor componentelor;
  • Verificați - pe ecranul monitorului, ora și data ar trebui să se schimbe în fiecare secundă. Dacă ecranul arată ora greșită, trebuie să adăugați la schiță funcția RTC.write (tmElements_t tm). Problemele cu ora greșită se datorează faptului că modulul de ceas a resetat data și ora la 00:00:00 01/01/2000 la oprire.
  • Funcția de scriere vă permite să obțineți data și ora de pe computer, după care parametrii corecti vor fi indicați pe ecran.

Concluzie

Modulele de ceas sunt folosite în multe proiecte. Sunt necesare pentru sistemele de înregistrare a datelor, atunci când se creează cronometre și dispozitive de control care funcționează conform unui program dat, în aparate electrocasnice. Cu module disponibile pe scară largă și ieftine, puteți crea proiecte precum un ceas cu alarmă sau un senzor de înregistrare de date, să scrieți informații pe un card SD sau să afișați ora pe un ecran de afișare. În acest articol, am analizat cazurile de utilizare tipice și opțiunile pentru conectarea celor mai populare tipuri de module.

A sosit Arduino Nano, a sosit un kit, în care o placă de breadboard (bredboard) și un display LCD. Afișajul de pe placă spune - 1602A, mai jos - QAPASS. Am început să sculptez primul dispozitiv și, bineînțeles, am vrut să afișez informații pe afișaj, și nu LED-urile să clipească.

Google a ajutat, a spus că acesta este un afișaj de caractere; dacă nu sunt pervertite, atunci cel mai probabil sunt disponibile caractere ASCII - numere, latină, ceva din caracterele de bază.

Următoarele materiale au ajutat la lansarea afișajului: Conducerea unui LCD de tip caracter de la un port de imprimantă pentru PC; Cum se conectează Arduino cu un LCD cu caractere; Pwm Servo Driver Control Motor PDF.

Display-ul este destul de comun, iar scuturile au fost deja inventate pentru el - există opțiuni cu SPI like și/sau cu I2C, iar internetul este plin de rețete pentru aceste cazuri. Dar aveam doar afișajul original de 16x2 și un arduinka, la care voiam să-l atașez.

Display-ul are un mod de operare si transmitere a datelor in nibbles, cate 4 biti fiecare, in timp ce bitii inferiori ai magistralei nu sunt folositi. Conectarea doar a jumătate din magistrala de date este descrisă în multe locuri și nu mi-am dat seama cum să conectez afișajul și să lucrez cu el pe 8 linii. Sunt destul de mulțumit de modul în care funcționează.

Am găsit o descriere bună a afișajelor de acest tip aici - http://greathard.ucoz.com/44780_rus.pdf. Și aici (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) - un exemplu de setare a unui generator de caractere.

Conexiune

Ecranul meu a venit cu contacte nesudate. De la început am vrut să lipim cablul, să tai 16 fire cu duponturi și să le curăț. Și apoi am săpat în balenă și am găsit un pieptene dupont pentru lipit pe placă. De acolo, am rupt 16 contacte și le-am lipit.
Ecranul meu arăta astfel (înainte de a lipi contactele):

Mai întâi am conectat pinul 15 (A) la +5V, 16 (K) la masă și m-am asigurat că lumina de fundal funcționează. În general, este corect să conectați catodul la masă printr-un rezistor de 220 ohmi, ceea ce am făcut apoi.

Apoi am conectat masă (1) și putere (2). Arduino poate fi alimentat prin USB, reglat 5V și nereglat 6-12V, cea mai mare tensiune este selectată automat. Acum arduino este alimentat prin USB și m-am gândit de unde să scot 5 volți. S-a dovedit că 5V este pe contactul arduino, unde este conectat 5V stabilizat extern. Mai degrabă, s-a dovedit a fi 4,7V, dar a fost suficient pentru mine.

După conectarea la alimentare, dacă totul este bine, atunci rândul de sus se aprinde cu dreptunghiuri solide de familiaritate.

Apoi conectăm potențiometrul de contrast (pin 3 V0). Aruncăm una dintre concluziile extreme ale potențiometrului la pământ, a doua - la + 5V, cea din mijloc - la pinul 3 al afișajului. Este recomandat un potențiometru de 10K. Aveam 50K de la balenă, am folosit-o prima. Ajustarea a fost doar pe o margine, a fost necesar să se prindă destul de subtil contrastul dorit. Apoi într-o altă balenă am găsit una similară la 5K și am instalat-o. Setarea se întindea de la o margine la o jumătate de tură. Aparent, puteți lua și mai puțin potențiometru. Probabil că 10K recomandă ca circuitul să consume mai puțin. Da, a trebuit sa lipim putin, fire lipite cu duponturi la bornele potentiometrelor.

schiță de testare

Luăm schița de test în exemplele din Arduino Studio - „C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino”, doar că trebuie să schimbați contactele la ale noastre - LiquidCrystal lcd (7, 6, 5, 4, 3, 2);

În principiu, în această schiță există și o descriere a ce să conectați unde. Vă puteți conecta așa cum este indicat acolo, apoi nu trebuie să schimbați absolut nimic.

// include codul bibliotecii: #include // inițializați biblioteca cu numerele pinilor de interfață LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // setați numărul de coloane și rânduri ale LCD-ului: lcd.begin(16, 2); // Imprimați un mesaj pe LCD. lcd.print("hello, world!"); ) void loop() ( // setează cursorul pe coloana 0, linia 1 // (notă: linia 1 este al doilea rând, deoarece numărarea începe cu 0): lcd. setCursor(0, 1); // imprimă numărul de secunde de la resetare: lcd.print(millis() / 1000); )

Se dovedește ceva de genul acesta:

Apropo, afișajul care mi-a căzut în mâini nu funcționează fără iluminare de fundal. Adică, funcționează, dar aproape nimic nu este vizibil.

Contacte de afișare 1602A

a lua legatura # Nume Cum să te conectezi
1 VSS GND
2 VDD +5V
3 V0 Contrast - la ieșirea din mijloc a potențiometrului
4 RS (Selectare înregistrare) D7 Arduino
5 R/W (citește sau scrie) GND
6 E (semnal de activare) D6 Arduino
7-14 D0-D7 D0-D3 - neconectat; D4-D7 - conectat la pinii D5-D2 ai Arduino
15 A Anod de iluminare de fundal, conectați la +5V
16 K Catod de iluminare, conectat la masă printr-un rezistor de 220 ohmi

Ecranele LCD 1602, bazate pe controlerul HD44780, sunt unul dintre cele mai simple, mai accesibile și populare afișaje pentru dezvoltarea diferitelor dispozitive electronice. Poate fi găsit atât în ​​dispozitivele montate pe genunchi, cât și în dispozitivele industriale, precum, de exemplu, aparatele de cafea. Pe bază acest afișaj a colectat cele mai populare module și scuturi din tema Arduino, cum ar fi și.

În acest articol, vă vom spune cum să îl conectați la Arduino și să afișați informații.

Componente folosite (cumpărați din China):

. panou de control

. Fire de conectare

Aceste afișaje sunt disponibile în două versiuni: iluminare de fundal galbenă cu litere negre sau, mai frecvent, iluminare de fundal albastră cu litere albe.

Dimensiunile display-urilor de pe controlerul HD44780 pot fi diferite, ele vor fi controlate în același mod. Cele mai comune dimensiuni sunt 16x02 (adică 16 caractere pe două rânduri) sau 20x04. Rezoluția caracterelor în sine este de 5x8 pixeli.

Majoritatea afișajelor nu au suport chirilic, doar afișajele marcate CTK îl au. Dar această problemă poți încerca să rezolvi parțial (continuare în articol).

Știfturi de afișare:

Display-ul are un conector cu 16 pini pentru conectare. Știfturile sunt marcate pe spatele plăcii.

1 (VSS) - Sursa de alimentare a controlerului (-)
2 (VDD) - Putere controler (+)
3 (VO) - Ieșire de control al contrastului
4 (RS) - Înregistrați selecția
5 (R/W) - Citire/Scriere (modul de scriere atunci când este conectat la masă)
6 (E) - Activare (stroboscop în cădere)
7-10 (DB0-DB3) - LSB-uri de interfață pe 8 biți
11-14 (DB4-DB7) - Biți înalți ai interfeței
15 (A) - Putere de iluminare din fundal anod (+).
16 (K) - Putere de iluminare din spate catod (-).

Modul de autotestare:

Înainte de a încerca să conectați și să scoateți informații, ar fi bine să știți dacă afișajul funcționează sau nu. Pentru a face acest lucru, trebuie să aplicați tensiune controlerului însuși ( VSS și VDD), porniți lumina de fundal ( A și K) și reglați contrastul.

Pentru a regla contrastul, utilizați un potențiometru de 10 kΩ. Ce va fi sub formă - nu contează. +5V și GND sunt furnizate picioarelor extreme, piciorul central este conectat la ieșire VO

După aplicarea alimentării circuitului, este necesar să se obțină contrastul corect, dacă nu este setat corect, atunci nimic nu va fi afișat pe ecran. Pentru a regla contrastul, ar trebui să vă jucați cu potențiometrul.

Cu asamblarea corectă a circuitului și setare corectă contrast, linia de sus ar trebui să fie umplută cu dreptunghiuri pe ecran.

Ieșire de informații:

Afișajul folosește un mediu încorporat Arduino IDE biblioteca LiquidCrystal.h

Funcționalitatea bibliotecii

//Lucrează cu cursorul lcd.setCursor(0, 0); // Setați cursorul (numărul celulei, linie) lcd.home(); // Setați cursorul la zero (0, 0) lcd.cursor(); // Activați vizibilitatea cursorului (subliniat) lcd.noCursor(); // Eliminați vizibilitatea cursorului (subliniere) lcd.blink(); // Activați clipirea cursorului (cursor 5x8) lcd.noBlink(); // Dezactivează clipirea cursorului (cursor 5x8) //Ieșire de informații lcd.print("site-ul"); // Informații de ieșire lcd.clear(); // Ștergeți afișajul, (ștergeți toate datele) setați cursorul la zero lcd.rightToLeft(); // Scrierea se face de la dreapta la stânga lcd.leftToRight(); // Scrierea se face de la stânga la dreapta lcd.scrollDisplayRight(); // Deplasați totul de pe afișaj cu un caracter la dreapta lcd.scrollDisplayLeft(); // Deplasați totul de pe afișaj cu un caracter la stânga //Informații utile pentru spioni :) lcd.noDisplay(); // Informațiile de pe afișaj devin invizibile, datele nu sunt șterse // dacă, în momentul în care funcţie dată activ, nu afișa nimic, atunci Ecran LCD(); // La apelarea funcției display(), afișajul restabilește toate informațiile care au fost

Afișajul în sine poate funcționa în două moduri:

Mod pe 8 biți - pentru aceasta sunt utilizați atât biți scăzuti, cât și biți înalți (BB0-DB7)

Mod pe 4 biți - doar biții mai puțin semnificativi sunt utilizați pentru aceasta (BB4-DB7)

Utilizarea modului pe 8 biți pe acest afișaj nu este practică. Este nevoie de încă 4 picioare pentru a funcționa și practic nu există nici un câștig în viteză. rata de reîmprospătare a acestui afișaj este limitată< 10раз в секунду.

Pentru a scoate text, este necesar să conectați ieșirile RS, E, DB4, DB5, DB6, DB7 la ieșirile controlerului. Ele pot fi conectate la orice pini Arduino, principalul lucru este să setați secvența corectă în cod.

Exemplu de cod de program:

#include LiquidCrystal lcd (7, 6, 5, 4, 3, 2); gol înființat()( lcd.begin (16, 2); // Setați dimensiunea ecranului lcd.setCursor(0, 0); lcd.print("Bună, lume!"); // Afișează text lcd setCursor (0, 1); // Setați cursorul la începutul liniei 2 lcd.print("site-ul"); // Afișează text ) void buclă (){ }

Crearea propriilor simboluri

Ne-am dat seama de rezultatul textului, literele alfabetului englezesc sunt cusute în memoria controlerului în interiorul afișajului și nu există probleme cu ele. Dar ce să faci dacă personajul dorit nu se află în memoria controlerului?

Nu contează, caracterul necesar poate fi realizat manual (până la 7 caractere în total). Celula, în display-urile pe care le luăm în considerare, are o rezoluție de 5x8 pixeli. Toată sarcina de a crea un simbol se rezumă la a scrie o mască de pic și a plasa unele în ea în locurile unde ar trebui să ardă puncte și zerouri unde nu.

În exemplul de mai jos, să desenăm o față zâmbitoare.

Exemplu de cod de program

//Testat pe Arduino IDE 1.0.5#include #include // Adăugăm biblioteca necesară // Smile Symbol Bitmask zâmbet octet = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal lcd (7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) gol înființat()( lcd.begin (16, 2); // Setați dimensiunea ecranului lcd.createChar(1, zâmbet); // Creați simbolul numărul 1 lcd.setCursor(0, 0); // Setați cursorul la începutul liniei 1 lcd.print("\1"); // Afișează zâmbetul (caracterul numărul 1) - „\1”) gol buclă (){ }

Primă

În comentarii, un membru al comunității a aruncat un link către un generator de caractere

  • igorka

      generator de caractere ca mai sus,
      am făcut-o pentru că nu este slab)

Deci, ceas în timp real. Acest lucru util rezolvă majoritatea sarcinilor utile legate de timp. Sa zicem managementul udarii la ora 5 dimineata in tara. Sau aprinderea și stingerea luminii la un moment dat. După dată, puteți începe încălzirea în orice casă. Lucrul este destul de interesant și util. Și mai precis? Vom lua în considerare ceasul în timp real DS1302 pentru populara platformă Arduino.

Din acest articol veți învăța:

O zi bună, dragi cititori ai blocului kip-world! Ce mai faci? Scrie în comentarii, ești pasionat de robotică? Ce înseamnă acest subiect pentru tine?

Nu las gândul pentru un minut. Dorm și văd când ajungem în sfârșit la punctul în care toată lumea își poate permite să cumpere un robot asistent personal. Nu contează ce va face, colectarea gunoiului, tunsul gazonului, spălarea mașinilor.

Îmi imaginez doar cât de complecși trebuie să conțină algoritmi în „creierul” lor.

La urma urmei, vom ajunge la punctul în care vom flash-ul software-ul în același mod ca pe computerele personale. De asemenea, descărcați aplicații. Coaseți brațele, picioarele, schimbați ghearele, manipulatoarele.

Urmărește filmele „Sunt un robot”, „ Inteligență artificială"," Razboiul Stelelor.

Japonezii și-au implementat evoluțiile de mult timp. De ce suntem mai rai? Avem o popularitate foarte scăzută. Cunosc puțini dezvoltatori. Numara pe degete. Facem altceva. Suntem revânzători. Cumpărăm doar truse gata făcute, roboți - jucării și tot felul de gunoaie.

De ce nu dezvoltăm asta:

Sau asta:

Mi-am încheiat reflecțiile cu voce tare. Să vorbim despre conectarea temporizatorului de ceas în timp real DS1302 la Arduino.

Ceas în timp real DS1302

Controlerul Arduino nu are propriul ceas. Prin urmare, dacă este necesar, trebuie completat cu un cip special DS1302.

Pentru alimentare, aceste plăci pot folosi propria baterie sau pot fi alimentate direct de la placa Arduino.

Tabel de pinout:

Schema de conexiuni cu Arduino UNO:


Metoda de programare Arduino pentru a lucra cu DS1302

Asigurați-vă că descărcați biblioteca actuală din surse de încredere.

Biblioteca vă permite să citiți și să scrieți parametrii în timp real. Vă dau o scurtă descriere mai jos:

#include // Includeți biblioteca.
arduino_RTC UN OBIECT ( NAME [, OUT_RST [, OUT_CLK [, OUT_DAT ]]] ); // Creați un obiect.

Funcţie ÎNCEPE();// Inițializarea modulului RTC.

Funcţie potriveste ora( SEC[, MIN[, HOUR[, DAY[, MONTH[, YEAR[, DAY]]]]]] ); // Seteaza timpul.

Funcţie Fă-ți timp([ LINIE ] ); // Timp de citit.

funcţie timp clipit( PARAMETRU [FRECVENȚA] ); // Determină ca funcția gettime să „clipească” parametrul de timp specificat.

funcţie perioada ( MINUTE ); // Specifică perioada minimă de acces la modul în minute.

Variabil secunde// Returnează secunde de la 0 la 59.

Variabil minute// Returnează minutele de la 0 la 59.

Variabil ore// Returnează orele de la 1 la 12.

Variabil Ore// Returnează orele de la 0 la 23.

Variabil miezul zilei// Returnează la prânz 0 sau 1 (0-am, 1-pm).

Variabil zi// Returnează ziua lunii de la 1 la 31.

Variabil zi lucrătoare// Returnează ziua săptămânii de la 0 la 6 (0 este duminică, 6 este sâmbătă).

Variabil lună// Returnează luna de la 1 la 12.

Variabil an// Returnează anul de la 0 la 99.

Scriem un program simplu. Setarea orei curente în modulul RTC (DS1302):

Arduino

#include iarduino_RTC time(RTC_DS1302,6,7,8); void setup() (întârziere(300); Serial.begin(9600); time.begin(); time.settime(0,51,21,27,10,15,2); // 0 sec, 51 min, Marți 21, 27 octombrie 2015 ) void loop()( if(millis()%1000==0)( // dacă a trecut 1 secundă Serial.println(time.gettime("d-m-Y, H:i: s, D" )); // afișează întârzierea (1); // întrerupeți 1 ms pentru a nu afișa timpul de mai multe ori în 1ms) ))

#include

iarduino_RTCtime(RTC_DS1302 , 6 , 7 , 8 ) ;

void setup()(

întârziere (300);

Serial. începe(9600);

timp. start();

timp. setare (0 , 51 , 21 , 27 , 10 , 15 , 2 ) ; // 0 sec, 51 min, ora 21, marți, 27 octombrie 2015

void loop()(

dacă (mili () % 1000 == 0 ) ( // dacă a trecut 1 secundă

Serial. println (time . gettime ("d-m-Y, H:i:s, D" ) ); // timpul de ieșire

întârziere(1); // face o pauză de 1 ms pentru a nu afișa ora de mai multe ori în 1 ms

Citim ora curentă din modulul RTC (DS1302) și o afișăm în " Port serial" :

#include iarduino_RTC time(RTC_DS1302,6,7,8); void setup() ( delay(300); Serial.begin(9600); time.begin(); ) void loop()( if(millis()%1000==0)( // dacă a trecut 1 secundă Serial. println (time.gettime("d-m-Y, H:i:s, D")); // afișează întârziere (1); // întrerupeți timp de 1 ms, pentru a nu afișa timpul de mai multe ori în 1ms) )

Ecran LCD- un invitat frecvent în proiecte arduino. Dar în circuitele complexe, s-ar putea să avem problema lipsei de porturi Arduino din cauza necesității de a conecta un scut care are o mulțime de pini. Ieșirea în această situație poate fi I2C/IIC un adaptor care conectează un scut Arduino 1602 aproape standard la plăcile Uno, Nano sau Mega cu doar 4 pini. În acest articol, vom vedea cum puteți conecta un ecran LCD cu o interfață I2C, ce biblioteci puteți utiliza, vom scrie un exemplu scurt de schiță și analiza erorile tipice.

Ecran cu cristale lichide LCD 1602 este o buna alegere pentru a scoate șiruri de caractere în diferite proiecte. Este ieftin, există diverse modificări cu Culori diferite iluminare de fundal, puteți descărca cu ușurință biblioteci gata făcute pentru schițe Arduino. Dar principalul dezavantaj al acestui ecran este faptul că display-ul are 16 pini digitali, dintre care sunt necesari cel puțin 6. Prin urmare, utilizarea acestui ecran LCD fără i2c adaugă limitări serioase pentru plăcile Arduino Uno sau Nano. Dacă contactele nu sunt suficiente, atunci va trebui să cumpărați Placa Arduino Mega sau salvați contacte, inclusiv prin conectarea afișajului prin i2c.

Scurtă descriere a LCD 1602 pini

Să aruncăm o privire mai atentă la pinii LCD1602:

Fiecare dintre concluzii are scopul ei:

  1. Pământ GND;
  2. Alimentare 5 V;
  3. Setarea contrastului monitorului;
  4. Comanda, date;
  5. Scrierea și citirea datelor;
  6. permite;

7-14. linii de date;

  1. Plus iluminare de fundal;
  2. Minus iluminare de fundal.

Specificații afișaj:

  • Tip de afișare simbolică, este posibilă încărcarea simbolurilor;
  • Lumini cu neon;
  • Controler HD44780;
  • Tensiune de alimentare 5V;
  • Format 16x2 caractere;
  • Interval de temperatură de funcționare de la -20C la +70C, intervalul de temperatură de depozitare de la -30C la +80C;
  • Unghi de vizualizare 180 de grade.

Schema de conectare pentru LCD la placa Arduino fără i2C

Schema standard pentru conectarea unui monitor direct la un microcontroler Arduino fără I2C este următoarea.

Din cauza numărului mare de contacte care trebuie conectate, este posibil să nu existe suficient spațiu pentru conectarea elementelor necesare. Utilizarea I2C reduce numărul de fire la 4 și pinii ocupați la 2.

De unde să cumpărați ecrane i2c 1602 pentru arduino

Ecranul LCD 1602 este destul de popular, așa că îl puteți găsi cu ușurință atât în ​​magazinele online interne, cât și pe site-urile străine. Iată câteva link-uri către cele mai disponibile opțiuni:

  • O variantă a afișajului obișnuit de la un vânzător destul de cunoscut Wavgat la un preț sub 100 de ruble.
  • Un set de ecran și adaptor i2c (trebuie să îl lipiți singur). Preț - sub 200 de ruble
  • Screen i2c shield - modul LCD 1602 cu butoane de control si placa de extensie.

Descrierea protocolului I2C

Înainte de a discuta despre conectarea unui afișaj la un arduino printr-un adaptor i2c, să vorbim pe scurt despre protocolul i2C în sine.

I2C / IIC(Inter-Integrated Circuit) este un protocol creat inițial pentru interconectarea circuitelor integrate într-un dispozitiv electronic. Dezvoltarea aparține Philips. Protocolul i2c se bazează pe utilizarea unei magistrale de 8 biți, care este necesară pentru conectarea blocurilor din electronica de control și a unui sistem de adresare, datorită căruia puteți comunica cu mai multe dispozitive prin aceleași fire. Pur și simplu transferăm date pe unul sau alt dispozitiv, adăugând la pachetele de date identificatorul elementului dorit.

Cel mai circuit simplu I2C poate conține un dispozitiv master (cel mai adesea este un microcontroler Arduino) și mai multe dispozitive slave (de exemplu, Ecran LCD). Fiecare dispozitiv are o adresă în intervalul de la 7 la 127. Nu ar trebui să existe două dispozitive cu aceeași adresă în aceeași schemă.

Placa Arduino acceptă i2c în hardware. Puteți utiliza pinii A4 și A5 pentru a conecta dispozitive folosind acest protocol.

Există mai multe avantaje în a lucra cu I2C:

  • Pentru funcționare sunt necesare doar 2 linii - SDA (linie de date) și SCL (linie de ceas).
  • Conectarea unui număr mare de dispozitive de vârf.
  • Reducerea timpului de dezvoltare.
  • Este necesar un singur microcontroler pentru a controla întregul set de dispozitive.
  • Numărul posibil de microcircuite conectate la o magistrală este limitat doar de capacitatea maximă.
  • Grad ridicat de siguranță a datelor datorită unui filtru special de suprimare a supratensiunii încorporat în circuite.
  • Procedură simplă pentru diagnosticarea defecțiunilor emergente, depanare rapidă.
  • Autobuzul este deja integrat în Arduino în sine, deci nu este nevoie să dezvoltați o interfață suplimentară de magistrală.

Dezavantaje:

  • Există o limită capacitivă pe linie - 400 pF.
  • Dificultate la programarea controlerului I2C dacă există mai multe dispozitive diferite pe magistrală.
  • La în număr mare dispozitivelor, devine dificilă localizarea defecțiunii dacă unul dintre ele setează din greșeală o stare de nivel scăzut.

Modul i2c pentru LCD 1602 Arduino

Cel mai rapid și mai convenabil mod de a utiliza un afișaj i2c în arduino este să cumpărați un ecran gata făcut cu suport de protocol încorporat. Dar aceste ecrane nu sunt foarte multe și nu sunt ieftine. Dar un număr mare de diferite ecrane standard au fost deja lansate. Prin urmare, cea mai accesibilă și populară opțiune astăzi este să cumpărați și să utilizați un modul I2C separat - un adaptor care arată astfel:

Pe o parte a modulului, vedem pinii i2c - masă, putere și 2 pentru transferul de date. Pe celălalt adaptor vedem conectorii de alimentare externi. Și, bineînțeles, pe placă sunt mulți pini, cu ajutorul cărora modulul este lipit la pinii ecranului standard.


Ieșirile I2c sunt folosite pentru a se conecta la placa Arduino. Dacă este necesar, conectați o sursă de alimentare externă pentru iluminare. Cu trimmer-ul încorporat putem regla valorile de contrast reglabile J

Pe piata gasesti module LCD 1602 cu adaptoare deja lipite, utilizarea lor fiind simplificata maxim. Dacă ați cumpărat un adaptor separat, va trebui să-l pre-lipiți la modul.

Conectarea ecranului LCD la Arduino prin I2C

Pentru a vă conecta, aveți nevoie de placa Arduino în sine, un afișaj, o placă de breadboard, fire de conectare și un potențiometru.

Dacă utilizați un adaptor special i2c separat, atunci trebuie mai întâi să îl lipiți la modulul ecran. Este dificil să greșești acolo, te poți ghida după o astfel de schemă.


Un monitor LCD compatibil i2c este conectat la placă folosind patru fire - două fire pentru date, două fire pentru alimentare.

  • Pinul GND este conectat la GND de pe placă.
  • Pinul VCC este de 5V.
  • SCL este conectat la pinul A5.
  • SDA este conectat la pinul A.

Și este tot! Fără păianjen de fire, în care este foarte ușor să te încurci. În același timp, putem pur și simplu încredința bibliotecilor întreaga complexitate a implementării protocolului i2C.

Biblioteci pentru lucrul cu afișajul LCD i2c

Pentru a interfața Arduino cu LCD 1602 prin magistrala I2C, veți avea nevoie de cel puțin două biblioteci:

  • Biblioteca Wire.h pentru lucrul cu I2C este deja disponibilă în program standard Arduino IDE.
  • Biblioteca LiquidCrystal_I2C.h, care include o mare varietate de comenzi pentru controlul monitorului prin magistrala I2C și vă permite să faceți schița mai ușoară și mai scurtă. Trebuie să instalați suplimentar biblioteca După conectarea afișajului, trebuie să instalați suplimentar biblioteca LiquidCrystal_I2C.h

După ce conectăm toate bibliotecile necesare la schiță, creăm un obiect și putem folosi toate funcțiile acestuia. Pentru testare, să încărcăm următoarea schiță standard din exemplu.

#include #include // Conexiune la bibliotecă //#include // Conectarea bibliotecii alternative LiquidCrystal_I2C lcd(0x27,16,2); // Specificați adresa I2C (cea mai comună valoare), precum și parametrii ecranului (în cazul LCD 1602 - 2 linii a câte 16 caractere fiecare //LiquidCrystal_PCF8574 lcd(0x27); // Varianta pentru configurarea bibliotecii PCF8574 void( ) ( lcd.init (); // Inițializați afișajul lcd.backlight(); // Conectați iluminarea de fundal lcd.setCursor(0,0); // Setați cursorul la începutul primei linii lcd.print(" Salut"); // Introduceți text pe prima linie lcd.setCursor(0,1); // Setați cursorul la începutul celei de-a doua rânduri lcd.print ("ArduinoMaster"); // Introduceți text pe a doua linie ) bucla void() ( )

Descrierea funcțiilor și metodelor bibliotecii LiquidCrystal_I2C:

  • home() și clear() - prima funcție vă permite să întoarceți cursorul la începutul ecranului, a doua de asemenea, dar în același timp șterge tot ce era pe monitor înainte.
  • write(ch) - vă permite să imprimați un singur caracter ch pe ecran.
  • cursor() și noCursor() - arată/ascunde cursorul pe ecran.
  • blink() și noBlink() - cursorul clipește/nu clipește (dacă afișarea sa a fost activată înainte).
  • display() și noDisplay() - vă permite să activați/dezactivați afișarea.
  • scrollDisplayLeft() și scrollDisplayRight() - derulează ecranul cu un caracter la stânga/dreapta.
  • autoscroll() și noAutoscroll() - vă permite să activați/dezactivați modul de autoscroll. În acest mod, fiecare personaj nou se inregistreaza in acelasi loc, inlocuind ceea ce era scris anterior pe ecran.
  • leftToRight() și rightToLeft() - Setează direcția textului afișat - de la stânga la dreapta sau de la dreapta la stânga.
  • createChar(ch, bitmap) - creează un caracter cu codul ch (0 - 7) folosind o matrice de bitmap pentru a crea puncte alb-negru.

Bibliotecă alternativă pentru lucrul cu afișajul i2c

În unele cazuri, atunci când utilizați biblioteca specificată cu dispozitive echipate cu controlere PCF8574, pot apărea erori. În acest caz, biblioteca LiquidCrystal_PCF8574.h poate fi oferită ca alternativă. Extinde LiquidCrystal_I2C, așa că nu ar trebui să existe probleme de utilizare.

Probleme de conectare a ecranului LCD i2c

Dacă nu vedeți nimic pe afișaj după încărcarea schiței, încercați următorii pași.

În primul rând, puteți crește sau micșora contrastul monitorului. Adesea, caracterele pur și simplu nu sunt vizibile din cauza contrastului și a modului de iluminare de fundal.

Dacă acest lucru nu ajută, atunci verificați conexiunea corectă a contactelor, dacă lumina de fundal este alimentată. Dacă ați folosit un adaptor i2c separat, verificați din nou calitatea lipirii contactelor.

Un alt motiv comun pentru lipsa textului pe ecran poate fi adresa i2c greșită. Încercați mai întâi să schimbați adresa dispozitivului din schiță de la 0x27 0x20 sau la 0x3F. Diferiți producători pot avea adrese implicite diferite. Dacă acest lucru nu ajută, puteți rula schița scanerului i2c, care scanează toate dispozitivele conectate și determină adresa lor prin forță brută. Un exemplu de schiță a unui scaner i2c.

Dacă ecranul tot nu funcționează, încercați să dezlipiți adaptorul și să conectați LCD-ul în modul obișnuit.

Concluzie

În acest articol, am acoperit principalele probleme ale utilizării ecranului LCD în proiecte complexe Arduino atunci când trebuie să salvam pinii liberi pe placă. Un adaptor i2c simplu și ieftin vă va permite să conectați un ecran LCD 1602, ocupând doar 2 pini analogici. În multe situații, acest lucru poate fi foarte important. Plata pentru comoditate – Necesitatea folosirii modul suplimentar- convertor și bibliotecă. În opinia noastră, deloc preț mare pentru comoditate și vă recomandăm să utilizați această funcție în proiecte.