Zegarek z wyświetlaczem 1602 i2c z dużymi cyframi. Podłączanie zegara czasu rzeczywistego ds1302 do Arduino

W wielu projektach Arduino wymagane jest śledzenie i rejestrowanie czasu wystąpienia określonych zdarzeń. Moduł zegara czasu rzeczywistego, wyposażony w dodatkową baterię, pozwala na zapamiętanie aktualnej daty, niezależnie od obecności zasilania na samym urządzeniu. W tym artykule porozmawiamy o najpopularniejszych modułach DS1307, DS1302, DS3231 RTC, które mogą być używane z płytą Arduino.

Moduł zegara jest mała opłata, zawierający z reguły jeden z mikroukładów DS1307, DS1302, DS3231. Ponadto praktycznie można znaleźć mechanizm do instalowania baterii zasilającej na płycie. Takie tablice są często używane do rozliczania czasu, daty, dnia tygodnia i innych parametrów chronometrycznych. Moduły działają na autonomicznym zasilaniu - bateriach, akumulatorach i kontynuują liczenie nawet po wyłączeniu zasilania na Arduino. Najpopularniejsze modele zegarków to DS1302, DS1307, DS3231. Oparte są na module RTC (Real Time Clock) podłączonym do Arduino.

Zegar liczy jednostki, które są wygodne dla zwykłego człowieka - minuty, godziny, dni tygodnia i inne, w przeciwieństwie do konwencjonalnych liczników i generatorów zegarowych, które czytają "tykanie". Arduino posiada specjalną funkcję millis(), która potrafi również odczytywać różne interwały czasowe. Ale główną wadą tej funkcji jest resetowanie do zera po włączeniu timera. Za jego pomocą można jedynie odczytać godzinę, nie da się ustawić daty ani dnia tygodnia. Aby rozwiązać ten problem, wykorzystywane są moduły zegara czasu rzeczywistego.

Obwód elektroniczny zawiera mikroukład, zasilacz, rezonator kwarcowy i rezystory. Rezonator kwarcowy pracuje z częstotliwością 32768 Hz, co jest wygodne dla konwencjonalnego licznika binarnego. Obwód DS3231 posiada wbudowany kryształ i stabilizację termiczną, co pozwala na uzyskanie wysokich wartości dokładności.

Porównanie popularnych modułów RTC DS1302, DS1307, DS3231

W tej tabeli podaliśmy listę najpopularniejszych modułów i ich główne cechy.

Imię Częstotliwość Precyzja Obsługiwane protokoły
DS1307 1 Hz, 4,096 kHz, 8,192 kHz, 32,768 kHz Zależy od kwarcu - zwykle wartość sięga 2,5 sekundy na dobę, nie da się osiągnąć dokładności większej niż 1 sekunda na dzień. Również dokładność zależy od temperatury. I2C
DS1302 32,768 kHz 5 sekund dziennie I2C, SPI
DS3231 Dwa wyjścia - pierwsze 32,768 kHz, drugie programowalne od 1 Hz do 8,192 kHz ±2 ppm w temperaturach od 0C do 40C.

±3,5 ppm w temperaturach od -40C do 85C.

Dokładność pomiaru temperatury – ±3С

I2C

Moduł DS1307

DS1307 to moduł służący do pomiaru czasu. Jest montowany w oparciu o układ DS1307ZN, zasilany baterią litową, aby zrealizować; żywotność baterii w ciągu długiego okresu czasu. Bateria na płytce jest podłączona do Odwrotna strona. Moduł posiada układ AT24C32 - jest to nieulotna pamięć EEPROM o pojemności 32 KB. Oba mikroukłady są połączone magistralą I2C. DS1307 ma niski pobór mocy i zawiera zegar i kalendarz do roku 2100.

Moduł posiada następujące parametry:

  • Moc - 5V;
  • Zakres temperatur pracy od -40C do 85C;
  • 56 bajtów pamięci;
  • Bateria litowa LIR2032;
  • Realizuje tryby 12 i 24 godzinne;
  • Wsparcie dla interfejsu I2C.

Moduł jest uzasadniony do zastosowania w przypadkach, gdy dane są odczytywane dość rzadko, z tygodniową lub większą przerwą. Pozwala to zaoszczędzić energię, ponieważ podczas nieprzerwanego użytkowania będziesz musiał zużywać więcej napięcia, nawet z baterią. Obecność pamięci pozwala na rejestrację różnych parametrów (np. pomiar temperatury) oraz odczyt informacji otrzymywanych z modułu.

Interakcja z innymi urządzeniami i wymiana informacji z nimi odbywa się za pomocą interfejsu I2C ze styków SCL i SDA. W obwodzie zainstalowane są rezystory, które pozwalają zapewnić wymagany poziom sygnału. Również na płytce znajduje się specjalne miejsce do montażu czujnika temperatury DS18B20.Styki podzielone są na 2 grupy raster 2,54 mm. Pierwsza grupa kontaktów zawiera następujące wnioski:

  • DS - wyjście dla czujnika DS18B20;
  • SCL - linia zegarowa;
  • SDA - linia danych;
  • VCC - 5V;

W drugiej grupie kontaktów znajdują się:

  • SQ - 1 MHz;
  • BAT - Wejście baterii litowej.

Do połączenia z płytką Arduino potrzebna jest sama płytka (w tym przypadku rozważana jest Arduino Uno), moduł zegara czasu rzeczywistego RTC DS1307, przewody i kabel USB.

Do podłączenia kontrolera do Arduino wykorzystywane są 4 piny - VCC, masa, SCL, SDA.

Aby rozpocząć pracę z modułem zegara, należy zainstalować biblioteki DS1307RTC, TimeLib i Wire. Może być używany do pracy i RTCLib.

Sprawdzanie modułu RTC

