Например TDA7294

Форум РадиоКот • Просмотр темы - Дисплеи от мобильных телефонов- осцилограммы работы
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн дек 15, 2025 18:37:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 870 ]     ... , , , 27, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Вс июн 24, 2012 16:19:55 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 0
Тут когда-то спрашивали про команды lph9157-2. Насколько я видел в инете на easyelectronik, его система команд совпадает с ILI9163 (http://www.allshore.com/pdf/ILITEK_ILI9163.pdf).

Отдали мне ещё один дисплей от Siemens C75, но он почему-то не на зелёном текстолите. Работает ли он со стандартными командами не знаю, так как дисплей, возможно, не рабочий (телефон упал и больше не включился; поэтому-то мне дисплей и не отдали).

А фото вот какое:
Вложение:
display.jpg [20.63 KiB]
Скачиваний: 772

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Вс июн 24, 2012 18:59:44 
Поставщик валерьянки для Кота

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пт авг 29, 2008 16:28:19
Сообщений: 2108
Откуда: Киев
Рейтинг сообщения: 0
Дисплей с желтым текстолитом совсем другой. Это не LPH9157-2, и он с ним ничего общего не имеет.

А у зеленого всё-равно команды не совсем совпадают с ILI9163. Подобная система команд используется в разных дисплеях разных производителей - я находил десятки даташитов с похожими командами, но ни один не совпал точно. Некоторые уточненные команды есть в моём длинном сообщении кажется около 8 страницы темы.

_________________
Giggity giggity goo!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Вс июн 24, 2012 21:50:36 
Встал на лапы

Зарегистрирован: Чт фев 16, 2012 15:22:06
Сообщений: 120
Рейтинг сообщения: 0
Дисплей на желтом текстолите запущен здесь


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Вс июн 24, 2012 21:52:33 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 0
О! Спасибо! А то я никак не могу найти на него даже названия. :( Зелёный-то у меня работает сходу, а вот этот буду пробовать оживить. :) Распайка, вроде, совпадает с зелёным. Хорошо.

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июн 25, 2012 05:29:05 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 0
Вот ещё есть про дисплеи с исходниками: http://www.superkranz.de/christian/S65_ ... tware.html

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Сб июн 30, 2012 11:03:39 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 0
Ну, вот программа для работы с дисплеем от Siemens C75 с жёлтым текстолитом.

Код:
//LCD-экран (жёлтый текстолит) от Siemens C75 подключён по SPI

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//настройки контактов LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//линия ChipSelect
#define LCD_PORT_CS    PORTC
#define LCD_DDR_CS     DDRC
#define LCD_CS         0
//линия Reset
#define LCD_PORT_RESET PORTC
#define LCD_DDR_RESET  DDRC
#define LCD_RESET      1
//линия команда/данные
#define LCD_PORT_RS    PORTC
#define LCD_DDR_RS     DDRC
#define LCD_RS         2
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//базовые цвета LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define LCD_RED     0xF800
#define LCD_GREEN   0x07E0
#define LCD_BLUE    0x001F
#define LCD_BLACK   0x0000
#define LCD_WHITE   0xFFFF
#define LCD_YELLOW  0xFFE0
#define LCD_CYAN    0x07FF
#define LCD_MAGENTA 0xF81F
#define LCD_BLACK   0x0000
//----------
//глобальные переменные
//----------

//----------
//прототипы функций
//----------
void LCD_Init(void);//инициализация LCD-экрана
inline unsigned char SPI_SendData(unsigned char value);//послать по SPI-данные
unsigned char LCD_SendData8(unsigned char value);//послать 8-бит данных LCD-экрану
unsigned short LCD_SendData16(unsigned short value);//послать 16-бит данных LCD-экрану
unsigned char LCD_SendCommand(unsigned char command);//послать 8-бит команды LCD-экрану
void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);//указать LCD-экрану прямоугольник вывода и начать процесс вывода
void LCD_SetPixel(unsigned short color);//установить пиксель в текущую позицию вывода LCD-экрана
void LCD_Enable(void);//включение управления LCD-экраном
void LCD_Disable(void);//выключение управления LCD-экраном
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//общие функции
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//----------
//инициализация LCD-экрана
//----------
void LCD_Init(void)
{
 //настраиваем порты
 LCD_DDR_CS|=(1<<LCD_CS);
 LCD_DDR_RS|=(1<<LCD_RS);
 LCD_DDR_RESET|=(1<<LCD_RESET);
 //инициализируем экран
 LCD_PORT_CS|=(1<<LCD_CS);
 LCD_PORT_RS&=(0xff^(1<<LCD_RS));
 LCD_PORT_RESET&=(0xff^(1<<LCD_RESET));
 LCD_Enable();
 _delay_ms(500);
 LCD_PORT_RESET|=(1<<LCD_RESET);
 _delay_ms(500);
 LCD_SendCommand(0x00);//неизвестная команда
 LCD_SendData16(0x0001);//неизвестный параметр
 LCD_SendCommand(0x10);//неизвестная команда
 LCD_SendData16(0x1F92);//неизвестный параметр
 LCD_SendCommand(0x11);//неизвестная команда
 LCD_SendData16(0x0014);//неизвестный параметр
 LCD_SendCommand(0x00);//неизвестная команда
 LCD_SendData16(0x0001);//неизвестный параметр
 LCD_SendCommand(0x10);//неизвестная команда
 LCD_SendData16(0x1F92);//неизвестный параметр
 LCD_SendCommand(0x11);//неизвестная команда
 LCD_SendData16(0x001C);//неизвестный параметр
 LCD_SendCommand(0x28);//неизвестная команда
 LCD_SendData16(0x0006);//неизвестный параметр
 LCD_SendCommand(0x02);//неизвестная команда
 LCD_SendData16(0x0000);//неизвестный параметр
 
 LCD_SendCommand(0x12);//неизвестная команда
 LCD_SendData16(0x040F);//неизвестный параметр
 
 LCD_SendCommand(0x01);
 LCD_SendData16(0x31AF);
 
 LCD_SendCommand(0x07);
 LCD_SendData16(0x0033);
 LCD_Disable();
}
//----------
//послать по SPI-данные
//----------
inline unsigned char SPI_SendData(unsigned char value)
{
 SPDR=value;
 while(!(SPSR&(1<<SPIF)));
 return(SPDR);
}
//----------
//послать 8-бит данных LCD-экрану
//----------
inline unsigned char LCD_SendData8(unsigned char value)
{
 LCD_PORT_RS|=(1<<LCD_RS);
 return(SPI_SendData(value));
}
//----------
//послать 16-бит данных LCD-экрану
//----------
inline unsigned short LCD_SendData16(unsigned short value)
{
 LCD_PORT_RS|=(1<<LCD_RS);
 unsigned short r=SPI_SendData((value>>8)&0xff);
 r=r<<8;
 r|=SPI_SendData(value&0xff);
 return(r);
}
//----------
//послать 8-бит команды LCD-экрану
//----------
inline unsigned char LCD_SendCommand(unsigned char command)
{
 LCD_PORT_RS&=(0xff^(1<<LCD_RS));
 return(SPI_SendData(command));
}
//----------
//указать LCD-экрану прямоугольник вывода и начать процесс вывода
//----------
inline void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
 //устанавливаем первый и последний столбцы записи в память
 LCD_SendCommand(0x47);
 LCD_SendData8(y2);
 LCD_SendData8(y1);
 LCD_SendCommand(0x44);
 LCD_SendData8(x2);
 LCD_SendData8(x1);
 //и текущие координаты вывода
 LCD_SendCommand(0x21);
 LCD_SendData8(x1);
 LCD_SendData8(y1);
 //устанавливаем направление вывода
 LCD_SendCommand(0x03);//установить режим вывода
 LCD_SendData16(0x7820);//понятия не имею, что это за биты, но 20 - вывод сверху-вниз
 //запускаем процесс вывода пикселей
 LCD_SendCommand(0x22);
}
//----------
//установить пиксель в текущую позицию вывода LCD-экрана
//----------
inline void LCD_SetPixel(unsigned short color)
{
 LCD_SendData16(color);
}
//----------
//включение управления LCD-экраном
//----------
inline void LCD_Enable(void)
{
 LCD_PORT_CS&=0xff^(1<<LCD_CS);
}
//----------
//выключение управления LCD-экраном
//----------
inline void LCD_Disable(void)
{
 LCD_PORT_CS|=(1<<LCD_CS);
}

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Сб июн 30, 2012 12:03:09 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
misha274 писал(а):
Всем мяу, ребят, а вот с таким диспом никто не сталькивался? (37 pin)
двух симочный китаяц :))) с наружи написано Nokia, под аккумом S538 и все, даже распи не могу найти.



