Ошибка базы данных WordPress: [Table './meandr_base/anzpz_usermeta' is marked as crashed and last (automatic?) repair failed]
SELECT user_id, meta_key, meta_value FROM anzpz_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC

Подключаем китайский LCD к ATMega16 — Меандр — занимательная электроника
Site icon Меандр — занимательная электроника

Подключаем китайский LCD к ATMega16

2,4-дюймовый TFT ЖК-дисплей (с сенсорным экраном)

1.37 контактов, левый крайний — первый

2.Распиновка шлейфа

 

Номер контакта

Определение

объеснение

1

DB0

Данные линий

2

DB1

Данные линий

3

DB2

Данные линий

4

DB3

Данные линий

5

GND

земля

6

VCC

Линия питания 3,3 В

7

#CS

Чип-сигнал выбора (активный низкий)

8

RS

Регистрация выбора

9

#WR

Запись сигнала (активный низкий)

10

#RD

Читайте сигнала (активный низкий)

11

NC

Пустая нога

12

TP_X+

Сенсорный экран X+

13

TP_Y+

Сенсорный экран Y+

14

TP_X-

Сенсорный экран X-

15

TP_Y-

Сенсорный экран Y-

16

LED_VCC

Светодиодная подсветка 3,3В

17

LED1_GND

Светодиодная подсветка

18

LED2_GND

Светодиодная подсветка

19

LED3_GND

Светодиодная подсветка

20

LED4_GND

Светодиодная подсветка

21

NC

Пустая нога

22

DB4

Линия данных

23

DB10

Линия данных

24

DB11

Линия данных

25

DB12

Линия данных

26

DB13

Линия данных

27

DB14

Линия данных

28

DB15

Линия данных

29

DB16

Линия данных

30

DB17

Линия данных

31

#RESET

Сброс (активный низкий)

32

VCC

Линия питания 3,3 В

33

VCC

Линия питания 3,3 В

34

GND

Земля

35

DB5

Линия данных

36

DB6

Линия данных

37

DB7

Линия данных

 3.Шина данных 8/16

По умолчанию экран после завода, 16 битные:
Высокий 8: DB17- DB10,
Низкий 8: DB7- DB0
Если вы хотите работать в 8-битном режиме, с задней части шлейфа удаляется R2 резистор, припаивается к позицыи R1.
При работе в восьми режимах, шины данных: DB17- DB10

 

4.внутренний драйвер IC
В икран встроен драйвер OTM3225A или ILI9325 они взаимоземеняемые в интернете есть даташиты.

 

5. тестовая схема
Я выбрал микроконтроллер AVR Atmega16A, внешний кварцевый резонатор 16МГц и использавал 8 битнцю шину.

 

 

 5.1.Программное обеспечение:

инициализация =

 

5.2.Программный код и описание

Программный код на C, среда разработки: AVR Studio4.18 + WinAVR 20100110 (AVR GCC)

 

5.2.1.MCU порт инициализация:

 

#defineF_CPU 16000000UL

#include<avr\io.h>

#include<avr\interrupt.h>

#include<util\delay.h>

#define RESET_1 PORTD |= _BV(PD5)

#define RESET_0 PORTD &= ~_BV(PD5)

#define CS_1 PORTC |= _BV(PC5)

#define CS_0 PORTC &= ~_BV(PC5)

#define RS_1 PORTC |= _BV(PC4)

#define RS_0 PORTC &= ~_BV(PC4)

#define WR_1 PORTC |= _BV(PC3)

#define WR_0 PORTC &= ~_BV(PC3)

#define RD_1 PORTC |= _BV(PC2)

#define RD_0 PORTC &= ~_BV(PC2)

/**************/

/* инициализация */

/**************/

init_IO(void)

{

DDRA = _BV(PA4) | _BV(PA3) | _BV(PA1);

DDRB = 0XFF;

DDRC = 0XFF;

DDRD = _BV(PD5);

RESET_1;

CS_1;

RS_0;

WR_1;

RD_1;

}

// End of init_IO( )

 

 

5.2.2. LCD_reset

 

/**************/

LCD_reset */

/**************/

LCD_reset(void)

