STM32F030C8 SPI SSD1306
08.11.2016, 09:01
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Хаааа! ОуЩЕТ!!  А ведь и правда, да, есть в конце инфа, четко написано же, блин.
Я то инфу об упаковке в ленты и коробки не читаю, мне дисплей привезли в пупырчатой пленке...
Хотя дисплейчик в целом неплохой. Почти удачно заменяет громоздкие Винстары и МЭЛТы 12864. Единственный недостаток - мелковат он конечно. Минимальный читаемый без напряга шрифт - 13, заполнение 4 строки по 16 моноширных символов.
Стандартный 8-й шрифт мелковат - высота символа 1,3 мм, хотя и дает 8 строк по 21 символ. Хотя, читать можно.
Размер видимой области: ширина 22 мм, высота части голубого свечения (48 пикс) - 8,3 мм, желтого свечения (16 пикс) - 3 мм
|
|
|
|
08.11.2016, 10:13
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
__________________
Осторожно , злой кот
|
|
|
|
08.11.2016, 10:21
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 26.01.2007
Сообщений: 3,116
Сказал спасибо: 61
Сказали Спасибо 1,151 раз(а) в 623 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Сообщение от dosikus
|
|
китайцы уже пристроили
|
Им осталось пристроить пусковое устройство к этой пристройке:
|
Цитата:
|
|
Input inrush current : Cold start 30A
|
|
|
|
|
11.11.2016, 23:04
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
dosikus, сорри что пропал... Ехал по трассе и словил в лобовое камень. Только оправился... Скоро вернусь к запуску...
|
|
|
|
12.11.2016, 10:24
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Сообщение от dosikus
|
|
Ты снова отсебятину лепишь . Я же писал - делай все как у меня, от и до .
|
блин я реально дефайн не видел... Уже всё исправил.
|
PHP код:
|
uint8_t SPI1_SendByte(uint8_t data)
{
SPI1_DR_8bit = data;
while (!(SPI1-›SR & SPI_SR_RXNE));
return (SPI1_DR_8bit );
}
|
Вечером ослик подключу погляжу что там. Пока тишина..
|
|
|
|
12.11.2016, 23:19
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
записал что ослик показывает. Каждые 800 мс примерно делаю заливку черную потом белую на экран. Вот это записал. Ножка чип селект притянута к земле. Желтый луч MOSI, синий - DC
Вроде всё правильно?....
в майне
|
PHP код:
|
SSD1306_SPI_Fill(SSD1306_SPI_COLOR_WHITE);
SSD1306_SPI_UpdateScreen_My();
Delay_ms(800);
SSD1306_SPI_Fill(SSD1306_SPI_COLOR_BLACK);
SSD1306_SPI_UpdateScreen_My();
Delay_ms(800);
|
Функция обновления экрана
|
PHP код:
|
void SSD1306_SPI_UpdateScreen_My(void) {
uint8_t m;
uint32_t i; //Объявляем переменную для цикла задержки
for (m = 0; m ‹ 8; m++) {
send_command(0xB0 + m);
send_command(0x00);
send_command(0x10);
//for(i=0; i‹0x000FFFFF; i++); //Задержка
/* Write multi data */
ssd1306_SPI_Multisend(0x40, &SSD1306_Buffer_SPI[LCDWIDTH * m], LCDWIDTH);
}
}
|
|
|
|
|
13.11.2016, 09:07
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
DC, то есть переключение данные/инструкции, дергать вообще не обязательно при выводе информации. Достаточно настроить первоначально автоинкремент страниц (команды 0х20, 0х00), и при выводе инфы непрерывно слать целиком полный кадр.
|
|
|
|
13.11.2016, 13:27
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
сейчас у меня даже инит не происходит....
это шлю в ините в дисплей. При карявых настройках этот инит работал для дисплея.
|
PHP код:
|
0xAF, //display on AE - off
0x20, //Set Memory Addressing Mode
0x10, //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
0xB0, //Set Page Start Address for Page Addressing Mode,0-7
0xC8, //Set COM Output Scan Direction
0x00, //---set low column address
0x10, //---set high column address
0x40, //--set start line address
0x81, //--set contrast control register
0xFF,
0xA1, //--set segment re-map 0 to 127
0xA6, //--set normal display
0xA8, //--set multiplex ratio(1 to 64)
0x3F, //
0xA4, //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
0xD3, //-set display offset
0x00, //-not offset-------------------
0xD5, //--set display clock divide ratio/oscillator frequency
0xF0, //--set divide ratio
0xD9, //--set pre-charge period
0x22, //
0xDA, //--set com pins hardware configuration
0x12,
0xDB, //--set vcomh
0x20, //0x20,0.77xVcc
0x8D, //--set DC-DC enable
0x14, //
0xAF //--turn on SSD1306 panel
|
|
|
|
|
13.11.2016, 13:41
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Вот простейшая, без изысков, работа с этим дисплеем.
Код рабочий, писался для F100RB. Для F0 надо будет подправить настройку портов и распиновку. В остальном так же. SPI по-моему не отличается в базовой работе.
CS управляется аппаратно. Но можно убрать и программно выставить CS = 0 и не париться.
Прерывания и DMA не используются - это уже следующий шаг, и чтобы не усложнять и не путать Михайло Потапыча.
Так же, по соображениями неусложнения - всё написано в одном файле одним куском. Пофик, для тестов фсамыйрас.
Кстати, там после подачи питания перед посылкой первой команды надо 100 мс выждать...
Функции:
|
PHP код:
|
//++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++
/* Private variables */
uint8_t GRAM[64/8][128]; // видеопамять размером 1 кБайт
//++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++
/* Private function prototypes */
void Interface_Init(void);
void Display_Init(void);
void OLED_Write(uint8_t data);
void Switch_to_Command(void);
void Switch_to_Data(void);
void Refresh_frame(void);
//++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++
/* Private functions */
/*-----------------------------------------------
* Настройка интерфейса.
* MOSI - PB15 AF PP
* SCK - PB13 AF PP
* CS - PB12 AF PP
* DC - PB15 PP
* SPI2: Master, 8 bit, Bidir, BidiroutEnable,
* 1/16, SSM+SSI, SSO
*/
void Interface_Init(void)
{
RCC-›APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN;
RCC-›APB1ENR |= RCC_APB1ENR_SPI2EN;
/* Настройка выводов */
GPIOB-›CRH &= ~(GPIO_CRH_CNF12 | GPIO_CRH_CNF13 |
GPIO_CRH_CNF14 | GPIO_CRH_CNF15);
GPIOB-›CRH |= GPIO_CRH_CNF12_1 | GPIO_CRH_CNF13_1 |
GPIO_CRH_CNF15_1;
GPIOB-›CRH |= GPIO_CRH_MODE12_0 | GPIO_CRH_MODE13_0 |
GPIO_CRH_MODE14_0 | GPIO_CRH_MODE15_0;
/* Настройка SPI */
SPI2-›CR1 = SPI_CR1_BR_0 | SPI_CR1_BR_1 | // Скорость 1/16
SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE | // Bidir, BidirOutEnable
SPI_CR1_SSM | SPI_CR1_SSM | // SSM+SSI
SPI_CR1_MSTR; // Master
SPI2-›CR2 = SPI_CR2_SSOE; // SSO
SPI2-›CR1 |= SPI_CR1_SPE; // SPI Enable
}//----------------------------------------------
/*-----------------------------------------------
* Настройка дисплея, очистка и включение
*/
void Display_Init(void)
{
Switch_to_Command(); // Переключение в режим команд
OLED_Write(0x20); // Ориентация и развертка дисплея
OLED_Write(0x00); // автоинкремент страниц, слева направо, сверху вниз
OLED_Write(0x8D); // Включение DC/DC
OLED_Write(0x14); // конвертера
Switch_to_Data(); // Переключение в режим данных
Refresh_frame(); // Очистка дисплея
Switch_to_Command(); // Переключение в режим команд
OLED_Write(0xAF); // Включение дисплея
Switch_to_Data(); // Переключение в режим данных
}//----------------------------------------------
/*-----------------------------------------------
* отправка байта в дисплей
*/
void OLED_Write(uint8_t data)
{
while (!(SPI2-›SR & SPI_SR_TXE)) {} // Ожидание свободного буфера передачи
SPI2-›DR = data; // Запись байта в буфер передачи
}//---------------------------------
/*----------------------------------
* Переключение в режим команд, DC = 0
*/
void Switch_to_Command(void)
{
while (SPI2-›SR & SPI_SR_BSY) {} // Ожидание завершения передачи
GPIOB-›BSRR = GPIO_BSRR_BR14; // DC = 0
}//---------------------------------
/*----------------------------------
* Переключение в режим данных, DC = 1
*/
void Switch_to_Data(void)
{
while (SPI2-›SR & SPI_SR_BSY) {} // Ожидание завершения передачи
GPIOB-›BSRR = GPIO_BSRR_BS14; // DC = 1
}//----------------------------------
/*-----------------------------------
* Перерисовка полного кадра дисплея.
* Отправляет в дисплей содержимое видеопамти полностью.
*/
void Refresh_frame(void)
{
for (uint8_t y=0; y‹8; y++)
{
for(uint8_t x=0; x‹128; x++)
{
OLED_Write(GRAM[y][x]); // Отправка байта данных
}
}
}//----------------------------------------------
|
Работа в майне: инит интерфейса, запуск дисплея, заполнение видеопамяти и обновление кадра дисплея
|
PHP код:
|
Interface_Init(); // инит интерфейса
Display_Init(); // запуск дисплея
/* чето такое рисуется, сетка какаято */
for (uint8_t y=0; y‹8; y++)
{
for (uint8_t x=0; x‹128; x++)
{
if (!(x%8)) GRAM[y][x] = 0xE7;
else GRAM[y][x] = 0x81;
}
}
Refresh_frame(); // обновление кадра
|
Последний раз редактировалось NewWriter; 13.11.2016 в 14:06.
|
|
|
|
13.11.2016, 14:25
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
NewWriter, у тебя 100ка же у него F0...
miwutka, ЛА есть?
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:21.
|
|