Контроллер какой? Они разные бывают.

Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Вс июл 01, 2012 23:31:22 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Чт июл 21, 2011 19:56:10
Сообщений: 564
Рейтинг сообщения: 0
Сколько смотрю и понять немогу откуда берутся LCD_Clk,LCD_Data,LCD_RS,LCD_CS,LCD_Reset и куда запихиваются? По программе мне восновном все понятно но не понятно как управлять этими выходами
Вот допустим кусок программы где напрямую подаются сигналы на отдельные выходы экрана:
Код:
LCD_Data:=datt.B7;
    LCD_Clk:=1;
    datt:=datt shl 1;
    LCD_Clk:=0;

Ябы мог допустим забить на это и написать отдельно типа выход на порт но порт то один а тут на каждый вывод отдельно посылаются сигналы. Как это осуществить? У меня дисплей LPH9157-2, программирую на СИ (я начинающий такчто сильно не пинайте)

Обьясните пожалуйста чтоб было понятно. Вот сама программа взята с этой темы:

Код:
var
LCD_Clk,LCD_Data,LCD_RS,LCD_CS,LCD_Reset:sbit; sfr; external;
const
CMD:boolean=0;
DAT:boolean=1;
RED:word=0xF800;
GREEN:word=0x07E0;
BLUE:word=0x001F;
BLACK:word=0x0000;
WHITE:word=0xFFFF;
YELLOW:word=0xFFE0; //Желтый
CYAN:word=0x07FF; //Голубой
MAGENTA:word=0xF81F; //Фиолетовый