{

RESET_0;

_delay_ms(50); // В соответствии с delay.h, более60 мс

_delay_ms(50);

RESET_1;

_delay_ms(50);

_delay_ms(50);

}

// End of LCD_reset( )

5.2.3 ЖК-экран инициализация/****************/

 

/* ЖК инициализации */

 

/****************/

// Описание: Эта функция кодавсе ссылки на информацию в Интернете, параметры

//остаоись нетронутыми

void LCD_init(void)

{

/************* Start Initial Sequence **********/

LCD_WR_CMD(0xE3, 0x3008); // Set internal timing

LCD_WR_CMD(0xE7, 0x0012); // Set internal timing

LCD_WR_CMD(0xEF, 0x1231); // Set internal timing

LCD_WR_CMD(0x01, 0x0100); // set SS and SM bit

LCD_WR_CMD(0x02, 0x0700); // set 1 line inversion

LCD_WR_CMD(0x03, 0x1030); // set GRAM write direction and BGR=1.

LCD_WR_CMD(0x04, 0x0000); // Resize register

LCD_WR_CMD(0x08, 0x0202); // set the back porch and front porch

LCD_WR_CMD(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0]

LCD_WR_CMD(0x0A, 0x0000); // FMARK function

LCD_WR_CMD(0x0C, 0x0000); // RGB interface setting

LCD_WR_CMD(0x0D, 0x0000); // Frame marker Position

LCD_WR_CMD(0x0F, 0x0000); // RGB interface polarity

/*************Power On sequence ****************/

LCD_WR_CMD(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB

LCD_WR_CMD(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]

LCD_WR_CMD(0x12, 0x0000); // VREG1OUT voltage

LCD_WR_CMD(0x13, 0x0000); // VDV[4:0] for VCOM amplitude

_delay_ms(50); // Dis-charge capacitor power voltage

_delay_ms(50);

_delay_ms(50);

_delay_ms(50);

LCD_WR_CMD(0x10, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB

LCD_WR_CMD(0x11, 0x0227); // R11h=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]

_delay_ms(50); // Delay 50ms

LCD_WR_CMD(0x12, 0x001C); // External reference voltage= Vci;

_delay_ms(50); // Delay 50ms

LCD_WR_CMD(0x13, 0x1800); // R13=1200 when R12=009D;VDV[4:0] for VCOM amplitude

LCD_WR_CMD(0x29, 0x001C); // R29=000C when R12=009D;VCM[5:0] for VCOMH

LCD_WR_CMD(0x2B, 0x000D); // Frame Rate = 91Hz

_delay_ms(50); // Delay 50ms

LCD_WR_CMD(0x20, 0x0000); // GRAM horizontal Address

LCD_WR_CMD(0x21, 0x0000); // GRAM Vertical Address

/************Adjust the Gamma Curve************/

LCD_WR_CMD(0x30, 0x0007);

LCD_WR_CMD(0x31, 0x0302);

LCD_WR_CMD(0x32, 0x0105);

LCD_WR_CMD(0x35, 0x0206);

LCD_WR_CMD(0x36, 0x0808);

LCD_WR_CMD(0x37, 0x0206);

LCD_WR_CMD(0x38, 0x0504);

LCD_WR_CMD(0x39, 0x0007);

LCD_WR_CMD(0x3C, 0x0105);

LCD_WR_CMD(0x3D, 0x0808);

/************Set GRAM area ************/

LCD_WR_CMD(0x50, 0x0000); // Horizontal GRAM Start Address

LCD_WR_CMD(0x51, 0x00EF); // Horizontal GRAM End Address

LCD_WR_CMD(0x52, 0x0000); // Vertical GRAM Start Address

LCD_WR_CMD(0x53, 0x013F); // Vertical GRAM Start Address

LCD_WR_CMD(0x60, 0xA700); // Gate Scan Line

LCD_WR_CMD(0x61, 0x0001); // NDL,VLE, REV

LCD_WR_CMD(0x6A, 0x0000); // set scrolling line

/************ Partial Display Control ************/

LCD_WR_CMD(0x80, 0x0000);

LCD_WR_CMD(0x81, 0x0000);

LCD_WR_CMD(0x82, 0x0000);

LCD_WR_CMD(0x83, 0x0000);

LCD_WR_CMD(0x84, 0x0000);

LCD_WR_CMD(0x85, 0x0000);

/************ Panel Control ************/

LCD_WR_CMD(0x90, 0x0010);

LCD_WR_CMD(0x92, 0x0000);

LCD_WR_CMD(0x93, 0x0003);

LCD_WR_CMD(0x95, 0x0110);

LCD_WR_CMD(0x97, 0x0000);

LCD_WR_CMD(0x98, 0x0000);

LCD_WR_CMD(0x07, 0x0133); // 262K color and display ON

}

// End of LCD_init( )

 

5.2.4.Функция LCD_WR_CMD ()Эта функция обратиться к временной диаграмме записи регистров (см. рисунок).(Временная диаграмма эталонный драйвер IC Datasheet) 

typedef unsigned charuchar;

typedef unsigned int uint;

#define WR_DATA PORTB

/******************************/

/* Описание функции: */

/* 16-битные параметры*/

/* индексный регистр.*/

/******************************/

/* параметр1:индекс, тип:8bit */

/* Параметры: адрес назначения регистров */

/*******************************

/* Параметр 2: величина тип: 16bit*/

/* Параметры: данные должны быть записаны */

/*******************************/

LCD_WR_CMD(uchar index,uint val)

{

RS_0; // Запись регистрации

CS_0; // Выбор кристалла действительна

// WR_DATA = 0x00; // Регистрация адреса 8bit

WR_0;

WR_1; / / Создание импульсов записи

WR_DATA= index; // Написать младшие 8

WR_0;

WR_1;

RS_1; // запись данных

WR_DATA = (uchar)(val>>8);// Запись 8

WR_0;

WR_1;

WR_DATA = (uchar)val; // Написать младшие 8

WR_0;

WR_1;

CS_1; // Выбор кристалла является недопустимым

}

// End of LCD_WR_CMD( )

5.2.5.Цветные полосы на дисплэе

После завершения инициализации выше, ЖК-дисплей в нормальном режиме работы.Следующий код демонстрирует равномерныйе цветные полоски на экране.

 

uint color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xd343};

LCD_test(void)

{

uint i,j;

LCD_WR_CMD(0x20,0); // Xкоордината

LCD_WR_CMD(0x21,0); // Yкоордината

LCD_WR_REG(0x22); // GRAM регистр выбран

for(i=0; i<8; i++)

for(j=0; j<9600; j++)

color[i]); // Запись данных в GRAM

}

 

 