Po uruchomieniu pierwszego kodu program będzie odczytywał dane z modułu raz na sekundę. Po pierwsze można zobaczyć, jak program będzie się zachowywał, jeśli wyjmiemy baterię z modułu i zastąpimy ją inną, gdy płytka Arduino nie jest podłączona do komputera. Trzeba poczekać kilka sekund i wyciągnąć baterię, w efekcie zegar zrestartuje się. Następnie należy wybrać przykład z menu Przykłady→RTClib→ds1307. Ważne jest, aby poprawnie ustawić prędkość transmisji na 57600 bps.

Po otwarciu okna monitora szeregowego powinny pojawić się następujące wiersze:

Pokaże czas 0:0:0. Wynika to z faktu, że zegar traci moc, a odliczanie się zatrzymuje. Z tego powodu nie wolno wyjmować baterii podczas pracy modułu.

Aby ustawić czas na module, musisz znaleźć linię na szkicu

RTC.adjust(DataGodzina(__DATA__, __CZAS__));

Ten wiersz będzie zawierał dane z komputera, który jest używany do flashowania modułu zegara czasu rzeczywistego. Do poprawnego działania należy najpierw sprawdzić poprawność daty i godziny na komputerze, a dopiero potem zacząć migać moduł zegara. Po ustawieniu na monitorze będą wyświetlane następujące dane:

Ustawienie zostało wykonane poprawnie i nie ma potrzeby dodatkowej rekonfiguracji zegara czasu rzeczywistego.

Czas czytania. Po skonfigurowaniu modułu możesz wysyłać żądania, aby uzyskać czas. Aby to zrobić, użyj funkcji now(), która zwraca obiekt DateTime zawierający informacje o godzinie i dacie. Istnieje wiele bibliotek, które służą do odczytywania czasu. Na przykład RTC.year() i RTC.hour() — oddzielnie otrzymują informacje o roku i godzinie. Podczas pracy z nimi może pojawić się problem: np. prośba o wyświetlenie godziny zostanie złożona o 1:19:59. Przed pokazaniem godziny 1:20:00 zegar będzie wyświetlał godzinę 1:19:00, czyli tak naprawdę stracona zostanie jedna minuta. Dlatego wskazane jest korzystanie z tych bibliotek w przypadkach, gdy czytanie odbywa się rzadko – raz na kilka dni. Istnieją inne funkcje wywoływania czasu, ale jeśli potrzebujesz zmniejszyć lub uniknąć błędów, lepiej użyć teraz () i już z niego wyciągnąć niezbędne odczyty.

Przykładowy projekt z modułem zegara i wyświetlaczem i2C

Projekt jest zwykłym zegarem, wskaźnik będzie wyświetlał dokładny czas, a dwukropek między cyframi będzie migał w odstępach co sekundę. Do realizacji projektu potrzebna jest płytka Arduino Uno, wskaźnik cyfrowy, zegar czasu rzeczywistego (w tym przypadku opisany powyżej moduł ds1307), nakładka do podłączenia (w tym przypadku używana jest Troyka Shield), bateria zegara i przewody.

Projekt wykorzystuje prosty czterocyfrowy wskaźnik na chipie TM1637. Urządzenie posiada interfejs dwuprzewodowy i zapewnia 8 poziomów jasności monitora. Używany tylko do wyświetlania czasu w formacie godziny:minuty. Wskaźnik jest łatwy w obsłudze i łatwy do podłączenia. Jest to korzystne w przypadku projektów, w których walidacja danych minuta po minucie lub godzina nie jest wymagana. Aby uzyskać pełniejsze informacje o godzinie i dacie, stosuje się monitory ciekłokrystaliczne.

Moduł zegara jest podłączony do pinów SCL/SDA, które są związane z magistralą I2C. Musisz także podłączyć uziemienie i zasilanie. Podłączamy go do Arduino w taki sam sposób jak opisano powyżej: SDA - A4, SCL - A5, masa od modułu do masy z Arduino, VCC -5V.

Wskaźnik podłącza się po prostu - wyjścia z niego CLK i DIO są podłączone do dowolnych pinów cyfrowych na płytce.

Naszkicować. Do napisania kodu wykorzystywana jest funkcja setup, która umożliwia inicjalizację zegara i wskaźnika, rejestrację czasu kompilacji. Wyświetlanie czasu na ekranie odbywa się za pomocą pętli.

#zawierać #include "TM1637.h" #include "DS1307.h" //musisz dołączyć wszystkie potrzebne biblioteki do pracy z zegarem i wyświetlaczem. char Czas kompilacji = __TIME__; //czas kompilacji. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 // numery z wyjść Arduino, do których podłączony jest ekran; void setup() ( display.set(); display.init(); //podłącz i skonfiguruj ekran. clock.begin(); //włącz zegar. byte hour = getInt(compileTime, 0); byte minuta = getInt( czas kompilacji, 2); bajt sekunda = getInt(czas kompilacji, 4); // pobierz czas. clock. fillByHMS(godzina, minuta, sekunda); // przygotuj się do zapisu do modułu czasu. clock. setTime( ); // zapis informacji o toku otrzymanych w trakcie pamięć wewnętrzna, zacznij czytać godzinę. ) void loop() ( int8_t timeDisp; //wyświetlanie na każdym z czterech bitów. clock.getTime();//żądanie czasu.timeDisp = clock.hour / 10; timeDisp = clock.hour % 10; timeDisp = clock . minuta / 10; timeDisp = clock.minute % 10; //różne operacje, aby uzyskać dziesiątki, jednostki godzin, minut, itp. display.display(timeDisp); //wyświetl czas na wskaźniku display.point(clock.second % 2 ? POINT_ON: POINT_OFF);//włącz i wyłącz dwukropek po sekundzie. ) char getInt(const char* string, int startIndex) ( return int(string - "0") * 10 + int(string) - "0 "; //działania, aby poprawnie zapisać czas jako dwucyfrową liczbę całkowitą, w przeciwnym razie ekran wyświetli tylko kilka znaków. )

