Tft display ili9341 40 pin 8 bit mode

Обсуждаем контроллеры компании Atmel.
Ответить
Михаил_avr
Встал на лапы
Сообщения: 80
Зарегистрирован: Вс фев 21, 2021 13:01:40
Откуда: Прокопьевск

Tft display ili9341 40 pin 8 bit mode

Сообщение Михаил_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
Реклама
DimAlt
Вымогатель припоя
Сообщения: 576
Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:

Re: Tft display ili9341 40 pin 8 bit mode

Сообщение DimAlt »

Может подключаете не так? Например, данные подключены к DB0-7, а надо на DB8-15.
Реклама
Михаил_avr
Встал на лапы
Сообщения: 80
Зарегистрирован: Вс фев 21, 2021 13:01:40
Откуда: Прокопьевск

Re: Tft display ili9341 40 pin 8 bit mode

Сообщение Михаил_avr »

Нет подключены db8-15
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: Tft display ili9341 40 pin 8 bit mode

Сообщение slav0n »

ликбез.
для сброса бита надо писать так:

Код: Выделить всё

COMMAND_PORT &=~(1<<CS);
ohmycode!
primuss3.com
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6308
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Tft display ili9341 40 pin 8 bit mode

Сообщение Jack_A »

Код: Выделить всё

COMMAND_PORT|=(0<<RST);
Действительно - бессмысленное выражение. Если компилятор его не выкинет, то это будет означать в переводе на наши речи: "Нолик подвинуть на несколько позиций и прикошачить его по ИЛИ к такому-то биту" .
Ноль сколько куда хошь ни двигай - по ИЛИ он ничего не меняет.
Изображение
Реклама
Михаил_avr
Встал на лапы
Сообщения: 80
Зарегистрирован: Вс фев 21, 2021 13:01:40
Откуда: Прокопьевск

Re: Tft display ili9341 40 pin 8 bit mode

Сообщение Михаил_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);    
               
} 



Реклама
Ответить

Вернуться в «AVR»