5.2.6.Описание функции LCD_WR_REG( )/**********************/

/* Выбранный адрес index */

/* регистрировать */

/**********************/

LCD_WR_REG(uchar index)

{

RS_0;

CS_0;

WR_0;

WR_1;

WR_DATA= index;

WR_0;

WR_1;

CS_1;

}

// End of LCD_WR_REG( )

5.2.7.Описание функций LCD_WR_DATA( )/**********************/

/* Записать 16bit данных */

/**********************/

LCD_WR_DATA(uint val)

{

RS_1;

CS_0;

WR_DATA= val8;

WR_0;

WR_1;

WR_DATA = val;

WR_0;

WR_1;

CS_1;

RS_0;

}

// End of LCD_WR_DATA( )

Как видно, в самом деле, функция LCD_WR_REG(index)и LCD_WR_DATA(val) работают совместно c функцией LCD_WR_CMD(index, val). Цель разделяя их для того, чтобы ускорить запись в GRAM. Конечно есть и другой способ.

 

5.2.7.Для более глубокого понимания, как работать с экраном, пожалуйста, прочитайте спецификацию, а также в Интернете открытый исходный код

Кодекса. Некоторые плюсы экрана:
— ЖК-дисплей с разрешением 240×320, по умолчанию начало координат в верхнем левом углу экрана
— GRAM принемает формат данных для RGB565
— Скорость запеси быстрее (# WR записи импульсов) ≥ 8 МГц
-Я могу установить окно быстро назначенный области экрана

 

 

Exit mobile version