procedure write(w:boolean;datt:byte);
procedure writec(datt:word);
procedure koord(x,y:byte);
procedure pixel(x,y:byte; color:word);
procedure LCD_init();

implementation

procedure write(w:boolean;datt:byte); //запись данных или команды 8 бит в LCD
var i:byte;
begin
if w=1 then LCD_RS:=w
   else
   begin
   LCD_CS:=1;
   LCD_RS:=w;
   LCD_CS:=0;
   end;
LCD_Clk:=0;
for i:=0 to 7 do
    begin
    LCD_Data:=datt.B7;
    LCD_Clk:=1;
    datt:=datt shl 1;
    LCD_Clk:=0;
    end;
end;
procedure writec(datt:word); //запись данных 16 бит в LCD
var i,h,l:byte;
begin
h:=Hi(datt);
l:=Lo(datt);
LCD_RS:=1;
LCD_Clk:=0;
for i:=0 to 7 do
    begin
    LCD_Data:=h.B7;
    LCD_Clk:=1;
    h:=h shl 1;
    LCD_Clk:=0;
    end;
for i:=0 to 7 do
    begin
    LCD_Data:=l.B7;
    LCD_Clk:=1;
    l:=l shl 1;
    LCD_Clk:=0;
    end;
end;
procedure koord(x,y:byte); //Установка координаты на дисплее
begin
write(cmd,0x2a);
write(dat,y);
write(dat,132);
write(cmd,0x2b);
write (dat,x);
write(dat,176);
end;
procedure pixel(x,y:byte; color:word); //рисование пикселя опрю цвета на дисплее
begin
koord(x,y);
write(cmd,0x2c);
writec(color);
end;
procedure LCD_init();
begin
LCD_RS:=0;
LCD_CS:=1;
LCD_RESET:=0;
delay_ms(500);
LCD_RESET:=1;
delay_ms(500);
Write(cmd,0x01);
delay_ms(20);
write(cmd,0x36);//Memory Access Control
write(dat,0x80);
Write(cmd,0x11); //sleep out
delay_ms(20);
write(cmd,0x3a); //interfase pixel format
Write(dat,0x55);
delay_ms(20);
write(cmd,0x29); //Display ON
end;
end.

_________________
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 06:07:03 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Вс янв 15, 2012 19:58:40
Сообщений: 454
Рейтинг сообщения: 0
Например я делаю так
Код:
#define LCD_RS            PORTB.0
#define LCD_RESET       PORTB.1
#define LCD_CS            PORTB.2
#define LCD_DATA        PORTB.3
#define LCD_CLK          PORTB.5


Ну и конечно эти порты надо настроить на выход
Код:
   PORTB = 0x00;
   DDRB = 0x3F;

_________________
Ни один домашний кот незнает что он домашний.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 10:06:02 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Чт июл 21, 2011 19:56:10
Сообщений: 564
Рейтинг сообщения: 0
radiokot__, это СИ или Паскаль?

