Страница 1 из 1
Tft display ili9341 40 pin 8 bit mode
Добавлено: Чт июл 08, 2021 14:18:43
Михаил_avr
Спойлер
Код: Выделить всё
#define F_CPU 16000000UL //частота 16 мегагерц
#include <avr/io.h> // Подключим файл io.h
#include <util/delay.h> // Подключим файл delay.h
#define DATA PORTD
#define DATA_DDR DDRD
#define DC 0 // данные = 1 или команда = 0
#define CS 1 // выбор чипа (активный уровень низкий)
#define RST 2 // сброс
#define WR 3 // управление записью
#define RD 4 // управление чтением 1 = выкллючен
#define COMMAND_PORT PORTC
#define COMMAND_DDR DDRC
#define sleep_out 0x11
#define display_on 0x29
#define colmode 0x3a
#define reset 0x01
#define normal 0x13
#define MADCTL 0x36
#define BLACK 0x0000
#define WHITE 0xFFFF
#define CASET 0x2A
#define RASET 0x2B
#define RAMWR 0x2C
int main (void)
{
PORT_INI();
TFT_INI();
tft_send(CASET);
tft_write_data(0); //2 байта начального адреса
tft_write_data(70);
tft_write_data(0); //2 байта конечного адреса
tft_write_data(80);
tft_send(RASET);
tft_write_data(0); //2 байта начального адреса
tft_write_data(70);
tft_write_data(0); //2 байта конечного адреса
tft_write_data(80);
tft_send(RAMWR);
tft_write_data(BLACK>>8);
tft_write_data(BLACK);
}
//--------------------------------------------
void PORT_INI (void)
{
DATA_DDR=0b11111111;
COMMAND_DDR|=(1<<DC)|(1<<CS)|(1<<RST)|(1<<WR)|(1<<RD);
}
//--------------------------------------------
void tft_send (uint8_t command)
{
COMMAND_PORT|=(0<<CS);
COMMAND_PORT|=(0<<DC); //команда
COMMAND_PORT|=(0<<WR);
DATA=command;
_delay_us(5);
COMMAND_PORT|=(1<<WR);
COMMAND_PORT|=(1<<CS);
}
//--------------------------------------------
void tft_write_data (uint8_t data)
{
COMMAND_PORT|=(0<<CS);
COMMAND_PORT|=(1<<DC); //данные
COMMAND_PORT|=(0<<WR);
DATA=data;
_delay_us(5);
COMMAND_PORT|=(1<<WR);
COMMAND_PORT|=(1<<CS);
}
//--------------------------------------------
void TFT_INI (void)
{
//сброс
COMMAND_PORT|=(1<<RST);
_delay_ms(20);
COMMAND_PORT|=(0<<RST);
_delay_ms(120);
tft_send (reset);
_delay_ms(100);
tft_send (normal);
_delay_ms(2);
//1 пиксель 16 бит
tft_send (colmode);
tft_write_data(0x05);
_delay_ms(2);
tft_send (MADCTL);
tft_write_data(0b00001000); //rgb
_delay_ms(2);
//выход из спящего режима
tft_send (sleep_out);
_delay_ms(120);
//включаем дисплей
tft_send (display_on);
_delay_ms(2);
}
Здравствуйте вот никак не могу понять что здесь не так вроде все верно ,но не работает.Пин cs пробовал втыкать просто в землю не помогло реакции ни какой.Мк atmega328p
Re: Tft display ili9341 40 pin 8 bit mode
Добавлено: Пт июл 09, 2021 11:39:21
DimAlt
Может подключаете не так? Например, данные подключены к DB0-7, а надо на DB8-15.
Re: Tft display ili9341 40 pin 8 bit mode
Добавлено: Пт июл 09, 2021 12:55:23
Михаил_avr
Нет подключены db8-15
Re: Tft display ili9341 40 pin 8 bit mode
Добавлено: Пт июл 09, 2021 15:48:07
slav0n
ликбез.
для сброса бита надо писать так:
Re: Tft display ili9341 40 pin 8 bit mode
Добавлено: Пт июл 09, 2021 22:49:36
Jack_A
Действительно - бессмысленное выражение. Если компилятор его не выкинет, то это будет означать в переводе на наши речи: "Нолик подвинуть на несколько позиций и прикошачить его по ИЛИ к такому-то биту" .
Ноль сколько куда хошь ни двигай - по ИЛИ он
ничего не меняет.
Re: Tft display ili9341 40 pin 8 bit mode
Добавлено: Сб июл 10, 2021 05:22:07
Михаил_avr
Да, что-то я тут ступил. Исправил везде, но все равно ничего не меняется.
вот исправленый код
Спойлер
Код: Выделить всё
#define F_CPU 16000000UL //частота 16 мегагерц
#include <avr/io.h> // Подключим файл io.h
#include <util/delay.h> // Подключим файл delay.h
#define DATA PORTD
#define DATA_DDR DDRD
#define DC 0 // данные = 1 или команда = 0
#define CS 1 // выбор чипа (активный уровень низкий)
#define RST 2 // сброс
#define WR 3 // управление записью
#define RD 4 // управление чтением 1 = выкллючен
#define COMMAND_PORT PORTC
#define COMMAND_DDR DDRC
#define sleep_out 0x11
#define display_on 0x29
#define colmode 0x3a
#define reset 0x01
#define normal 0x13
#define MADCTL 0x36
#define BLACK 0x0000
#define WHITE 0xFFFF
#define CASET 0x2A
#define RASET 0x2B
#define RAMWR 0x2C
int main (void)
{
PORT_INI();
TFT_INI();
tft_send(CASET);
tft_write_data(0); //2 байта начального адреса
tft_write_data(70);
tft_write_data(0); //2 байта конечного адреса
tft_write_data(80);
tft_send(RASET);
tft_write_data(0); //2 байта начального адреса
tft_write_data(70);
tft_write_data(0); //2 байта конечного адреса
tft_write_data(80);
for (int g;g<100;g++)
{
tft_send(RAMWR);
tft_write_data(BLACK>>8);
tft_write_data(BLACK);
}
}
//--------------------------------------------
void PORT_INI (void)
{
DATA_DDR=0b11111111;
COMMAND_DDR|=(1<<DC)|(1<<CS)|(1<<RST)|(1<<WR)|(1<<RD);
}
//--------------------------------------------
void tft_send (uint8_t command)
{
COMMAND_PORT&=~(1<<CS);
COMMAND_PORT&=~(1<<DC); //команда
COMMAND_PORT&=~(1<<WR);
DATA=command;
_delay_us(5);
COMMAND_PORT|=(1<<WR);
COMMAND_PORT|=(1<<CS);
}
//--------------------------------------------
void tft_write_data (uint8_t data)
{
COMMAND_PORT&=~(1<<CS);
COMMAND_PORT|=(1<<DC); //данные
COMMAND_PORT&=~(1<<WR);
DATA=data;
_delay_us(5);
COMMAND_PORT|=(1<<WR);
COMMAND_PORT|=(1<<CS);
}
//--------------------------------------------
void TFT_INI (void)
{
//сброс
COMMAND_PORT|=(1<<RST);
_delay_ms(20);
COMMAND_PORT&=~(1<<RST);
_delay_ms(120);
tft_send (reset);
_delay_ms(120);
//выход из спящего режима
tft_send (sleep_out);
_delay_ms(120);
tft_send (normal);
_delay_ms(2);
//включаем дисплей
tft_send (display_on);
_delay_ms(2);
//1 пиксель 16 бит
tft_send (colmode);
tft_write_data(0x05);
_delay_ms(2);
tft_send (MADCTL);
tft_write_data(0b00001000); //rgb
_delay_ms(2);
}