Następnie szkic należy wczytać, a na monitorze zostanie wyświetlony czas.

Program można nieco uaktualnić. Po wyłączeniu zasilania, powyższy szkic spowoduje wyświetlenie na wyświetlaczu czasu, jaki został ustawiony podczas kompilacji po włączeniu. Funkcja konfiguracji każdorazowo oblicza czas, który upłynął od 00:00:00 do rozpoczęcia kompilacji. Ten skrót zostanie porównany z tym, co jest przechowywane w pamięci EEPROM, która jest zapisywana po wyłączeniu zasilania.

Aby pisać i czytać czas w pamięć nieulotna lub trzeba z niego dodać funkcje EEPROMWriteInt i EEPROMReadInt. Są one potrzebne do sprawdzenia, czy skrót pasuje/nie pasuje do skrótu zapisanego w EEPROM.

Projekt można ulepszyć. Jeśli korzystasz z monitora ciekłokrystalicznego, możesz wykonać projekt, który wyświetli na ekranie datę i godzinę. Połączenie wszystkich elementów pokazano na rysunku.

W rezultacie będziesz musiał określić nową bibliotekę w kodzie (dla ekranów ciekłokrystalicznych jest to LiquidCrystal) i dodać linie do funkcji loop(), aby uzyskać datę.

Algorytm pracy jest następujący:

  • Połączenie wszystkich komponentów;
  • Sprawdź - na ekranie monitora godzina i data powinny zmieniać się co sekundę. Jeśli na ekranie pojawi się niewłaściwa godzina, należy dodać do szkicu funkcję RTC.write (tmElements_t tm). Problemy z niewłaściwym czasem są spowodowane przez moduł zegara resetujący datę i godzinę do 00:00:00 01/01/2000 po wyłączeniu.
  • Funkcja zapisu pozwala pobrać z komputera datę i godzinę, po czym na ekranie zostaną wskazane prawidłowe parametry.

Wniosek

Moduły zegarowe są wykorzystywane w wielu projektach. Są potrzebne w systemach rejestracji danych, przy tworzeniu timerów i urządzeń sterujących, które pracują według zadanego harmonogramu, w sprzęt AGD. Dzięki ogólnodostępnym i tanim modułom można tworzyć projekty takie jak budzik czy rejestrator danych z czujników, zapisywać informacje na kartę SD czy pokazywać godzinę na ekranie wyświetlacza. W tym artykule przyjrzeliśmy się typowym przypadkom użycia i opcjom łączenia najpopularniejszych typów modułów.

Dostarczono Arduino Nano, przybył zestaw, w którym znajduje się płytka stykowa (płytka testowa) i wyświetlacz LCD. Wyświetlacz na płytce mówi - 1602A, poniżej - QAPASS. Zacząłem rzeźbić pierwsze urządzenie i oczywiście chciałem wyświetlać informacje na wyświetlaczu, a nie mrugać diodami.

Google pomógł, powiedział mi, że to jest wyświetlanie znaków; jeśli nie są zboczone, to najprawdopodobniej dostępne są znaki ASCII - cyfry, łacina, coś z podstawowych znaków.

Następujące materiały pomogły w uruchomieniu wyświetlacza: Sterowanie wyświetlaczem LCD typu znakowego z portu drukarki w komputerze; Jak podłączyć Arduino z wyświetlaczem LCD ; Sterowanie silnikiem serwonapędu Pwm PDF.

Wyświetlacz jest dość powszechny, a do tego wymyślono już osłony - są opcje z SPI jak i/lub z I2C, a internet jest pełen przepisów na takie przypadki. Ale miałem tylko oryginalny wyświetlacz 16x2 i arduinkę, do której chciałem go dołączyć.

Wyświetlacz posiada tryb pracy i transmisji danych w półbajtach po 4 bity, przy czym dolne bity magistrali nie są wykorzystywane. Podłączenie tylko połowy magistrali danych jest opisane w wielu miejscach, a ja nie wymyśliłem jak podłączyć wyświetlacz i pracować z nim na 8 liniach. Jestem całkiem zadowolony z tego, jak to działa.

Dobry opis wyświetlaczy tego typu znalazłem tutaj - http://greathard.ucoz.com/44780_rus.pdf. A tutaj (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) - przykład ustawienia generatora znaków.

Połączenie

Mój wyświetlacz zawierał niesprzedane kontakty. Od początku chciałem przylutować kabel, odciąć 16 drucików z dupontami i wyczyścić je. A potem dokopałem się do wieloryba i znalazłem grzebień dupontowy do przylutowania do deski. Stamtąd zerwałem 16 styków i przylutowałem je.
Mój wyświetlacz wyglądał tak (przed wlutowaniem styków):

Najpierw podłączyłem pin 15 (A) do +5V, 16 (K) do masy i upewniłem się, że podświetlenie działa. Ogólnie rzecz biorąc, prawidłowe jest podłączenie katody do uziemienia przez rezystor 220 Ohm, co następnie zrobiłem.

Następnie podłączyłem masę (1) i zasilanie (2). Arduino może być zasilane przez USB, stabilizowane 5V i nieregulowane 6-12V, najwyższe napięcie jest wybierane automatycznie. Teraz arduino jest zasilane przez USB i pomyślałem, gdzie wyciągnąć 5 woltów. Okazało się, że 5V jest na styku arduino, do którego podłączone jest zewnętrzne stabilizowane 5V. Raczej okazało się, że jest to 4,7V, ale mi to wystarczyło.

Po podłączeniu zasilania, jeśli wszystko jest w porządku, górny rząd świeci się solidnymi prostokątami.