_________________
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 10:58:59 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 889
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6196
Откуда: Minsk
Рейтинг сообщения: 0
Ну какой может быть Си, если :=


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 13:22:33 
Поставщик валерьянки для Кота

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пт авг 29, 2008 16:28:19
Сообщений: 2108
Откуда: Киев
Рейтинг сообщения: 0
В Си надо использовать логические выражения

PORTB |= 1<<2 ; единицу на ножку 2 порта B
PORTB |= 1<<6 ; единицу на ножку 6 порта B
PORTB |= 1<<0 ; единицу на ножку 0 порта B
PORTB &= ~(1<<2) ; нуль на ножку 2 порта B

_________________
Giggity giggity goo!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 14:18:22 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Чт июл 21, 2011 19:56:10
Сообщений: 564
Рейтинг сообщения: 0
Спасибо Foks, а как быть с тем что на СИ нельзя обьявлять переменные типа byte? Нужно подавать двоичные данные а не десятичные

_________________
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 14:46:26 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Вс янв 15, 2012 19:58:40
Сообщений: 454
Рейтинг сообщения: 0
Зукс писал(а):
radiokot__, это СИ или Паскаль?

Это СИ.
Вам под какой микроконтроллер нужно?
И под какой компилятор?
С этими дисплеями LPH9157-2 я делал разные штучки, достойный дисплей.
Яркий, цвета нассыщеные, и шустрый.

_________________
Ни один домашний кот незнает что он домашний.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 14:57:23 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Чт июл 21, 2011 19:56:10
Сообщений: 564
Рейтинг сообщения: 0
контроллер Atmega8 пишу в AVR Studio 5.
Почему я пишу
Код:
LCD_RS = 0;
А оно мне выдает ошибку в этой строке:
Код:
expected ';' before numeric constant
?

_________________
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 18:02:26 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 0
Цитата:
Сколько смотрю и понять немогу откуда берутся LCD_Clk,LCD_Data,LCD_RS,LCD_CS,LCD_Reset и куда запихиваются?


Их задают сами программисты. Это макросы. Т.е., это слова, которые заменяются при компиляции на что-то иное.
Например, #define LCD_PORT_CS PORTC означает, что вместо LCD_PORT_CS будет подставлено PORTC.
Итого, запись LCD_PORT_C=0; означает PORTC=0; А что такое PORTC компилятор знает из каких-то библиотек, где описан доступ к этому регистру.

Цитата:
Как это осуществить? У меня дисплей LPH9157-2, программирую на СИ (я начинающий такчто сильно не пинайте)


Могу предложить так для вашего дисплея:

Код:

//LCD-экран от Siemens C75 (зелёный текстолит) подключён по SPI

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//настройки контактов LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//линия ChipSelect
#define LCD_PORT_CS    PORTC
#define LCD_DDR_CS     DDRC
#define LCD_CS         0
//линия Reset
#define LCD_PORT_RESET PORTC
#define LCD_DDR_RESET  DDRC
#define LCD_RESET      1
//линия команда/данные
#define LCD_PORT_RS    PORTC
#define LCD_DDR_RS     DDRC
#define LCD_RS         2
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//базовые цвета LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define LCD_RED     0xF800
#define LCD_GREEN   0x07E0
#define LCD_BLUE    0x001F
#define LCD_BLACK   0x0000
#define LCD_WHITE   0xFFFF
#define LCD_YELLOW  0xFFE0
#define LCD_CYAN    0x07FF
#define LCD_MAGENTA 0xF81F
#define LCD_BLACK   0x0000
//----------
//глобальные переменные
//----------

