Lcd12864 arduino spi

RoboCraft

Всем привет!
Настоящая инструкция является вольным переводом известной статьи, расположенной на портале Arduino.cc.

Подключение графического жк экрана к Arduino, является довольно простой задачей, что мы и докажем. Возьмём графический экран, например WinStar WG12864B-TML-T, и загрузим специальную библиотеку по работе с ЖК экранами GLCD v3 в Arduino IDE. Для установки библиотеки, её нужно просто скопировать в папку librares, которая находится в папке Arduino IDE.
Теперь приступим к подключению экранчика. Так как существует огромное множество различных экранчиков, то и подключение у них может быть разное. Распределим все экраны на четыре варианта:

Вариант A:
HDM64GS12L-4
Crystalfontz CFAG12864B
Sparkfun LCD-00710CM
NKC Electronics LCD-0022
WinStar WG12864B-TML-T

Вариант B:
HDM64GS12L-5
Lumex LCM-S12864GSF
Futurlec BLUE128X64LCD
AZ Displays AGM1264F
Displaytech 64128A BC
Adafruit GLCD
DataVision DG12864-88
Topway LM12864LDW
Satistronics RT12864J-1
Digitron SG12864J4
Неизвестный производитель QY-12864F
Неизвестный производитель TM12864L-2
Неизвестный производитель 12864J-1
Huahong Technology Ltd LMG12864 (LMG-SSC12A64DRY(-H) вариант, жёлто-зелёная подсветка, чёрное на зелёном)
Sure Electronics DE-LM105
Wide.hk «LCD Shield Pro + GLCD 128×64 LCD»

Вариант C:
Shenzhen Jinghua Displays Co Ltd. JM12864

Вариант D:
Дисплеи с разрешением 192 x 64:
Производитель/Модель/Чип/Ток
Wintek- Cascades/WD-G1906G/KS0108B/-7.5 to -10v
Wintek — GEN/WD-G1906G/KS0108B/-7.5 to -10v
Wintek/WD-G1906G/S6B0108A/-9.5 to -12v
TECDIS/Y19061/HD61202/-7.5 to -10v
Varitronix/MGLS19264/HD61202/-8.5 to -10.5v

Подсветке требуется 4.7v, рекомендуется использовать резистор на 10-12 Ом от +5v.
В ks0108_Manual_Config.h требуется изменить разрешение как показано ниже.
1. define DISPLAY_WIDTH 192
2. define DISPLAY_HEIGHT 64
и
1. elif glcd_CHIP_COUNT == 3
2. define glcd_CHIP0 glcdCSEL1,LOW, glcdCSEL2,LOW
3. define glcd_CHIP1 glcdCSEL1,LOW, glcdCSEL2,HIGH
4. define glcd_CHIP2 glcdCSEL1,HIGH, glcdCSEL2,LOW

В зависимости от используемого экранчика, осуществляем подключение к Arduino, согласно таблице:

Если вы используете экранчик WinStar WG12864B-TML-T, то поменяйте местами подключения 12 и 13 порта, получится что 12 пин подключается к alog1, а 13 пин подключается к alog0. Для подключения подсветки, используйте резистор на

250 Ом. Пример подключения экранчика к плате Arduino:

Теперь настало время написать тестовый код.

Если вы всё подключили правильно, то после загрузки программы на устройство на экране должна появиться анимация и подсчёт кадров.
Прежде чем заливать программу в Arduino, отсоедините экранчик от платы, чтобы прошивка прошла без сбоев (у меня процесс не пошёл, пока не отсоединил экранчик).

