21.09.2016, 02:05
|
|
Вид на жительство
Регистрация: 03.06.2006
Адрес: Израиль
Сообщений: 388
Сказал спасибо: 2,063
Сказали Спасибо 337 раз(а) в 156 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Я подключал к 5-ти.
К каким выводам Вы подключили I2C?
|
|
|
|
21.09.2016, 09:42
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
miwutka, Не чтение а запись
Код:
|
#define SSD1306_OWN_ADDRESS 0x3C// 0x3D
void ssd1306_send(uint8_t control_byte, uint8_t data)
{
I2C1-›CR2 = I2C_CR2_AUTOEND | (2‹‹16) | (SSD1306_OWN_ADDRESS‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR = control_byte;
I2C1-›CR2 |= I2C_CR2_START;
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = data;
} |
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
21.09.2016, 09:51
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Сообщение от miwutka
|
Появилось несколько вопросов. Переделываю библиотеку с 10х на 030. Есть непонятки с регистрами.
Тут правильная замена?
|
C 10x на F0 не перетянешь, модуль i2c совершенно другой...
__________________
Осторожно , злой кот
|
|
|
|
21.09.2016, 17:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Сообщение от dosikus
|
C 10x на F0 не перетянешь, модуль i2c совершенно другой...
|
Это я и увидел.... ((( Там всё на автомате както работает на регистрах. Удобнее наверно .
Сообщение от Zoosman
|
К каким выводам Вы подключили I2C?
|
Та по даташиту порт А SCL, SDA вроде ноги 9,10. Ну я еепромку цеплял - работает.
Сообщение от dosikus
|
#define SSD1306_OWN_ADDRESS 0x3C// 0x3D
|
У меня адрес в примере 0х78. А у вас 0х3С. Какой правильный? )))
|
|
|
|
21.09.2016, 17:13
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Сообщение от miwutka
|
У меня адрес в примере 0х78. А у вас 0х3С. Какой правильный? )))
|
Тот что в даташите.
А он 7битный и равен 0x3C(D) и занимает старшие 7бит отсюда и сдвиг влево на 1 бит. Что в итоге и дает твои 0x78(A). А нулевой бит это R/W.
Пора, пора начать читать...
Цитата:
|
2) The slave address is following the start condition for recognition use. For the SSD1306, the slave
address is either “b0111100” or “b0111101” by changing the SA0 to LOW or HIGH (D/C pin acts as
SA0).
|
__________________
Осторожно , злой кот
|
|
|
|
21.09.2016, 22:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Сообщение от dosikus
|
А он 7битный и равен 0x3C(D) и занимает старшие 7бит отсюда и сдвиг влево на 1 бит. Что в итоге и дает твои 0x78(A).
|
Блин опять поверил либе. Там же для 10х либа. Там и был адрес 0х78. А надо было 0х3С ))) Я даташит открыл, увидел единички. Набрал с либы в калькулатор 78 в хексе. Увидел в битах ВРОДЕ оно и поверил... А оно не ОНО))...
Скажите чтобы выводить данные на дисплей нужно ТОЛЬКО писать?
|
|
|
|
21.09.2016, 22:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
dosikus, подскажите плиз....
вот чужой пример отправки данных для инита.
PHP код:
|
/* Write command */
#define SSD1306_WRITECOMMAND(command) ssd1306_I2C_Write(SSD1306_I2C, SSD1306_I2C_ADDR, 0x00, (command))
/* Init LCD */
SSD1306_WRITECOMMAND(0xAE); //display off
SSD1306_WRITECOMMAND(0x20); //Set Memory Addressing Mode
SSD1306_WRITECOMMAND(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
SSD1306_WRITECOMMAND(0xB0); //Set Page Start Address for Page Addressing Mode,0-7
SSD1306_WRITECOMMAND(0xC8); //Set COM Output Scan Direction
SSD1306_WRITECOMMAND(0x00); //---set low column address
SSD1306_WRITECOMMAND(0x10); //---set high column address
SSD1306_WRITECOMMAND(0x40); //--set start line address
SSD1306_WRITECOMMAND(0x81); //--set contrast control register
SSD1306_WRITECOMMAND(0xFF);
SSD1306_WRITECOMMAND(0xA1); //--set segment re-map 0 to 127
SSD1306_WRITECOMMAND(0xA6); //--set normal display
SSD1306_WRITECOMMAND(0xA8); //--set multiplex ratio(1 to 64)
SSD1306_WRITECOMMAND(0x3F); //
SSD1306_WRITECOMMAND(0xA4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
SSD1306_WRITECOMMAND(0xD3); //-set display offset
SSD1306_WRITECOMMAND(0x00); //-not offset
SSD1306_WRITECOMMAND(0xD5); //--set display clock divide ratio/oscillator frequency
SSD1306_WRITECOMMAND(0xF0); //--set divide ratio
SSD1306_WRITECOMMAND(0xD9); //--set pre-charge period
SSD1306_WRITECOMMAND(0x22); //
SSD1306_WRITECOMMAND(0xDA); //--set com pins hardware configuration
SSD1306_WRITECOMMAND(0x12);
SSD1306_WRITECOMMAND(0xDB); //--set vcomh
SSD1306_WRITECOMMAND(0x20); //0x20,0.77xVcc
SSD1306_WRITECOMMAND(0x8D); //--set DC-DC enable
SSD1306_WRITECOMMAND(0x14); //
SSD1306_WRITECOMMAND(0xAF); //--turn on SSD1306 panel
|
Я буду отправлять данные вот так
PHP код:
|
void ssd1306_write(uint16_t address, uint8_t data)
{
I2C1-›CR2 = I2C_CR2_AUTOEND | (3‹‹16) | (SSD1306_I2C_ADDR‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR =(uint8_t) (address››8); /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = (uint8_t)(address &0x00FF); /* Byte to send */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = data ; /* Byte to send */
}
|
исходя из этого #define SSD1306_WRITECOMMAND(command) ssd1306_I2C_Write(SSD1306_I2C, SSD1306_I2C_ADDR, 0x00, (command)) в моей функции нужно address тоже постоянно 0х00 писать? А data уже будет 0хAE потом 0x20,0x10,0xB0 и т.д....?
|
|
|
|
21.09.2016, 22:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Помогите понять немного принцип как к нему обращаться. Например я хочу включить дисплей. 0xAF - включить дисплей. Значит я пишу строку: ssd1306_write(0x00, 0xAF); ???
В моей функции мы передаем 16-бит адрес регистра а потом 8 бит данных. А как тут надо?
Наверно вот так?? Настраиваем 1 бит на передачу, автозавершение, пишем адрес дисплея, пишем в TXDR то что хотим передать, генерируем старт....
PHP код:
|
void ssd1306_write(uint8_t data)
{
I2C1-›CR2 = I2C_CR2_AUTOEND | (1‹‹16) | (SSD1306_I2C_ADDR‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR = data ; /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
}
|
|
|
|
|
21.09.2016, 23:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
сделал такой инит начальный. Реакции никакой у дисплея. Хоть бы засветился чтоли... ))
PHP код:
|
Init_I2C();
Delay_ms(100);
// ssd1306_write2(0xAF);
ssd1306_write2(0xAE); //display off
ssd1306_write2(0x20); //Set Memory Addressing Mode
ssd1306_write2(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
ssd1306_write2(0xB0); //Set Page Start Address for Page Addressing Mode,0-7
ssd1306_write2(0xC8); //Set COM Output Scan Direction
ssd1306_write2(0x00); //---set low column address
ssd1306_write2(0x10); //---set high column address
ssd1306_write2(0x40); //--set start line address
ssd1306_write2(0x81); //--set contrast control register
ssd1306_write2(0xFF);
ssd1306_write2(0xA1); //--set segment re-map 0 to 127
ssd1306_write2(0xA6); //--set normal display
ssd1306_write2(0xA8); //--set multiplex ratio(1 to 64)
ssd1306_write2(0x3F); //
ssd1306_write2(0xA4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
ssd1306_write2(0xD3); //-set display offset
ssd1306_write2(0x00); //-not offset
ssd1306_write2(0xD5); //--set display clock divide ratio/oscillator frequency
ssd1306_write2(0xF0); //--set divide ratio
ssd1306_write2(0xD9); //--set pre-charge period
ssd1306_write2(0x22); //
ssd1306_write2(0xDA); //--set com pins hardware configuration
ssd1306_write2(0x12);
ssd1306_write2(0xDB); //--set vcomh
ssd1306_write2(0x20); //0x20,0.77xVcc
ssd1306_write2(0x8D); //--set DC-DC enable
ssd1306_write2(0x14); //
ssd1306_write2(0xAF); //--turn on SSD1306 panel
|
|
|
|
|
22.09.2016, 00:19
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Дык, он же не совсем шибанутый на весь свой силиконовый мозг, чтобы взять и просто так заработать! Для него ты глухонемой сын конфы. Сниппетсы ты не смотрел, в даташит на SSD1306 не заглядывал, а ждёшь результата, как с моря погоды.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:46.
|
|