Następnie podłączamy potencjometr kontrastu (pin 3 V0). Jeden ze skrajnych wyprowadzeń potencjometru zrzucamy na ziemię, drugi - na +5V, środkowy - na pin 3 wyświetlacza. Zalecany jest potencjometr 10K. Miałem 50K od wieloryba, najpierw go użyłem. Regulacja była tylko na jednej krawędzi, trzeba było dość subtelnie uchwycić pożądany kontrast. Potem w innym wielorybie znalazłem podobny w 5K i zainstalowałem go. Ustawienie rozciągnięte od jednej krawędzi do pół obrotu. Podobno można wziąć jeszcze mniej potencjometru. 10K chyba polecam, żeby obwód zużywał mniej. Tak, musiałem trochę przylutować, przylutować przewody z dupontami do zacisków potencjometrów.

szkic testowy

Bierzemy szkic testowy w przykładach z Arduino Studio - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", tylko trzeba zmienić kontakty na nasze - LiquidCrystal lcd (7, 6, 5, 4, 3, 2);

W zasadzie w tym szkicu jest też opis co podłączyć gdzie. Możesz połączyć się tak, jak tam wskazano, wtedy nie musisz w ogóle niczego zmieniać.

// dołącz kod biblioteki: #include // zainicjuj bibliotekę numerami pinów interfejsu LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // ustaw liczbę kolumn i wierszy na wyświetlaczu LCD: lcd.begin(16, 2); // Wydrukuj wiadomość na wyświetlaczu LCD. lcd.print("hello, world!"); ) void loop() ( // ustaw kursor na kolumnę 0, wiersz 1 // (uwaga: wiersz 1 to drugi wiersz, ponieważ liczenie zaczyna się od 0): lcd. setCursor(0, 1); // wypisz liczbę sekund od zresetowania: lcd.print(millis() / 1000); )

Okazuje się coś takiego:

Swoją drogą wyświetlacz, który wpadł mi w ręce nie działa bez podświetlenia. To znaczy działa, ale prawie nic nie widać.

1602A Styki wyświetlacza

kontakt # Imię Jak się połączyć
1 VSS GND
2 VDD +5V
3 V0 Kontrast - do środkowego wyjścia potencjometru
4 RS (Zarejestruj wybierz) Arduino D7
5 R/W (odczyt lub zapis) GND
6 E (włącz sygnał) Arduino D6
7-14 D0-D7 D0-D3 - nie podłączony; D4-D7 - podłączony do pinów D5-D2 Arduino
15 A Anoda podświetlenia, podłącz do +5V
16 K Katoda oświetleniowa podłączona do masy przez rezystor 220 omów

Wyświetlacze LCD 1602 oparte na sterowniku HD44780 to jedne z najprostszych, najtańszych i najpopularniejszych wyświetlaczy do rozwoju różnych urządzeń elektronicznych. Można go spotkać zarówno w urządzeniach na kolanach, jak i w urządzeniach przemysłowych, takich jak np. ekspresy do kawy. Na bazie ten wyświetlacz zebrał najpopularniejsze moduły i osłony w motywie Arduino, takie jak i.

W tym artykule dowiesz się, jak podłączyć go do Arduino i wyświetlić informacje.

Użyte komponenty (kup z Chin):

. tablica sterowania

. Podłączanie przewodów

Wyświetlacze te dostępne są w dwóch wersjach: z żółtym podświetleniem z czarnymi literami lub częściej z niebieskim podświetleniem z białymi literami.

Wymiary wyświetlaczy na kontrolerze HD44780 mogą być różne, będą sterowane w ten sam sposób. Najczęściej spotykane wymiary to 16x02 (tj. 16 znaków w dwóch wierszach) lub 20x04. Rozdzielczość samych znaków to 5x8 pikseli.

Większość wyświetlaczy nie obsługuje cyrylicy, tylko wyświetlacze oznaczone CTK mają ją. Jednak ten problem możesz spróbować rozwiązać częściowo (ciąg dalszy w artykule).

Piny wyświetlacza:

Wyświetlacz posiada 16-pinowe złącze do podłączenia. Piny są zaznaczone z tyłu płytki.

1 (VSS) - Zasilanie sterownika (-)
2 (VDD) - Zasilanie sterownika (+)
3 (VO) - Wyjście kontroli kontrastu
4 (RS) - Wybór rejestru
5 (R/W) - Odczyt/zapis (tryb zapisu po podłączeniu do masy)
6 (E) - Włącz (opadająca stroboskop)
7-10 (DB0-DB3) - LSB 8-bitowego interfejsu
11-14 (DB4-DB7) - Wysokie bity interfejsu
15 (A) - Moc podświetlenia anody (+)
16 (K) - Moc podświetlenia katody (-)

Tryb autotestu:

Przed próbą połączenia i wyprowadzenia informacji dobrze byłoby wiedzieć, czy wyświetlacz działa, czy nie. Aby to zrobić, musisz podać napięcie do samego kontrolera ( VSS i VDD), włącz podświetlenie ( A i K) i dostosuj kontrast.

Do regulacji kontrastu użyj potencjometru 10 kΩ. Co to będzie w formie - to nie ma znaczenia. Do skrajnych nóg dostarczane są +5V i GND, środkowa noga jest podłączona do wyjścia VO

Po włączeniu zasilania do obwodu konieczne jest uzyskanie prawidłowego kontrastu, jeśli nie jest ustawiony poprawnie, nic nie będzie wyświetlane na ekranie. Aby wyregulować kontrast, powinieneś pobawić się potencjometrem.

Przy prawidłowym montażu obwodu i prawidłowe ustawienie dla kontrastu, górna linia powinna być wypełniona prostokątami na ekranie.

Wyjście informacyjne:

Wyświetlacz wykorzystuje wbudowane środowisko IDE Arduino biblioteka LiquidCrystal.h

Funkcjonalność biblioteki

