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:
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
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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++; | |
} |
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
Prześlij komentarz