V tej vadnici bomo izdelali digitalno uro tako, da povežemo modul RTC DS3231 z MSP430 in prikažemo uro in datum na 16x2 LCD. MSP-EXP430G2 je razvojno orodje, imenovano LaunchPad, ki ga ponuja Texas Instruments za učenje in vadbo o uporabi njihovih mikrokrmilnikov. Ta plošča spada v kategorijo MSP430 Value Line, kjer lahko programiramo vse mikrokrmilnike serije MSP430. Če ste novi MSP, si oglejte naš uvod v vadnico MSP430.
Potrebni materiali:
- MSP430
- Modul DS3231 RTC
- LONČEK -10k
- LCD modul 16 * 2
- Priključne žice
- Breadboard
Kaj je RTC ??
DS3231 je RTC (Real Time Clock) modul. Uporablja se za vzdrževanje datuma in ure za večino projektov Elektronika. Ta modul ima lastno napajalno celico, s katero ohranja datum in čas, tudi ko je glavno napajanje odvzeto ali je MCU trdo ponastavljen. Torej, ko bomo v tem modulu nastavili datum in uro, ga bo vedno spremljal. Na voljo je več vrst RTC IC, kot so DS1307, DS3231 itd.
RTC smo že uporabljali z drugimi mikrokrmilniki v spodnjih projektih:
Opomba: Ko prvič uporabljate ta modul, morate nastaviti datum in uro. Uporabite lahko tudi RTC IC DS1307, DS1307 smo že uporabljali z Arduino.
Povezava DS3231 RTC z MSP430:
Shema vezja za digitalno uro na osnovi mikrokrmilnika MSP430 je podana spodaj. Kot smo že povedali, DS3231 deluje s pomočjo komunikacije I2C, tako da bo imel zaporedno uro (SCL) in zaporedni podatki (SDA), ki jih je treba priključiti na zatiče I2C na našem MSP430, ki je pin 9 (PIN 2.1, SCL) in pin 10 (PIN 2.2, SDA).
MSP430 daje 3,3 V Vcc, vendar potrebujemo 5 V, da ga povežemo z LCD in RTC modulom. Torej, uporabili bomo kramp, v bližini kabelskega priključka USB je na voljo mostiček, imenovan TP1. Od tam lahko vzamete 5V.
Shema vezja:
Programiranje MSP430 za RTC modul:
Tu uporabljamo Energia IDE za programiranje. Je enak kot Arduino IDE in enostaven za uporabo. Če ste nov v MSP in energiji, pojdite na začetek uporabe MSP z uporabo Energia IDE. Za vmesnik RTC modula potrebujemo knjižnico za to ploščo. Prenesite knjižnico RTC s te povezave in jo namestite.
Potrebujemo tudi knjižnice Wire (uporablja se za komunikacijo I2C) in knjižnice liquidcrystal, ki so prednameščene v programu Energia IDE.
Popolna koda za to digitalno uro MSP430 je podana na koncu tega članka. Koda je preprosta in lahko razumljiva. Tukaj razlagamo nekaj delov.
Najprej moramo vključiti potrebne knjižnice.
Spodnja knjižnica je namenjena komunikaciji I2C med modulom RTC in MSP430. Zatiči SDA in SCK so že definirani v tej knjižnici, zato nam teh zatičev ni treba posebej prijaviti.
#include
Nato smo vključili knjižnico RTClib.h za uro RTC in LiquidCrystal.h za funkcije LCD.
#include "RTClib.h" #include
Po tem moramo ustvariti primerek za inicializacijo našega modula RTC.
RTC_DS3231 rtc;
Nato naredite niz velikosti 7 in shranite vseh sedem dni z imenom.
char daysOfTheWeek = {"nedelja", "ponedeljek", "torek", "sreda", "četrtek", "petek", "sobota"};
Tu je izjava o zatičih MSP430, ki jo bo LCD zaslon uporabljal: (RS (P2.0), EN (P1.4), D4 (P1.5), D5 (P2.3), D6 (P2.4), D7 (P2.5))
LCD LiquidCrystal (8, 6, 7,11,12,13);
V void setup () , smo inicializiran vmesnik na LCD zaslonu in RTC in določeno dimenzije (širina in višina) na zaslonu, začeti ()
mora biti imenovan pred vsemi drugimi ukazi knjižnice.
void setup () { lcd.begin (16, 2); lcd.setCursor (3,0); lcd.print ("RTC Clock"); zamuda (3000); lcd.clear (); rtc.begin (); // rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); }
Zdaj je prikazan čas na zaslonu pravilen, vendar je prišlo do težave. Vsakič, ko znova zaženete / ponastavite mikrokrmilnik, bo na LCD-prikazovalniku prikazan čas, ko ste naložili kodo. To je zato, ker je funkcija rtc.adjust () shranila čas vašega računalnika, zato se ob ponastavitvi začne s tem časom.
Če želite odpraviti to težavo, najprej naložite program s funkcijo rtc.adjust () nekomentirano . Nato takoj komentirajte isto vrstico in znova naložite program. Zdaj sta vaš datum in čas nastavljena in ponastavitev mikrokrmilnika ne bo vplivala nanje.
V funkciji zanke vzamemo datum in uro iz modula RTC, shranimo v vnaprej določeno spremenljivko, ki se imenuje zdaj, in jo prikažemo na LCD-ju s funkcijo lcd.print () .
void loop () { DateTime zdaj = rtc.now (); lcd.clear (); lcd.setCursor (3,0); lcd.print (zdaj.dan (), DEC); lcd.print ("/");…. …….
Popolna koda in video sta podana spodaj.