09.10.2016, 14:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Сообщение от dosikus
|
Вообще нет? Издеваешься, да?
|
понял )))) один кондер впаял но дисплей зависает еще )) Я понял что дело в железе. А вот на вашей фото на дисплее рисуется график. Надо будет и себе такое КАК-ТО запилить попозже..... )))
|
|
|
|
09.10.2016, 14:58
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
miwutka, там пока рисуется фигня, взятая отсюда
http://cadhouse.narod.ru/projects/oled/oled.htm
Кстати я неверно писал о записи с автоEND.
Там можно и больше 255 байт гнать.
Надо выставить бит RELOAD, в NBYTES загрузить 0xFF .
И в цикле вычитать из счетчика посылок 0xFF , когда значение счетчика будет меньше 0xFF сбросить RELOAD выставить AUTOEND и далее как обычно.
См. Figure 228. Transfer sequence flowchart for I2C master transmitter for N›255 bytes
А вот с DMA похоже можно только 255 отправлять...
А здесь посылка данных в ssd1306 для случая когда счетчик меньше 255.
Код:
|
void ssd1306_SendData(uint8_t *data, uint8_t count)
{
uint8_t index=0;
I2C1-›CR2 = I2C_CR2_AUTOEND | ((1+count)‹‹16) | (SSD1306_OWN_ADDRESS‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR = SSD1306_DATA_MODE;
I2C1-›CR2 |= I2C_CR2_START;
for(index=0;index‹=count-1;index++)
{
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = *data++ ; /* Byte to send */
}
} |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 09.10.2016 в 15:17.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
09.10.2016, 18:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Добывил таймауты в трех местах I2C - теперь дисплей не зависает.
|
|
|
|
09.10.2016, 19:22
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Плохо это всё! Там и без тайм аутов всё должно работать. Таймаут это уже как последний рубеж, когда и так всё работает хорошо.
|
|
|
|
09.10.2016, 21:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
STM32F0, дисплей зависал как когда я сделал частоту I2C 1.3 МГц. Дотронишся до платы - и втыкнула. Частоту вернул до 400 и всё стало стабильно. Где-товидел что через дросели дисплеи какие-то подключали. Так можно делать? Если да то какой номинал дроселей?
|
|
|
|
09.10.2016, 22:08
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Лучше резисторы подтяжки сигналов I2C уменьшить Ом до 500-800.
И скорость 1 МГц - опциональная, надо смотреть, принимает ли ее. На 100 кГц работают все устройства. 400 кГц - большинство. А 1 МГц и выше - по особому распоряжению
|
|
|
|
10.10.2016, 09:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Подскажите такой вопрос: мне нужно генерировать импульсы от 0 до 320 Гц. Для этого у меня формула такая
LEDpins[0] = (23920000/(F_Taho*200))*2;
TIM16-›PSC = LEDpins[0];
Если F_Taho = 0 то частота 12 кГц. Для этого я просто выключаю таймер. Но тогда ножка остается то в состоянии 1 то 0. Как принудительно ее в 0 перевести? В GPIO в каком то регистре можно писать чтобы ножка в 0 перевелась?
|
|
|
|
10.10.2016, 09:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,721
Сказал спасибо: 130
Сказали Спасибо 1,109 раз(а) в 528 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Я такой дисплей по I2C спокойно гнал до нескольких мегогерц ( цифры точные не помню). Короткие провода ( около 5 см). Резисторы подтяжки - штатные на плате дисплея.
Но не рискнул оставить надолго.
|
|
|
|
10.10.2016, 12:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
Это не помогло.....
PHP код:
|
TIM_Cmd(TIM17, DISABLE);
TIM_Cmd(TIM16, DISABLE);
GPIOB-›BSRR = GPIO_BSRR_BR_8; //сброс в 0
GPIOB-›BSRR = GPIO_BSRR_BR_9; //сброс в 0
|
|
|
|
|
10.10.2016, 12:39
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: OLED ssd1306 + STM32f030f4
И не поможет. Если выводы назначены как выходы альтернативных функций, то от обычных манипуляций с битами они отключены. Нужно использовать возможности таймера, в частности, регистра BDTR. Там есть табличка состояний выхода при различных комбинациях битов.
Также зависит от того, на каком этапе остановился таймер - до равенства с регистром сравнения или после. Обнулением счетного регистра можно принудительно установить его на 0
Последний раз редактировалось NewWriter; 10.10.2016 в 12:43.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:20.
|
|