//Praca z kursorem lcd.setCursor(0, 0); // Ustaw kursor (numer komórki, linia) lcd.home(); // Ustaw kursor na zero (0, 0) lcd.kursor(); // Włącz widoczność kursora (podkreślenie) lcd.noKursor(); // Usuń widoczność kursora (podkreślenie) lcd.blink(); // Włącz miganie kursora (kursor 5x8) lcd.noBlink(); // Wyłącz miganie kursora (kursor 5x8) //Wyjście informacji lcd.print("witryna"); // Wyjście informacyjne lcd.clear(); // Wyczyść wyświetlacz, (usuń wszystkie dane) ustaw kursor na zero lcd.rightToLeft(); // pisanie odbywa się od prawej do lewej lcd.LeftToRight(); // pisanie odbywa się od lewej do prawej lcd.scrollDisplayRight(); // Przesuń wszystko na wyświetlaczu o jeden znak w prawo lcd.scrollDisplayLeft(); // Przesuń wszystko na wyświetlaczu o jeden znak w lewo //Informacje przydatne dla szpiegów :) lcd.noDisplay(); // Informacje na wyświetlaczu stają się niewidoczne, dane nie są usuwane // jeśli, w momencie kiedy podana funkcja aktywny, nie wyświetlaj niczego, to wyświetlacz LCD(); // Podczas wywoływania funkcji display() wyświetlacz przywraca wszystkie informacje, które były

Sam wyświetlacz może pracować w dwóch trybach:

Tryb 8-bitowy - do tego wykorzystywane są zarówno niskie, jak i wysokie bity (BB0-DB7)

Tryb 4-bitowy - do tego wykorzystywane są tylko najmniej znaczące bity (BB4-DB7)

Używanie trybu 8-bitowego na tym wyświetlaczu jest niepraktyczne. Wymaga 4 nóg więcej do pracy i praktycznie nie ma przyrostu prędkości. częstotliwość odświeżania tego wyświetlacza jest ograniczona< 10раз в секунду.

Do wyprowadzania tekstu konieczne jest podłączenie wyjść RS, E, DB4, DB5, DB6, DB7 do wyjść kontrolera. Można je podłączyć do dowolnych pinów Arduino, najważniejsze jest ustawienie odpowiedniej kolejności w kodzie.

Przykład kodu programu:

#zawierać LCD LiquidCrystal (7, 6, 5, 4, 3, 2); próżnia organizować coś()( lcd.początek (16, 2); // Ustaw rozmiar ekranu lcd.setCursor(0, 0); lcd.print("Witaj świecie!"); // Wyświetl tekstowy wyświetlacz LCD setCursor (0, 1); // Ustaw kursor na początku linii 2 lcd.print("witryna"); // Wyświetl tekst ) void pętla (){ }

Tworzenie własnych symboli

Wymyśliliśmy wyjście tekstu, litery alfabetu angielskiego są wszyte w pamięć sterownika wewnątrz wyświetlacza i nie ma z nimi problemów. Ale co zrobić, jeśli żądanego znaku nie ma w pamięci kontrolera?

Nie ma znaczenia, wymagany znak można wpisać ręcznie (łącznie do 7 znaków). Komórka, w rozważanych przez nas wyświetlaczach, ma rozdzielczość 5x8 pikseli. Całe zadanie stworzenia symbolu sprowadza się do napisania maski bitowej i umieszczenia w niej jedynek w miejscach, w których kropki powinny się palić, a zer tam, gdzie nie.

W poniższym przykładzie narysujmy buźkę.

Przykład kodu programu

//Testowane na Arduino IDE 1.0.5#zawierać #zawierać // Dodajemy niezbędną bibliotekę // Maska bitowa symbolu uśmiechu uśmiech bajtowy = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LCD LiquidCrystal (7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) próżnia organizować coś()( lcd.początek (16, 2); // Ustaw rozmiar ekranu lcd.createChar(1, uśmiech); // Utwórz symbol numer 1 lcd.setCursor(0, 0); // Ustaw kursor na początku linii 1 lcd.print("\1"); // Wyświetl buźkę (znak numer 1) - "\1") próżnia pętla (){ }

Premia

W komentarzach członek społeczności upuścił link do generatora postaci

  • igorka

      generator znaków jak wyżej,
      zrobiłem to, bo nie jest słaby)

A więc zegar czasu rzeczywistego. Ta przydatna rzecz rozwiązuje większość przydatnych zadań związanych z czasem. Powiedzmy, że zarządzanie nawadnianiem na wsi o 5 rano. Lub włączanie i wyłączanie oświetlenia w określonym momencie. Do dnia możesz rozpocząć ogrzewanie w dowolnym domu. Rzecz jest dość interesująca i użyteczna. A dokładniej? Rozważymy zegar czasu rzeczywistego DS1302 dla popularnej platformy Arduino.

Z tego artykułu dowiesz się:

Dzień dobry, drodzy czytelnicy bloku kip-world! Jak się masz? Napisz w komentarzach, lubisz robotykę? Co ten temat dla Ciebie oznacza?

Nie zostawiam myśli o tym na minutę. Śpię i widzę, kiedy w końcu dochodzimy do tego, że każdego stać na zakup osobistego asystenta robota. Nieważne co zrobi, wywóz śmieci, koszenie trawnika, mycie samochodu.

Wyobrażam sobie tylko, jak złożone algorytmy muszą zawierać w swoich „mózgach”.

W końcu dojdziemy do tego, że będziemy sflashować oprogramowanie w taki sam sposób, jak na komputerach osobistych. Pobierz również aplikacje. Szyj ręce, nogi, zmieniaj pazury, manipulatory.

Obejrzyj filmy „Jestem robotem”, ” Sztuczna inteligencja"," Gwiezdne Wojny.

Japończycy od dawna wdrażają swoje rozwiązania. Dlaczego jesteśmy gorsi? Mamy bardzo małą popularność. Znam kilku programistów. Licz na palcach. Robimy coś innego. Jesteśmy sprzedawcami. Kupujemy po prostu gotowe zestawy, roboty - zabawki i wszelakie śmieci.

Dlaczego nie rozwijamy tego:

Albo to:

