Przejdź do głównej zawartości

Arduino i wyświetlacz LCD sterowany przez UART

Być może niektórzy z Was pamiętają mój moduł wyświetlacza sterowany przez port szeregowy. Fajna rzecz - jeśli wolno mi się w ten sposób pochwalić - pozwalająca ocalić cenne wyprowadzenia mikrokontrolera od "zajęcia" przez sterownik wyświetlacza zgodny z HD44780 i wysyłać dane do prezentacji na ekraniku LCD przez zaledwie dwie linie (w tym tylko jedno wyprowadzenie mikrokontrolera - TxD; druga linia to masa).
Odchodząc na chwilę od Noduino (choć właściwie można by pokombinować z wyświetlaczem i w tym kierunku - o ile Noduino na to pozwoli) postanowiłem sprawdzić, jak Leonardo poradzi sobie z moim wyświetlaczem. W tym celu pozwoliłem sobie zmodyfikować jeden z załączonych do IDE Arduino programów przykładowych i przygotować małe demko, którego kod źródłowy prezentuję poniżej:

/*
Demo "Znaki ASCII"
- modyfikacja programu "ASCIITable" z przykładów załączonych do IDE Arduino.
Program wyświetla w pętli kolejne znaki od "!" do "~" oraz ich kody ASCII
w systemie dziesiętnym, szesnastkowym i binarnym.
Dodatkowy sprzęt:
- moduł szeregowego wyświetlacza alfanumerycznego (http://wileczeknet.blogspot.com/2013/01/programowanie-avr-cz-7-mikroprocesorowy.html)
Podłączenie modułu:
- piny zasilania (+5V, GND) modułu do odpowiednich gniazd Arduino;
- RxD i TxD modułu do Tx1 i Rx1 (Digital1 i Digital0) Arduino.
Prędkość transmisji:
- 9600b/s
Pozostałe parametry portu UART - wartości domyślne.
*/
// Stałe używane przez mikroprocesorowy szeregowy sterownik wyświetlacza LCD
const byte Clean = 255;
const byte Cleft = 254;
const byte Cright = 253;
const byte Con = 252;
const byte Coff = 251;
const byte Cblink = 250;
const byte Cnoblink = 249;
// Odstęp czasowy pomiędzy wyświetlanymi kodami (w milisekundach)
const int odstep = 1000;
// LED pin 13 (na płytce)
const byte Led = 13;
void setup() {
// Inicjalizacja sprzętowego portu UART ATmegi
Serial1.begin(9600);
// Pin 13 jako wyjście
pinMode(Led, OUTPUT);
// Czyszczenie wyświetlacza, wyłączenie kursora i wyświetlenie nagłówka
Serial1.write(Clean);
Serial1.write(Coff);
delay(odstep/2);
Serial1.print("Tabela ASCII ->");
delay(odstep*2);
}
// kod pierwszego znaku
byte znak = 33;
void loop() {
// zapalenie LED
digitalWrite(Led, HIGH);
// wypisanie znaku w postaci rzeczywistej
Serial1.write(Clean);
Serial1.print("Znak: ");
Serial1.write(znak);
delay(odstep*2);
// wygaszenie LED
digitalWrite(Led, LOW);
// wypisanie kodów ASCII dziesiętnego, szesnastkowego i binarnego dla znaku
Serial1.write(Clean);
Serial1.print("d/h/b: ");
delay(odstep);
Serial1.write(Clean);
Serial1.print(znak);
Serial1.print("/");
Serial1.print(znak, HEX);
Serial1.print("/");
Serial1.println(znak, BIN);
delay(odstep);
// po wyświetleniu kodów tyldy - powrót do początku, czyli pierwszego znaku
if(znak == 126) {
znak = 32;
}
// następny znak
znak++;
}
view raw znaki_ascii.ino hosted with ❤ by GitHub

Zadaniem programu jest wyświetlanie kolejnych znaków ze zbioru podstawowego ASCII oraz ich kodów w systemie dziesiętnym, szesnastkowym i binarnym. Kod odrobinę udziwniony, ponieważ musiałem go dostosować do posiadanego wyświetlacza alfanumerycznego - jeden wiersz, szesnaście znaków, ale w logicznym podziale na dwa wiersze po osiem...

Projekcik oczywiście elegancko zadziałał, z czego wnioskuję, że mój moduł wyświetlacza z łączem UART jest zgodny z platformą Arduino :-)

Arduino ready ;D

Komentarze

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany. Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;) ...

Aktualizacja oprogramowania układowego w ESP-01 do najnowszej wersji NodeMCU

Oprogramowanie i projekt NodeMCU cieszą się niesłabnącym zainteresowaniem świata konstruktorów urządzeń IoT, zatem co jakiś czas warto odświeżyć sobie firmware w naszych płytkach ESP. Osobiście jestem przeciwnikiem zmienienia czegoś, co dobrze działa, tylko dla zasady czy z chęci cieszenia się świadomością posiadania najnowszej wersji, ale tym razem chodzi jednak o coś innego – zwiększenie funkcjonalności i zapewnienie poprawnego działania oraz kompatybilności z najnowszymi projektami i bibliotekami. W tytule tego artykułu jest mowa o najprostszych płytkach z układem ESP8266 – ESP-01 . To właśnie w oparciu o ten model opracowałem płytkę prototypową, o której pisałem w poprzednim rozdziale. Dotychczas wszystkie moje płytki ESP miały na pokładzie oprogramowanie NodeMCU w wersji 0.9.5 . Zorientowani choć trochę w temacie od razu zauważą (Google? Bing?), że wersja ta ma już co najmniej dwa lata... Najwyższy czas zatem na aktualizację.

Płytka prototypowa na bazie ESP8266 (ESP-01)

To nie jest kolejny artykuł traktujący od początku do... nieco dalej (bo na pewno nie do końca) o płytkach ESP8266 . Żeby się dowiedzieć, co to takiego, odwiedźcie proszę np. tę stronę (oraz wiele innych – poproście o pomoc Waszą ulubioną wyszukiwarkę): http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family . No ale żeby nie było, ESP8266 to układ zawierający na pokładzie wydajny mikrokontroler z rdzeniem RISC-owym, taktowany zegarem 40MHz (wersja, o której jest ten wpis) lub 80MHz, 512KB pamięci flash i podsystem komunikacji przez sieć WiFi . Jest powszechnie wykorzystywany jako swego rodzaju karta sieciowa do połączeń bezprzewodowych naszych urządzeń IoT , które budujemy w zaciszu domowych laboratoriów (i nie tylko). Układ montowany jest na płytkach występujących w kilku wersjach, różniących się przede wszystkim liczbą wyprowadzeń uniwersalnych, czyli GPIO – im większa liczba, tym większe możliwości wykorzystania układu (więcej urządzeń peryferyjnych itp.). Są też pewne ...