Для работы с экранчиком предназначен ряд процедур.
GLCD.Init(invert) — инициализация структур для нормального или инверсного режима.
GLCD.GotoXY(x,y) — перемещает курсор в указанную позицию. 0,0 — позиция крайнего верхнего левого пикселя.
GLCD.ClearScreen() — очистка экрана.
// Графические функции (цвет WHITE чистит пиксели, цвет BLACK заполняют пиксели)
GLCD.DrawCircle(x, y, radius, color) — рисование окружности с центром в позиции x,y.
GLCD.DrawLine(x1,y1,x2,y2,color) — рисование линии из точки x1,y1 в x2,y2.
GLCD.DrawVertLine(x, y, length, color) — рисование вертикальной линии
GLCD.DrawHoriLine(x, y, length, color) — рисование горизонтальной линии
GLCD.DrawRect(x, y, width, height, color) — рисование прямоугольника
GLCD.DrawRoundRect(x, y, width, height, radius, color) — рисование прямоугольника с закруглёнными краями
GLCD.FillRect(x, y, width, height, color) — рисование заполненного прямоугольника
GLCD.InvertRect(x, y, width, height) — инвертирование пикселей в области заданного прямоугольника
GLCD.SetInverted(invert) — установка режима рисования в инвертированном режиме
GLCD.SetDot(x, y, color) — рисование точки
GLCD.DrawBitmap(bitmap, x, y, color) — рисование картинки в указанном месте
// Функции по работе с текстом
GLCD.SelectFont(font, color ) — выбор шрифта, по умолчанию чёрного цвета
GLCD.PutChar(character) — печать символа в текущую позицию
GLCD.Puts(string) — печать строки в текущей позиции курсора
GLCD.Puts_P(string) — напечатать строку из программной памяти, в текущую позицию курсора
GLCD.PrintNumber(number) — печать цифры в текущую позицию курсора
GLCD.CursorTo(x, y) — перевод курсора в желаемую позицию
Вот и всё! Вместе с библиотекой поставляется набор интересных примеров, которые безусловно помогут вам в вашей работе!

Вместе с библиотекой идёт целый ряд интересных примеров, советую ознакомиться! 😉

Источник

LCD12864 SPI Communication For Arduino

August 15, 2018 By Adeept 29,710

The number of UNO or mega2560 IO above ports are limited. We often need a lot of IO resources when do some complex experiments. On a blog we use the LCD12864 parallel communication interface which occupies a lot of IO resources. In order to save the UNO and mega2560 the IO resources, Adeept uses a SPI communication
We provide the AdeeptLCD12864RSPI library which is easy to control with the LCD12864.
Components
– 1 * Adeept UNO R3 Board
– 1 * LCD 12864 Module
– 1 * Breadboard
– 1 * USB Cable
– 2 * Male To Male Jumper Wires
– 8 * Male To Female Jumper Wires

Experimental Principle

SPI12864 SPI communication timing diagram

Experimental Procedures
Step 1: Build the circuit

Step 2: Program AdeeptLCD12864SPI.ino Adeept_LCD12864RSPI Library Link:AdeeptLCD12864RSPI

Step 3: Compile and download the sketch to the UNO R3 board.

Источник

Графический дисплей 128×64 / I²C: инструкция, примеры использования и документация

Используйте графический дисплей 128×64 / I²C для вывода текста, отрисовки графиков и отображения простых картинок. Монохромный экран выполнен по технологии LCD c разрешением 128×64 пикселей.

Графические дисплеи применяются в домашних охранных системах, робототехнике, МФУ-устройствах, вендинговых автоматах и турникетах общественного транспорта.

Дисплей похвастается интерфейсом I²C, а это значит можно забыть про вермишель из проводов. Для общения с микроконтроллером понадобится всего два сигнальных провода.

Примеры работы для Arduino

Мозгом для проекта выступит платформа Arduino Uno.

Подключение и настройка

Для начала необходимо собрать железо и выполнить программную настройку.

Что понадобится

Схема подключения

Контакт дисплея Контакт Arduino
1 VCC 5V
2 GND GND
3 SCL SCL
4 SDA SDA

Программная настройка

Вывод изображений

Выведем на экран дисплея монохромное изображение. Для этого воспользуйтесь графическим редактором GIMP и преобразуйте исходную картинку в текстовый массив чисел .h .

Основные правила при конвертации изображения:

Элементы дисплея

Дисплей

Дисплей MT-12864K выполнен на монохромной жидкокристаллической матрице с разрешением 128×64 пикселей. Каждый пиксель поддерживает только два состояния: включён или выключен, 1 или 0, true или false.