Skończyłem swoje przemyślenia na głos. Porozmawiajmy o podłączeniu zegara czasu rzeczywistego DS1302 do Arduino.

Zegar czasu rzeczywistego DS1302

Kontroler Arduino nie posiada własnego zegara. Dlatego w razie potrzeby należy go uzupełnić o specjalny układ DS1302.

Do zasilania te płytki mogą korzystać z własnej baterii lub być zasilane bezpośrednio z płytki Arduino.

Tabela pinout:

Schemat połączeń z Arduino UNO:


Metoda programowania Arduino do współpracy z DS1302

Pamiętaj, aby pobrać aktualną bibliotekę z wiarygodnych źródeł.

Biblioteka umożliwia odczytywanie i zapisywanie parametrów w czasie rzeczywistym. Poniżej zamieszczam krótki opis:

#zawierać // Dołącz bibliotekę.
arduino_RTC OBIEKT ( NAZWA [, OUT_RST [, OUT_CLK [, OUT_DAT]]] ); // Utwórz obiekt.

Funkcjonować zaczynać();// Inicjalizacja modułu RTC.

Funkcjonować ustalony czas ( SEK[, MIN[, GODZINA[, DZIEŃ[, MIESIĄC[, ROK[, DZIEŃ]]]]]] ); // Ustaw czas.

Funkcjonować uzyskać czas([ LINIA ] ); // Czas czytania.

funkcjonować czas mrugania ( PARAMETR [CZĘSTOTLIWOŚĆ] ); // Powoduje, że funkcja gettime "miga" określony parametr czasu.

funkcjonować Kropka ( MINUTY ); // Określa minimalny okres dostępu do modułu w minutach.

Zmienny sekundy// Zwraca sekundy od 0 do 59.

Zmienny minuty// Zwraca minuty od 0 do 59.

Zmienny godziny// Zwraca godziny od 1 do 12.

Zmienny godziny// Zwraca godziny od 0 do 23.

Zmienny południe// Zwraca południe 0 lub 1 (0-am, 13:00).

Zmienny dzień// Zwraca dzień miesiąca od 1 do 31.

Zmienny dzień powszedni// Zwraca dzień tygodnia od 0 do 6 (0 to niedziela, 6 to sobota).

Zmienny miesiąc// Zwraca miesiąc od 1 do 12.

Zmienny rok// Zwraca rok od 0 do 99.

Piszemy prosty program. Ustawienie aktualnego czasu w module RTC (DS1302):

Arduino

#zawierać iarduino_RTC time (RTC_DS1302,6,7,8); void setup() ( delay(300); Serial.begin(9600); time.begin(); time.settime(0,51,21,27,10,15,2); // 0 sek, 51 min, Wtorek, 21 października 2015 ) void loop()( if(millis()%1000==0)( // jeśli minęła 1 sekunda Serial.println(time.gettime("dmY, H:i: s, D ")); // wyświetl opóźnienie czasowe(1); // wstrzymaj na 1 ms, aby nie wyświetlać czasu kilka razy w ciągu 1 ms) ) )

#zawierać

iarduino_RTCtime(RTC_DS1302 , 6 , 7 , 8 ) ;

