реклама на сайте
подробности

 
 
> STM32F051 Интерфейс I2C, + ЖКИ RDX0032-GC
Влад Р.
сообщение Jun 27 2013, 14:00
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



Всем доброго времени суток!

Разбираюсь с I2C на STM32F051. В качействе слейва - ЖКИ RDX0032-GC. Процедура инициализации контроллера предварительно отработана на другом МК.

Шина SDA - на PB7, SCL - на PB6, Reset ЖКИ - на PB0. SDA и SDL к питанию подтянул. Номинал резисторов - 10 кОм.

Тактирую периферию, настраиваю, начинаю обмен и... ничего. Затык на первом же байте данных. Вероятно, неправильно адресую индикатор, но по неимению логического анализатора увидеть, что на самом деле отправляет МК, не могу.

Вот код:
CODE
/* Тактируем порт в/в B */
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;

/* Настраиваем пины */
GPIOB->MODER &= ~(GPIO_MODER_MODER0 | GPIO_MODER_MODER6 | GPIO_MODER_MODER7); // Срасываем настройки режима работы пинов
GPIOB->MODER |= GPIO_MODER_MODER0_0; // Режим выхода
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_0; // Режим двухтактного выхода
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR0; // Отключаем подтягивающие резисторы
GPIOB->MODER |= GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1; // Режим альтернативной функции
GPIOB->OTYPER |= GPIO_OTYPER_OT_6 | GPIO_OTYPER_OT_7; // Режим выхода с открытым стоком

GPIOB->ODR |= GPIO_ODR_0; // Снять сброс
delay_ms(10);

/* Тактируем модуль периферии I2C1 */
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;

/* Включам модуль периферии I2C1 */
I2C1->CR1 &= ~I2C_CR1_PE; // Вылючаем интерфейс I2C
I2C1->CR1 &= ~(I2C_CR1_ANFOFF | I2C_CR1_DFN); // Включаем аналоговый и выключаем
// цировой фильтр шумов
I2C1->TIMINGR = (1<<28) | (0x4<<20) | (0x2<<16) | (0xF<<8) | (0x13<<0); // Настраиваем тайминги (пробовал и др. параметры)
I2C1->CR1 |= I2C_CR1_PE; // Включаем интерфейс I2C
I2C1->CR2 |= (8<<16) | I2C_CR2_AUTOEND | (0x38<<1); // Будет отправлено (записано) 8 байт данных
// и стоп-бит на 7-битный адрес 0b0111000
I2C1->CR2 |= I2C_CR2_START; // Генерируем старт-бит
while (!(I2C1->ISR & I2C_ISR_BUSY)); // Ждем, пока сгенерируется
I2C1->TXDR = 0xEB; // Первый байт инициализации ЖКИ
while (!(I2C1->ISR & I2C_ISR_TXE)); // Ждем освобождения буфера передачи


Библиотеки не предлагать! Надеюсь на вашу помощь sm.gif

Сообщение отредактировал IgorKossak - Jun 27 2013, 15:25
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kovigor
сообщение Jun 27 2013, 20:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Влад Р. @ Jun 27 2013, 17:00) *
ЖКИ RDX0032-GC.

UC1601s - это капут. У него слабый передатчик, в результате уровень лог.0 на шине недопустимо завышен (~0.6V). Для некоторых МК это не важно, а для других - недопустимо. Например, у меня этот индикатор идеально работал на AVR и совершенно непредсказуемо работал на i.MX53 от FreeScale. исследование (длительное и основательное) и сравнение уровней, выдаваемых этой ущербной ИС с уровнями, формируемыми нормальными абонентами шины, говорит о том, что UC1601s на шине работает некорректно. Никакие подтяжки и проч. ситуацию не спасают - горбатого может исправить разве что могила. Лично я для себя решил никогда индикаторы на этом чипе не использовать ...
P.S. Забыл сказать: ножку сброса индикатора ни в коем случае не оставляйте неподключенной, что бы там в документации ни писали ...
Go to the top of the page
 
+Quote Post
Влад Р.
сообщение Jun 27 2013, 21:34
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



Цитата(Golikov A. @ Jun 27 2013, 22:16) *
а вот это что делает?
I2C1->CR2 |= I2C_CR2_START;

Строка I2C1->CR2 |= I2C_CR2_START; говорит модулю I2C, что можно начинать передачу (генерировать старт-бит).

Цитата(kovigor @ Jun 27 2013, 23:22) *
UC1601s - это капут. У него слабый передатчик, в результате уровень лог.0 на шине недопустимо завышен (~0.6V). Для некоторых МК это не важно, а для других - недопустимо. Например, у меня этот индикатор идеально работал на AVR и совершенно непредсказуемо работал на i.MX53 от FreeScale. исследование (длительное и основательное) и сравнение уровней, выдаваемых этой ущербной ИС с уровнями, формируемыми нормальными абонентами шины, говорит о том, что UC1601s на шине работает некорректно. Никакие подтяжки и проч. ситуацию не спасают - горбатого может исправить разве что могила. Лично я для себя решил никогда индикаторы на этом чипе не использовать ...
P.S. Забыл сказать: ножку сброса индикатора ни в коем случае не оставляйте неподключенной, что бы там в документации ни писали ...


Думаю, проблема не в этом. С LPC1114 ЖКИ нормально общался. ST, конечно, это совсем другой огород...

Кто-нибудь уже работал с I2C в режиме мастера-передатчика на этом камне?

Сообщение отредактировал Влад Р. - Jun 27 2013, 21:37
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 28 2013, 08:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Влад Р. @ Jun 28 2013, 00:34) *
Думаю, проблема не в этом. С LPC1114 ЖКИ нормально общался. ST, конечно, это совсем другой огород...

В этом или не в этом - не важно. Но одного этого уже достаточно для того, чтобы индикаторы на этом чипе не использовать. Если это, конечно, не разовая поделка для себя ...
Go to the top of the page
 
+Quote Post
alexdos
сообщение Jun 28 2013, 10:14
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(kovigor @ Jun 28 2013, 11:43) *
В этом или не в этом - не важно. Но одного этого уже достаточно для того, чтобы индикаторы на этом чипе не использовать. Если это, конечно, не разовая поделка для себя ...


"С LPC1114 ЖКИ нормально общался. ST, конечно, это совсем другой огород..." а что из этого достаточно ?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jun 28 2013, 10:24
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(alexdos @ Jun 28 2013, 13:14) *
а что из этого достаточно ?

Лично для меня достаточно того, что этот индикатор ведет себя на шине некорректно, посему использовать его в коммерческих проектах я бы не стал. Разбираться в правильном использовании компонента, который ведет себя некорректно, я бы тоже не стал, ибо не вижу в этом смысла. Вместо этого я бы просто подобрал другой индикатор ...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 13:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01414 секунд с 7
ELECTRONIX ©2004-2016