Обсуждаем контроллеры компании Atmel.
Ответить

Tft display ili9341 40 pin 8 bit mode

Чт июл 08, 2021 14:18:43

Спойлер
Код:
#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

Может подключаете не так? Например, данные подключены к DB0-7, а надо на DB8-15.

Re: Tft display ili9341 40 pin 8 bit mode

Пт июл 09, 2021 12:55:23

Нет подключены db8-15

Re: Tft display ili9341 40 pin 8 bit mode

Пт июл 09, 2021 15:48:07

ликбез.
для сброса бита надо писать так:
Код:
COMMAND_PORT &=~(1<<CS);

Re: Tft display ili9341 40 pin 8 bit mode

Пт июл 09, 2021 22:49:36

Код:
COMMAND_PORT|=(0<<RST);

Действительно - бессмысленное выражение. Если компилятор его не выкинет, то это будет означать в переводе на наши речи: "Нолик подвинуть на несколько позиций и прикошачить его по ИЛИ к такому-то биту" .
Ноль сколько куда хошь ни двигай - по ИЛИ он ничего не меняет.

Re: Tft display ili9341 40 pin 8 bit mode

Сб июл 10, 2021 05:22:07

Да, что-то я тут ступил. Исправил везде, но все равно ничего не меняется.
вот исправленый код
Спойлер
Код:
#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);   
               
}



Ответить