Матрица экрана подключена к драйверу дисплея, который выполняет роль посредника между экраном и управляющим микроконтроллером.

Драйвер дисплея

В систему драйвера входит три чипа: два контроллера RW1065I и один регистр управления INF8475A.

Контроллер RW1065I

RW1065I LCD Segment Common Driver — это контроллер сегментов с драйвером общих линий для управления матрицей дисплея с разрешением 64×32 пикселя. Для управления графическим дисплеем разрешением 128×64 пикселей, требуется два таких чипа. Первый RW1065I для управления левой половиной сегментов SEG1–SEG64 с общими линиями COM1–COM32, а второй RW1065I для управления правой половиной сегментов SEG65–SEG128 с общими линиями COM33–COM64.

Доступ к каждому контроллеру осуществляется по интерфейсу I²C с заданными I²C-адресами. На плате дисплея есть возможность сменить адреса контроллеров RW1065I. Это даёт возможность подключить к управляющей плате два дисплея одновременно и выводить на каждый экран различные данные, при этом количество занятых пинов останется прежним.

Для смены адресов контроллеров RW1065I на обратной стороне дисплея установлен переключатель Addr1 с контактными площадками R5 и R6 .

Капнув припоем на соответствующие контактные площадки, можно получать две разных группы I²C-адресов:

Addr1
R5 R6 Адрес RW1065I #1 Адрес RW1065I #2
L H 0x3C (по умолчанию) 0x3D (по умолчанию)
H L 0x3E 0x3F

Для управления контрастности и яркости на двух дисплей отдельно, необходимо также сменить адрес вспомогательного контроллера INF8475A.

Регистр управления INF8475A

INF8475A Driver — это вспомогательный контроллер для программной регулировки контрастности дисплея, яркость подсветки и других вспомогательных функций.

Доступ к вспомогательному контроллеру осуществляется по интерфейсу I²C с заданными I²C-адресом. На плате дисплея есть возможность сменить адрес регистра RW1065I. Это даёт возможность подключить к управляющей плате два дисплея одновременно и управлять контрастностью/яркостью каждого экрана отдельно, при этом количество занятых пинов останется прежним.

Для смены адреса вспомогательного контроллера INF8475A на обратной стороне дисплея установлен переключатель Addr2 с контактными площадками R17 и R18 .

Капнув припоем на соответствующие контактные площадки, можно получать два разных I²C-адреса:

Addr2
R17 R18 Адрес INF8475A
L H 0x3B (по умолчанию)
H L 0x3A

Для вывода на каждый экран различных данных, необходимо также сменить адреса контроллеров RW1065I.

Контакты подключения

На плате дисплея выведено 4 контакта для подключения питания и взаимодействия с управляющей электроникой.

Источник

An 128×64 graphic LCD display with ST7920 controller for the Arduino, displaying temperature and relative humidity

by Floris Wouterlood – The Netherlands – August 11, 2017

Summary
Graphic 128×64 LCD displays are based on (monochrome) LCD technology, yet they offer interesting graphical capabilities because every pixel is individually addressable. These displays are more complicated to program than the ‘common’ 16×2 or 20×4 LCD displays that present two or four rows of fixed character positions. The payoff is presentation with considerable flexibility thanks to the existence of built-in characters and, in software for the Arduino, an extensive u8g graphics library, i.e., the same library that supports display of graphics on OLED displays. Here we discuss the wiring of a ST7920 based 128×64 graphical 12864B LCD breakout display. This display is used to present data collected with a Dallas DS18B20 temperature sensor and a DHT11 relative humidity sensor.

