![]() |
![]() |
#311 |
Вступил в клуб
Регистрация: 04.05.2012
Сообщений: 43
|
![]()
10 минут и все будет))
Добавлено через 4 минуты /************************************************** ***************************** * Имя: init_port_spi() * Описание: Инициализация порта на работу с lcd через SPI * Параметры: Нет * Пример: init_port_spi(); ************************************************** *****************************/ void init_port_spi(void) { /* Установка MOSI(SDA),SCK и SS на выход, а MISO на вход */ DDR_SPI |= (1<<MOSI_SPI_PIN)|(1<<SCK_SPI_PIN)|(1<<SS_SPI_PIN) |(0<<MISO_SPI_PIN); /*Установка MOSI(SDA), SCK, SS на выход- с нолем (0), а MISO вход- с нолем(0)*/ PORT_SPI |= (0<<MOSI_SPI_PIN)|(0<<SCK_SPI_PIN)|(0<<SS_SPI_PIN) |(0<<MISO_SPI_PIN); } /************************************************** **************************** * Имя: start_spi() * Описание: Разрешаем работу SPI как мастера в режиме SP0 * Параметры: Нет * Пример: start_spi; ************************************************** *****************************/ void start_spi(void) /*|SPI2X|SPR1|SPR0|Частота SCK|*/ { /*| 0 | 0 | 0 | fosc/4 |*/ /* Разрешение SPI в режиме мастера, старший бит вперед (MSB), скорость связи fosc/2 */ /*| 0 | 0 | 1 | fosc/16 |*/ SPCR = (1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|( 0<<SPR1)|(0<<SPR0); // /*| 0 | 1 | 0 | fosc/64 |*/ /* Удваиваем скорость работы SPI*/ /*| 0 | 1 | 1 | fosc/128 |*/ SPSR = (1<<SPI2X); /*| 1 | 0 | 0 | fosc/2 |*/ } /*| 1 | 0 | 1 | fosc/8 |*/ /*| 1 | 1 | 0 | fosc/32 |*/ /*| 1 | 1 | 1 | fosc/64 |*/ Добавлено через 1 минуту Продолжаем.. /************************************************** **************************** * Имя: spi_transmit(c) * Описание: Передача одного байта данных по SPI * Параметры: data- восьмибитное число * Пример: spi_transmit(0xF0); ************************************************** *****************************/ void spi_write(unsigned char c) { SS_SPI_RESET; // активируем SPI посредством SS (выбрали ведомый) SPDR = c; // передаем данные while(!(SPSR & (1<<SPIF))); // ждем, пока не окончится передача данных SPCR &=~0x50; // выключение SPI и освобождение шины SPI SS_SPI_SET; // откл. SPI посредством SS (отключили ведомый) } Добавлено через 4 минуты void nlcd_SendByte(char mode,unsigned char c) { CS_LCD_SPI_RESET; // выбираем дисплей SCK_SPI_RESET; // Установили в ноль сигнал SCK для импульса тактирования if(mode) MOSI_SPI_SET; // если передаем данные(единица), то MOSI(это-SDA)-в 1, else MOSI_SPI_RESET; // иначе передаем команду(ноль) и MOSI- в 0. SCK_SPI_SET; // имитируем импульс тактирования и SCK_SPI_RESET; // записываем 1-й бит из девяти (команду, или данные) init_port_spi(); // инициализируем SPI порт start_spi(); // Разрешаем работу SPI в режиме мастер SP0 spi_write(c); // передаем данные и отцепляемся от порта (отключаем SPI) CS_LCD_SPI_SET; // отцепляемся от дисплея } И результат- int main(void) { init_RST_CS_lcd_pin_spi(); // Инициализация выводов RST и CS дисплея init_port_spi(); // Инициализация порта SPI lcd_init_pin_spi(); // Инициализация дисплея "ногодрыг+SPI" } Вот и все, думаю вопросов не должно возникнуть..) |
![]() |
![]() |
![]() |
#312 |
Автор
Регистрация: 18.02.2011
Сообщений: 212
|
![]()
Поделюсь тоже инитом для 1616/С1-01, програмный ногодрыг для кодвижена.
void SendCom (unsigned char data) { unsigned char i,j; sck_0; cs_0; sda_0; sck_1; sck_0; j=0x80; for(i=0;i<8;i++) { if(data&j) { sda_1; sck_1; sck_0; } else { sda_0; sck_1; sck_0; } j=j>>1; } cs_1; } void SendDat (unsigned char data) { unsigned char i,j; sck_0; cs_0; sda_1; sck_1; sck_0; j=0x80; for(i=0;i<8;i++) { if(data&j) { sda_1; sck_1; sck_0; } else { sda_0; sck_1; sck_0; } j=j>>1; } cs_1; } void LCD_init(void) { res_1; delay_ms(100); res_0; delay_ms(10); res_1; delay_ms(10); SendCom (0x11); delay_ms(10); SendCom (0x3a); //Interface pixel format:bit1,2,3 SendDat (0x05); // 65k colour SendCom (0x36); // Ориентация дисплея SendDat (0b10100000);// альбомная 01100000 SendCom (0x29); // Display on,0x29=ON,0x28=OFF } |
![]() |
![]() |
![]() |
#313 |
Гость клуба
Регистрация: 17.11.2013
Сообщений: 3
|
![]()
а как его в место этого внедрить ?
void S_spi_w(unsigned char name) { unsigned char mask = 0x80; for( ; mask; mask >>= 1) { SDATA = name & mask; CLK=1; CLK=0; SDATA=0; } } void lcd_write(char cd,unsigned char register_name) { CS=0; if (cd) SDATA=1; imps; { S_spi_w(register_name); } CS= 1; } void lcd_write16(unsigned int dat) { lcd_write(DATA,dat>>8); lcd_write(DATA,dat); } void lcd_init_rgb(void) { CS= 0; RESET=0; delay_ms(5); RESET=1; delay_ms(5); CS= 1; lcd_write(CMD,0x01); delay_ms(50); //reset lcd_write(CMD,0x11); lcd_write(CMD,0x13); // lcd_write(CMD,0x26); lcd_write(DATA,0b00001000);//Gamma Set 1,2,4,8 lcd_write(CMD,0x36); lcd_write(DATA,0b10100000);// <Альбомный режим>, RGB, lcd_write(CMD,0x3A); lcd_write(DATA,0b00000101);//16bit // lcd_write(CMD,0x2D); lcd_write(DATA,0b00001111); fill_screen(WHITE); //Закрашиваем (чтоб не видеть мусор) lcd_write(CMD,0x29); //lcd_write(CMD,0x39); // lcd_write(CMD,0x13); } void fill_screen(unsigned int color) { unsigned char j,i; lcd_write(CMD,0x2A); //x-координата lcd_write16(1); lcd_write16(160); lcd_write(CMD,0x2B);//Y-координата lcd_write16(1); lcd_write16(131); lcd_write(CMD,0x2C); for (i=0; i<DISP_H; i++) { for(j=0;j<DISP_W;j++) { lcd_write16(color); } } } void LCD_Char(unsigned char x, unsigned char y, char c, unsigned int color,char m) { unsigned char h,ch,p,mask; lcd_write(CMD,0x2A); //x-координата lcd_write16(x+2); lcd_write16(x+2+CHAR_W*m-1); lcd_write(CMD,0x2B);//Y-координата lcd_write16(y+1); lcd_write16(y+1+CHAR_H*m-1); lcd_write(CMD,0x2C); for (h=0; h<CHAR_H*m; h++) // every column of the character { ch=FONT8x15[ c-32 ][h/m]; // ch=FONT8x15[ c-32 ] [CHAR_H-h-1]; //зеркало по вертикали mask = 0x80; for (p=0; p<CHAR_W; p++) // write the pixels { if (ch & mask) { lcd_write16(color); if(m==2) { lcd_write16(color); } } else { lcd_write16(bgcolor); if(m==2) { lcd_write16(bgcolor);} } mask=mask/2; } } } void put_string(unsigned char x, unsigned char y, char *str, unsigned int color,char m) { unsigned char j; j=0; while (j<strlen(str)) { LCD_Char(x+j*CHAR_W*m,y,str[j], color,m); j++; } } |
![]() |
![]() |
![]() |
#314 |
Резидент клуба
Регистрация: 21.08.2011
Сообщений: 1,158
|
![]()
При использовании цветных дисплеев на SPI интерфейсе заметна инерционность обновления экрана дисплея. В качестве наглядного примера выкладываю видео анализатора на 2.2" TFT дисплее на контролере ILI9341. Микроконтролер используется самый шустрый из 18 пиков (16 MIPS) c тактовой в 16 мГц и включеным "ускорителем" режимом PLL. SPI аппаратный 16 мгц.
Имитатор сигналов используется в брелке шерифа ZX-1055 с прошивкой выложеной в теме http://phreakerclub.com/forum/showthread.php?t=1199. Там есть исходник имитатора. Видеофайл тяжелый, примерно 88 мБт. Поэтому с лимитным инетом лучше не смотреть. http://youtu.be/JDZf4fgaoBc |
![]() |
![]() |
![]() |
#315 |
Гость клуба
Регистрация: 16.06.2014
Сообщений: 1
|
![]()
Кинте кто нибудь печатку в архиве, фотки чет не грузятся...
|
![]() |
![]() |
![]() |
#316 |
Гость клуба
Регистрация: 30.04.2014
Сообщений: 3
|
![]()
Привет. Поделюсь результатом.
Запустил дисплей от Nokia n73 с помощью STM32VLDISCOVERY. Печатка в PROTEUS 7.8 и проект KEIL 4.73. STM32F100 оказалась слабовата, 2 кадра удалось выжать, ну если оптимизировать код, то три будет ![]() ![]() |
![]() |
![]() |
![]() |
#317 |
Гость клуба
Регистрация: 29.01.2013
Сообщений: 1
|
![]()
Для бОльших дисплеев надо FSMC юзать, в 100-й серии есть в чипах 100 и 144 ног. Либо 103-ю заюзать, либо на 2хх-4хх переходить.
|
![]() |
![]() |
![]() |
#318 | |||||||||||||||||||||||
Гость клуба
Регистрация: 30.08.2014
Сообщений: 1
|
![]()
Доброго времени суток! Смотрю на схему не вижу делителей и преобразователей уровня, судя по фотке Вы подключили напрямую к дискавери дисплей, дискавери питается от штатных 3V3 ? Контроллер дисплеев LS022, 024 нормально работает с уровнями 3.3 вольта? Можно не заморачиваться с преобразованием уровней ? |
|||||||||||||||||||||||
![]() |
![]() |
![]() |
#319 |
Гость клуба
Регистрация: 30.04.2014
Сообщений: 3
|
![]()
Нет, делиьели не нежны для 3v. На моей дисеавери написано 3.3v, а насамом деле 3v. Померяйте у себя, если 3.3 я бы рекомендовал просто плменят стабилизатор.
|
![]() |
![]() |
![]() |
#320 |
Banned
Регистрация: 12.10.2014
Сообщений: 41
|
![]()
А есть кто ещё этот проект собрал? Вроде как мало(( . Вот russo_turisto мне девайс понравился
|
![]() |
![]() |