pusta konfiguracja()(

opóźnienie(300) ;

Seryjny. początek(9600) ;

czas. początek();

czas. czas wiązania (0 , 51 , 21 , 27 , 10 , 15 , 2 ) ; // 0 sek, 51 min, 21:00, wtorek, 27 października 2015

pusta pętla()(

jeśli (milis () % 1000 == 0 ) ( // jeśli minęła 1 sekunda

Seryjny. println (czas . gettime ("d-m-Y, H:i:s, D" ) ) ; // czas wyjścia

opóźnienie(1); // pauza na 1ms, aby nie wyświetlać czasu kilka razy w ciągu 1ms

Odczytujemy aktualny czas z modułu RTC (DS1302) i wyświetlamy go w " Port szeregowy" :

#zawierać iarduino_RTC time (RTC_DS1302,6,7,8); void setup() ( delay(300); Serial.begin(9600); time.begin(); ) void loop()( if(millis()%1000==0)( // jeśli upłynęła 1 sekunda Serial. println (time.gettime("dmY, H:i:s, D")); // wyświetl opóźnienie czasowe(1); // pauza na 1 ms, aby nie wyświetlać czasu kilka razy w ciągu 1 ms ) )

wyświetlacz LCD- częsty gość w projektach arduino. Ale w skomplikowanych układach możemy mieć problem z brakiem portów Arduino ze względu na konieczność podłączenia ekranu, który ma dużo pinów. Wyjściem w tej sytuacji może być: I2C/IIC adapter, który łączy prawie standardowy ekran Arduino 1602 z płytami Uno, Nano lub Mega za pomocą zaledwie 4 pinów. W tym artykule zobaczymy jak podłączyć ekran LCD z interfejsem I2C, jakie biblioteki można wykorzystać, napiszemy krótki przykładowy szkic i przeanalizujemy typowe błędy.

Wyświetlacz ciekłokrystaliczny LCD 1602 jest dobry wybór do wyprowadzania ciągów znaków w różnych projektach. Jest niedrogi, istnieją różne modyfikacje z różne kolory podświetlenia, możesz w prosty sposób pobrać gotowe biblioteki do szkiców Arduino. Ale główną wadą tego ekranu jest to, że wyświetlacz ma 16 cyfrowych pinów, z czego co najmniej 6. Dlatego używanie tego ekranu LCD bez i2c nakłada poważne ograniczenia na płytki Arduino Uno lub Nano. Jeśli kontakty nie wystarczą, będziesz musiał kupić Płytka Arduino Mega lub zapisz kontakty, m.in. podłączając wyświetlacz przez i2c.

Krótki opis pinów LCD 1602

Przyjrzyjmy się bliżej pinom LCD1602:

Każdy z wniosków ma swój cel:

  1. uziemienie GND;
  2. Zasilanie 5 V;
  3. Ustawianie kontrastu monitora;
  4. Polecenie, dane;
  5. Zapisywanie i odczytywanie danych;
  6. włączać;

7-14. Linie danych;

  1. Plus podświetlenie;
  2. Minus podświetlenie.

Specyfikacje wyświetlacza:

  • Symboliczny typ wyświetlania, możliwe jest ładowanie symboli;
  • Światła ledowe;
  • Kontroler HD44780;
  • Napięcie zasilania 5V;
  • Formatuj 16x2 znaki;
  • Zakres temperatur pracy od -20C do +70C, zakres temperatur przechowywania od -30C do +80C;
  • Kąt widzenia 180 stopni.

Schemat podłączenia LCD do płytki Arduino bez i2C

Standardowy schemat podłączenia monitora bezpośrednio do mikrokontrolera Arduino bez I2C jest następujący.

Ze względu na dużą liczbę podłączanych styków może nie wystarczyć miejsca na połączenie niezbędnych elementów. Użycie I2C zmniejsza liczbę przewodów do 4, a zajętych pinów do 2.

Gdzie kupić ekrany i2c 1602 dla arduino

Ekran LCD 1602 jest dość popularny, więc bez problemu można go znaleźć zarówno w krajowych sklepach internetowych, jak i na zagranicznych serwisach. Oto kilka linków do najbardziej dostępnych opcji:

  • Wariant zwykłego wyświetlacza od dość znanego sprzedawcy Wavgat w cenie poniżej 100 rubli.
  • Komplet ekranu i adaptera i2c (trzeba go samemu przylutować). Cena - poniżej 200 rubli
  • Ekran i2c shield - moduł LCD 1602 z przyciskami sterującymi i płytką rozszerzeń.

Opis protokołu I2C

Zanim omówimy podłączenie wyświetlacza do arduino za pomocą adaptera i2c, porozmawiajmy krótko o samym protokole i2C.

I2C / IIC(Inter-Integrated Circuit) to protokół pierwotnie stworzony do łączenia układów scalonych w urządzeniu elektronicznym. Rozwój należy do firmy Philips. Protokół i2c opiera się na wykorzystaniu szyny 8-bitowej potrzebnej do łączenia bloków w elektronice sterującej oraz systemu adresowania, dzięki któremu można komunikować się z kilkoma urządzeniami po tych samych przewodach. Po prostu przesyłamy dane do jednego lub drugiego urządzenia, dodając identyfikator pożądanego elementu do pakietów danych.

Najbardziej prosty obwód I2C może zawierać jedno urządzenie nadrzędne (najczęściej jest to mikrokontroler Arduino) oraz kilka urządzeń podrzędnych (np. wyświetlacz LCD). Każde urządzenie ma adres z zakresu od 7 do 127. W tym samym schemacie nie powinno być dwóch urządzeń o tym samym adresie.

Płyta Arduino obsługuje sprzętowo i2c. Możesz użyć pinów A4 i A5 do podłączenia urządzeń korzystających z tego protokołu.

Praca z I2C ma kilka zalet:

  • Do działania potrzebne są tylko 2 linie - SDA (linia danych) i SCL (linia zegarowa).
  • Podłączenie dużej liczby wiodących urządzeń.
  • Skrócenie czasu opracowywania.
  • Do sterowania całym zestawem urządzeń potrzebny jest tylko jeden mikrokontroler.
  • Możliwa liczba mikroukładów podłączonych do jednej magistrali jest ograniczona jedynie maksymalną wydajnością.
  • Wysoki stopień bezpieczeństwa danych dzięki specjalnemu filtrowi przeciwprzepięciowemu wbudowanemu w obwody.
  • Prosta procedura diagnozowania pojawiających się awarii, szybkie rozwiązywanie problemów.
  • Magistrala jest już zintegrowana z samym Arduino, więc nie ma potrzeby opracowywania dodatkowego interfejsu magistrali.

Niedogodności:

  • Na linii obowiązuje limit pojemnościowy - 400 pF.
  • Trudności w programowaniu kontrolera I2C, jeśli na magistrali jest kilka różnych urządzeń.
  • Na w dużych ilościach urządzeń, trudno jest zlokalizować awarię, jeśli jedno z nich błędnie ustawi stan niskiego poziomu.

Moduł i2c dla Arduino LCD 1602

Najszybszym i najwygodniejszym sposobem wykorzystania wyświetlacza i2c w arduino jest zakup gotowego ekranu z wbudowaną obsługą protokołów. Ale te ekrany nie są zbyt duże i nie są tanie. Ale ogromna liczba różnych standardowych ekranów została już wydana. Dlatego obecnie najbardziej przystępną i popularną opcją jest zakup i korzystanie z osobnego modułu I2C - adaptera, który wygląda tak:

Z jednej strony modułu widzimy piny i2c - uziemienie, zasilanie i 2 do przesyłania danych. Na drugim adapterze widzimy zewnętrzne złącza zasilania. No i oczywiście na płytce jest wiele pinów, za pomocą których moduł jest przylutowany do standardowych pinów ekranu.


Wyjścia I2c służą do połączenia z płytką Arduino. W razie potrzeby podłącz zewnętrzne zasilanie oświetlenia. Dzięki wbudowanemu trymerowi możemy regulować regulowane wartości kontrastu J

Na rynku można znaleźć moduły LCD 1602 z już wlutowanymi adapterami, ich użytkowanie jest maksymalnie uproszczone. Jeśli kupiłeś osobny adapter, będziesz musiał go wstępnie przylutować do modułu.

Podłączanie ekranu LCD do Arduino przez I2C

Do połączenia potrzebna jest sama płytka Arduino, wyświetlacz, płytka stykowa, przewody połączeniowe oraz potencjometr.

Jeśli używasz specjalnego oddzielnego adaptera i2c, musisz go najpierw przylutować do modułu ekranu. Trudno tam popełnić błąd, można kierować się takim schematem.


Monitor LCD z obsługą i2c jest podłączony do płyty za pomocą czterech przewodów - dwóch przewodów do danych, dwóch przewodów do zasilania.

  • Pin GND jest połączony z GND na płytce.
  • Pin VCC to 5V.
  • SCL jest podłączony do pinu A5.
  • SDA jest podłączony do pinu A.

I to wszystko! Żadnych pajęczyn drutów, w których bardzo łatwo się pogubić. Jednocześnie możemy po prostu powierzyć bibliotekom całą złożoność implementacji protokołu i2C.

Biblioteki do pracy z wyświetlaczem LCD i2c

Aby połączyć Arduino z LCD 1602 poprzez magistralę I2C, potrzebne będą co najmniej dwie biblioteki:

  • Biblioteka Wire.h do pracy z I2C jest już dostępna w program standardowy IDE Arduino.
  • Biblioteka LiquidCrystal_I2C.h, która zawiera szeroką gamę poleceń do sterowania monitorem za pośrednictwem magistrali I2C i pozwala na łatwiejsze i skrócenie szkicu. Należy dodatkowo zainstalować bibliotekę Po podłączeniu wyświetlacza należy dodatkowo zainstalować bibliotekę LiquidCrystal_I2C.h

Po podłączeniu do szkicu wszystkich potrzebnych bibliotek tworzymy obiekt i możemy korzystać ze wszystkich jego funkcji. W celu przetestowania załadujmy następujący standardowy szkic z przykładu.

#zawierać #zawierać // Połączenie z biblioteką //#include // Podłączanie alternatywnej biblioteki LiquidCrystal_I2C lcd(0x27,16,2); // Określ adres I2C (najczęstsza wartość), a także parametry ekranu (w przypadku LCD 1602 - 2 linie po 16 znaków każda //LiquidCrystal_PCF8574 lcd(0x27); // Wariant dla biblioteki PCF8574 void setup( ) ( lcd.init (); // Zainicjuj wyświetlacz lcd.backlight(); // Podłącz podświetlenie lcd.setCursor(0,0); // Ustaw kursor na początku pierwszego wiersza lcd.print(" Hello"); // wpisz tekst w pierwszym wierszu lcd.setCursor(0,1); // ustaw kursor na początku drugiego wiersza lcd.print("ArduinoMaster"); // wpisz tekst w drugim wierszu ) void loop() ( )

Opis funkcji i metod biblioteki LiquidCrystal_I2C:

  • home() i clear() - pierwsza funkcja umożliwia powrót kursora na początek ekranu, druga również, ale jednocześnie usuwa wszystko, co było wcześniej na monitorze.
  • write(ch) - pozwala na wypisanie na ekranie pojedynczego znaku ch.
  • cursor() i noCursor() - pokaż/ukryj kursor na ekranie.
  • blink() i noBlink() - kursor miga/nie miga (jeśli jego wyświetlanie było wcześniej włączone).
  • display() i noDisplay() - pozwala włączyć/wyłączyć wyświetlanie.
  • scrollDisplayLeft() i scrollDisplayRight() - przewija ekran o jeden znak w lewo/w prawo.
  • autoscroll() i noAutoscroll() - pozwala włączyć/wyłączyć tryb autoscroll. W tym trybie każdy nowy symbol jest nagrywany w tym samym miejscu, zastępując to, co zostało wcześniej napisane na ekranie.
  • leftToRight() i rightToLeft() — Ustawia kierunek wyświetlanego tekstu — od lewej do prawej lub od prawej do lewej.
  • createChar(ch, bitmap) — Tworzy znak z kodem ch (0 - 7) przy użyciu tablicy bitmap bitmapowych do tworzenia punktów czerni i bieli.

Alternatywna biblioteka do pracy z wyświetlaczem i2c

W niektórych przypadkach podczas korzystania z określonej biblioteki z urządzeniami wyposażonymi w kontrolery PCF8574 mogą wystąpić błędy. W takim przypadku biblioteka LiquidCrystal_PCF8574.h może być oferowana jako alternatywa. Rozszerza LiquidCrystal_I2C, więc nie powinno być żadnych problemów z jego używaniem.

Problemy z połączeniem wyświetlacza lcd i2c

Jeśli po przesłaniu szkicu nic nie widzisz na wyświetlaczu, spróbuj wykonać następujące czynności.

Po pierwsze, możesz zwiększyć lub zmniejszyć kontrast monitora. Często postacie są po prostu niewidoczne ze względu na kontrast i tryb podświetlenia.

Jeśli to nie pomoże to sprawdź poprawność podłączenia styków, czy podświetlenie jest zasilane. Jeśli użyłeś osobnego adaptera i2c, sprawdź ponownie jakość lutowania styków.

Inną częstą przyczyną braku tekstu na ekranie może być błędny adres i2c. Spróbuj najpierw zmienić adres urządzenia w szkicu z 0x27 0x20 lub 0x3F. Różni producenci mogą mieć różne adresy domyślne. Jeśli to nie pomoże, możesz uruchomić szkic skanera i2c, który skanuje wszystkie podłączone urządzenia i określa ich adres brutalną siłą. Przykładowy szkic skanera i2c.

Jeśli ekran nadal nie działa, spróbuj odlutować adapter i podłączyć wyświetlacz LCD w zwykły sposób.

Wniosek

W tym artykule omówiliśmy główne kwestie wykorzystania ekranu LCD w złożonych projektach Arduino, gdy potrzebujemy zapisać wolne piny na płytce. Prosty i niedrogi adapter i2c pozwoli na podłączenie ekranu LCD 1602 zajmującego tylko 2 piny analogowe. W wielu sytuacjach może to być bardzo ważne. Płacenie za wygodę – trzeba użyć dodatkowy moduł- konwerter i biblioteka. Naszym zdaniem wcale wysoka cena dla wygody i zdecydowanie zalecamy korzystanie z tej funkcji w projektach.