Introduction
One of the solutions to display data collected with sensors attached to an Arduino microcontroller board is via a graphic 128×64 LCD display (Figure 1).Because the pixels are neatly arranged in 128 columns, 64 rows where every individual pixel is addressable these displays offer graphic capabilities where even images can be displayed (of course in monochrome). In this paper we discuss a very common type of 128×64 LCD display breakout based on the ST7920 controller. In spite of the impressive 20 pins that decorate this board only three pins of an Arduino are essential to make the display work, that is: in SPI mode. This modest ‘pin requirement’ makes the ST7920 display attractive for use in Arduino projects where other pins need to be reserved for all kinds of peripheral devices and actions. The screens are in vertical direction twice as big as 20×4 LCD displays so they offer good readability. The u8g library written by Oliver Kraus (‘Olikraus’) offers a selection of graphic functions, special characters and text fonts which makes the use of this kind of display extra attractive.

Figure 1: Wiring of a graphic 128×64 LCD display, in SPI mode. Only 3 digital pins of the Arduino are required to get output on the display: pins supporting the functions RS, R/W and E. Here, RS is wired to the Nano’s pin 12, R/W to pin 11 and E to pin 13. These pins need to be declared in the display constructor part of the sketch. The display shows a few of the graphical features offered by the u8g library: triangles, lines, circles, text.

Electronics and supplies
1x Arduino Nano microcontroller board, breadboard, Dupont jumper wires, 128×64 ST 7920 based LCD display breakout board, 1x 10 kΩ potentiometer, 1x 220 Ω resistor. Additional: 1x DHT11 temperature/ relative humidity sensor, 1x Dallas DS18B20 temperature sensor , 1 x 10kΩ resistor, 1x 4.7 k10kΩ resistor.

Wiring
The LCD display breakout board has 20 pins for connectivity, labeled GND, VCC, V0, RS, R/W, E, DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7, PSB, NC, RST, VOUT, BLA and BLK.
Figure 1 shows the basic connectivity via the SPI interface (SPI stands for Serial Peripheral Interface). GND is wired to GND of the Arduino, 5V to 5V, V0 to the wiper of a 10kΩ potentiometer (this is to adapt the contrast between characters or graphics of the LCD against the background), RS to pin 12, R/W to pin 11 and E to pin 13. The DB0 through DB7 pins of the breakout board need to be connected only if parallel mode is considered. PSB is connected to ground, while BLA needs 3.3V (background LED light of the LCD display) and BLK needs connection to GND. BLA can be connected to the 5V pin of the Arduino with a 220Ω resistor in series to reduce the voltage, or it can be connected directly to the 3.3V pin of the Arduino.