//----------
//прототипы функций
//----------
void LCD_Init(void);//инициализация LCD-экрана
unsigned char SPI_SendData(unsigned char value);//послать по SPI данные
unsigned char LCD_SendData8(unsigned char value);//послать 8-бит данных LCD-экрану
unsigned short LCD_SendData16(unsigned short value);//послать 16-бит данных LCD-экрану
unsigned char LCD_SendCommand(unsigned char command);//послать 8-бит команды LCD-экрану
void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);//указать LCD-экрану прямоугольник вывода и начать процесс вывода
void LCD_SetPixel(unsigned short color);//установить пиксель в текущую позицию вывода LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//общие функции
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//----------
//инициализация LCD-экрана
//----------
void LCD_Init(void)
{
 //настраиваем порты
 LCD_DDR_CS|=(1<<LCD_CS);
 LCD_DDR_RS|=(1<<LCD_RS);
 LCD_DDR_RESET|=(1<<LCD_RESET);
 //инициализируем экран
 LCD_PORT_CS|=(1<<LCD_CS);
 LCD_PORT_RS&=(0xff^(1<<LCD_RS));
 LCD_PORT_RESET&=(0xff^(1<<LCD_RESET));
 LCD_PORT_CS&=(0xff^(1<<LCD_CS));
 _delay_ms(500);
 LCD_PORT_RESET|=(1<<LCD_RESET);
 _delay_ms(500);
 LCD_SendCommand(0x01);//программный сброс
 _delay_ms(20);
 LCD_SendCommand(0x36);//Установка направлений заполнения прямоугольника CASET x PASET
 LCD_SendData8(0x80);
 LCD_SendCommand(0x11); //выход из спящего режима
 _delay_ms(20);
 LCD_SendCommand(0x3a); //установка глубины цвета
 LCD_SendData8(0x5);//режим 16-бит
 /*
 Один параметр 0bXXXXXABC
 ABC: 010 - 8bit/pixel (0bRRRGGGBB),
 011 - 12bit/pixel (0bRRRRGGGG 0bBBBBRRRR 0bGGGGBBBB),
 101 - 16bit/pixel (0bRRRRRGGG 0bGGGBBBBB)
 */
 _delay_ms(20);
 LCD_SendCommand(0x29); //включаем дисплей
}
//----------
//послать по SPI-данные
//----------
inline unsigned char SPI_SendData(unsigned char value)
{
 SPDR=value;
 while(!(SPSR&(1<<SPIF)));
 return(SPDR);
}
//----------
//послать 8-бит данных LCD-экрану
//----------
inline unsigned char LCD_SendData8(unsigned char value)
{
 LCD_PORT_RS|=(1<<LCD_RS);
 return(SPI_SendData(value));
}
//----------
//послать 16-бит данных LCD-экрану
//----------
inline unsigned short LCD_SendData16(unsigned short value)
{
 LCD_PORT_RS|=(1<<LCD_RS);
 unsigned short r=SPI_SendData((value>>8)&0xff);
 r=r<<8;
 r|=SPI_SendData(value&0xff);
 return(r);
}
//----------
//послать 8-бит команды LCD-экрану
//----------
inline unsigned char LCD_SendCommand(unsigned char command)
{
 LCD_PORT_RS&=(0xff^(1<<LCD_RS));
 return(SPI_SendData(command));
}
//----------
//указать LCD-экрану прямоугольник вывода и начать процесс вывода
//----------
inline void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
 //устанавливаем первый и последний столбцы записи в память
 LCD_SendCommand(0x2a);
 LCD_SendData8(x1);
 LCD_SendData8(x2);
 LCD_SendCommand(0x2b);
 LCD_SendData8(y1);
 LCD_SendData8(y2);
 //устанавливаем направление вывода
 LCD_SendCommand(0x36);
 LCD_SendData8(0);//сверху-вниз слева-направо, без инверсии
 //запускаем процесс вывода пикселей
 LCD_SendCommand(0x2c);
}
//----------
//установить пиксель в текущую позицию вывода LCD-экрана
//----------
inline void LCD_SetPixel(unsigned short color)
{
 LCD_SendData16(color);
}


Цитата:
а как быть с тем что на СИ нельзя обьявлять переменные типа byte? Нужно подавать двоичные данные а не десятичные


А вы инициализируйте переменную как 0b01010101010 и т.д. Я не помню, что такое тип byte в паскале, но предположу, что это аналог unsigned char в Си.

Цитата:
LCD_RS = 0;


Потому что у вас LCD_RS - макрос. Это слово будет заменено на то, что у вас ему приписано в #define. Если, конечно, речь шла о Си. :)

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 20:02:08 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Чт июл 21, 2011 19:56:10
Сообщений: 564
Рейтинг сообщения: 0
da-nie, спасибо огромное за код только я немогу понять почему допустим при прорисовке прямоугольника указываются координаты но не указывается цвет (и как его указывать?) и почему при выводе одного пикселя наоборот указывается только цвет но не указываются координаты??? Как задать текущий цвет и текущие координаты? Что значит функция послать по SPI-данные???
И еще... я так понял в этой программе используется только три вывода на дисплей с порта "С"? Почему так?
Если я напишу функцию вывода пикселей таким образом(код ниже) я смогу за одну команду выводить пиксель в указанные координаты и присваивать свой цвет?:
Код:
inline void LCD_SetPixel(unsigned char x, unsigned char y, unsigned short color)
{
 LCD_SendData16(color);
 LCD_SendCommand(0x2a);
 LCD_SendData8(x);
 LCD_SendCommand(0x2b);
 LCD_SendData8(y);
 LCD_SendCommand(0x2c);
}


