Обсуждаем контроллеры компании Atmel.
Михаил_avr
Встал на лапы
Сообщения: 80 Зарегистрирован: Вс фев 21, 2021 13:01:40
Откуда: Прокопьевск
Сообщение
Михаил_avr » Чт июл 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
DimAlt
Вымогатель припоя
Сообщения: 576 Зарегистрирован: Пт май 19, 2006 05:39:11
Контактная информация:
Сообщение
DimAlt » Пт июл 09, 2021 11:39:21
Может подключаете не так? Например, данные подключены к DB0-7, а надо на DB8-15.
Михаил_avr
Встал на лапы
Сообщения: 80 Зарегистрирован: Вс фев 21, 2021 13:01:40
Откуда: Прокопьевск
Сообщение
Михаил_avr » Пт июл 09, 2021 12:55:23
Нет подключены db8-15
slav0n
Опытный кот
Сообщения: 882 Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:
Сообщение
slav0n » Пт июл 09, 2021 15:48:07
ликбез.
для сброса бита надо писать так:
ohmycode!
primuss3.com
Jack_A
Друг Кота
Сообщения: 6308 Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk
Сообщение
Jack_A » Пт июл 09, 2021 22:49:36
Действительно - бессмысленное выражение. Если компилятор его не выкинет, то это будет означать в переводе на наши речи: "Нолик подвинуть на несколько позиций и прикошачить его по ИЛИ к такому-то биту" .
Ноль сколько куда хошь ни двигай - по ИЛИ он
ничего не меняет.
Михаил_avr
Встал на лапы
Сообщения: 80 Зарегистрирован: Вс фев 21, 2021 13:01:40
Откуда: Прокопьевск
Сообщение
Михаил_avr » Сб июл 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);
}