Confusion in nomenclature
While SPI protocols work with pins marked MISO, MOSI, CLK and CS, the ST7920 breakout board has completely different pin designations while it supports the SPI protocol. MISO and MOSI are necessary for master/slave mode and do not matter in the present construction. CLK (clock) and CS (chip select) are necessary and so are the data pin (R/W) and the pin marked PSB (the latter needs to be connected to GND – pin set continuously LOW to inform the display’s controller chip that it should work in serial mode (PSB HIGH means parallel mode).
Summarized: SPI’s CLK is supported by pin ‘E’ on the display breakout board, data is supported by pin ‘R/W’ and Chip Select by pin ‘CS’. PSB should be connected to GND and the wires to GND, VCC, VD, BLA and BLK supply power to the display breakout and regulate background light and contrast of pixels versus background.

Flexibility of pin selection
SPI is not hardware mapped, i.e., the protocol does not require specific pins of the Arduino. However, the pins of the Arduino used to connect CLK, data and CS need to be declared in the display constructor (see below). Use of different pins is allowed as long as they are correctly declared in the display constructor, e.g. pins 2, 3 and 4.
.
Sensors and their connectivity
A Dallas DS18B20 is an accurate temperature sensor that has three wires: 5V, GND and DATA. The DATA wire can be connected to an Arduino pin of choice; in this example pin 6 (Figure 2). A DHT 11 has four pins of which (seen from the front, from left to right, Fig. 2) the first pin needs to be connected with 5V, the second is DATA, in this example connected to pin 8 of the Arduino, the third pin is not connected while the fourth pin needs GND. While a DHT provides both relative humidity and temperature, the accuracy of a Dallas DS18B20 is much better. Apart from that this article was written to show that readings from two completely different sensors can easily be displayed on this LCD display. Note the pull up resistors that are necessary to get ‘clean’ data signals from the sensors.

Figure 2: Wiring of the LCD display breakout board is the same as in Figure 1, but now sensors have been connected to the Arduino: a Dallas DS18B20 – indicated with the pink circle, and a DHT 11 temperature/relative humidity sensor. Both sensors require for data relay only one pin of the Arduino (and of course 5V and GND). Note that all data: temperature and humidity of the DHT is transmitted via the DATA wire (colored white). Both sensors need a pull-up resistor: the DS18B20 won’t function without a 4.7 kΩ resistor while the DHT11 needs a 10 kΩ pull-up resistor

Sketch – notes
The sketch that provide all instructions to the Arduino makes use of the u8g library written by Oliver Kraus (nickname on the Arduino forum ‘Olikraus’). As the sketch (named ‘LCD_128x64_ST7920_DS18B20_DHT11’ can be downloaded from the website I discuss here the outline of the sketch and in more detail two tricky parts.

Libraries
necessary are:
U8glib.h — graphic display control library,
OneWire.h — single bus protocol for data transfer of the DS18B20 sensor
DallasTemperature.h — extra library with DS18B20 instructions.
DHT.h — library with DHT instructions

Declared variables
Both character strings, temp_string [5] and hum_string [5] are character arrays necessary in the sketch because of the peculiarity that the u8glib library does not offer instructions to display the values stored in variables. This library was apparently specifically written to display graphics. A trick to circumvent this limitation is to convert variables into character strings and display these on the LCD display. Values for temperature and humidity should be stored in float variables (because ‘floats’ support decimal notation).

Display constructor
Please note that this line contains the pin designations for CLK, R/W and CS. The line U8GLIB_ST7920_128X64 u8g (13, 11, 12, U8G_PIN_NONE); implies that CLK (pin marked E on the display breakout is connected to pin 13 of the Arduino, pin marked R/W on the display breakout to pin 11 of the Arduino, and pin marked RS on the display breakout with pin 12 of the Arduino.

DS18B20 device address
DeviceAddress: Every individual DS18B20 sensor has its own 8-byte identity, the Device Address. Via the one-wire protocol a sensor with a particular device address receives a call to release its data (temperature reading). This makes it possible to read multiple sensors via only one wire an one pin of the Arduino.
The device address of a DS18B20 can be found via a sketch ‘DS18B20_address_finder.ino’ – downloadable from the website. You may locate this sketch or a similar one on the internet.

Void loop() and void draw()
The essence of the Olikraus approach of displaying graphic matter via an Arduino with its very limited memory on a multipixel device like the ST7920 128×64 LCD display is to work with a cache whose contents is printed in the appropriate position in the 128×64 pixel space. In analogy with a journal publisher who works with two departments: Editorial and Print, a screen is constructed in void draw (), just like pages for a journal are made up by editorial staff in the publisher’s Editorial Department. When the screen is ready it is sent via the cache (the call ‘nextPage ()’ ) to the Print Department. This procedure is essential for saving precious memory.
All instructions for calculations and actions must therefore be located within the ‘Draw()’ subroutine.

Conversion of float variable to character string
The numerical value of the temperature measured by the DS18B20 is stored in the float variable ‘tempC’, which holds for instance a value 24.2 degrees centigrade. This numerical value is converted into four characters: ‘2’ – ‘4’ – ‘.’ and ‘2’, and stored in the character string ‘temp_string” via the instruction:

dtostrf(tempC, 3, 1, temp_string);

Immediately afterwards this string is drawn to screen beginning on pixel 33,37 with the instruction: u8g.drawStr(33,27, temp_string;

and the line is finished by adding: u8g.drawStr(70,27, “*C”);

The same is done for the value of the relative humidity as reported by the DHT11.

Sketches

DS18B20_address_finder.zip — sketch to find the device address of any Dallas DS18B20 sensor. Should be separately run.

LCD_128x64_ST7920_DS18B20_DHT11.zip — sketch that reads temperature and humidity from the respective sensors and displays on screen, as shown in Figure 2.

Источник

Adblock
detector