как осуществить стирание экрана?

_________________
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 20:38:27 
Поставщик валерьянки для Кота

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пт авг 29, 2008 16:28:19
Сообщений: 2108
Откуда: Киев
Рейтинг сообщения: 0
Зукс, рановато Вам за дисплей браться. Типа данных byte в Си нету и в Си++ кстати тоже. Есть типы char и unsigned char.

_________________
Giggity giggity goo!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 21:05:53 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 0
Цитата:
da-nie, спасибо огромное за код только я немогу понять почему допустим при прорисовке прямоугольника указываются координаты но не указывается цвет (и как его указывать?) и почему при выводе одного пикселя наоборот указывается только цвет но не указываются координаты??? Как задать текущий цвет и текущие координаты? Что значит функция послать по


Потому что эта команда задаёт прямоугольник в который будет осуществляться вывод цветов. Она его не закрашивает, а только задаёт и инициализирует начальные координаты вывода цветов. После этого каждая команда поставить точку определённого цвета ставит эту точку в этот прямоугольник по текущим координатам вывода, которые изменяются с каждой новой поставленной точкой. Проще говоря, вы сканируете этот прямоугольник и указываете для каждой его точки цвет. Вот и всё.

Цитата:
SPI-данные???


Да, дисплей должен быть подключён к линиям MOSI и SCK.


Цитата:
И еще... я так понял в этой программе используется только три вывода на дисплей с порта "С"? Почему так?


Потому что этому дисплею требуются линии:

1) CS - Chip Select - "выбор кристалла" - при низком уровне (т.е. при нуле) дисплей понимает, что сейчас будут работать с ним.
2) RS - эта линия определяет передаются ли данные или команды. Если на ней высокий уровень (т.е. 1), то передаются данные, если низкий (т.е. 0), то передаются команды.
3) Reset - линия сброса - низкий уровень осуществляет сброс дисплея.

Вы можете эти линии подключить на любые свободные порты (кроме SPI, конечно; к SPI подключаются другие линии).

Вот как можно подключить этот дисплей:

Изображение

В большом разрешении:
Вложение:
lcd.GIF [45.61 KiB]
Скачиваний: 391


Диоды там практически любые (только не Шоттки!), микросхемы стабилизаторов LM7805 и 2950A CS-3.3. Их можно заменить на аналогичные.

Цитата:
Если я напишу функцию вывода пикселей таким образом(код ниже) я смогу за одну команду выводить пиксель в указанные координаты и присваивать свой цвет?:


Нет, не сможете. Сможете вот как:

Код:
//устанавливаем первый и последний столбцы записи в память
 LCD_SendCommand(0x2a);
 LCD_SendData8(x);
 LCD_SendData8(131);
 LCD_SendCommand(0x2b);
 LCD_SendData8(y);
 LCD_SendData8(175);
 //устанавливаем направление вывода
 LCD_SendCommand(0x36);
 LCD_SendData8(0);//сверху-вниз слева-направо, без инверсии
 //запускаем процесс вывода пикселей
 LCD_SendCommand(0x2c);

 LCD_SendData16(color);


Но это нерационально.

Цитата:
как осуществить стирание экрана?


Вот как:

Код:
LCD_SetOutputRectangle(0,0,131,175);
for(unsigned short n=0;n<132*176;n++) LCD_SetPixel(LCD_BLACK);


Цитата:
Что значит функция послать по SPI-данные???


Эта функция используя интерфейс SPI отправляет дисплею данные или команды. Вот и всё.
Настраивается SPI так:
Код:
 SPCR=(0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(0<<SPR0);
 SPSR=(1<<SPI2X);//удвоенная скорость SPI


Вложения:
lcd-mini.GIF [13.68 KiB]
Скачиваний: 3593

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
СообщениеДобавлено: Пн июл 02, 2012 22:58:56 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Чт июл 21, 2011 19:56:10
Сообщений: 564
Рейтинг сообщения: 0
da-nie, при пошаговой симуляции дохожу до функции SPI_SendData и в строке while(!(SPSR&(1<<SPIF))); происходит бесконечное зацикливание и курсор дальше не двигается. Жал кнопку "step into" либо "Step over" раз 50, думал может цикл длинный но дальше не двигается. И дисплей кстати не запустился

_________________
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 870 ]     ... , , , 27, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Kapitoska и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y