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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> STM32L100 + HTS221
Obam
сообщение Jun 26 2015, 09:35
Сообщение #61


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(BooSooV @ Jun 26 2015, 13:30) *
на прием не 16, на прием он их генерит пока задержка не кончится, а надо ровно 8? больше нельзя?

Вам можно!!!

Данные 8-разрядные, детский сад - штаны на лямках!

Убирайте задержки.

Сообщение отредактировал Obam - Jun 26 2015, 09:36


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
BooSooV
сообщение Jun 26 2015, 10:01
Сообщение #62


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 10-06-15
Пользователь №: 87 107



убрал, сигналы наложились, в линии тактирования 8 тактов, а в канале данных теже такты только раз в 5 меньше по вольтажу

Сообщение отредактировал IgorKossak - Jun 26 2015, 17:09
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 10:08
Сообщение #63


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Не " наложились" а придвинулись; если датчика нет то просто наводка синхроимпульсов на вход.

Сообщение отредактировал IgorKossak - Jun 26 2015, 17:10
Причина редактирования: бездумное цитирование


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
BooSooV
сообщение Jun 26 2015, 10:19
Сообщение #64


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 10-06-15
Пользователь №: 87 107



да они так придвинулись что осталось всего 8 синхроимпульсов)), и на передачу и на прием
а вот эта строка
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}
почему то не дает достаточных задержек( заходит 3 раза и пролетает дальше, мерил)


ведь импульсов то должно быть все равно 16

Сообщение отредактировал IgorKossak - Jun 26 2015, 17:10
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 10:40
Сообщение #65


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



По моему, экспериментов - достаточно; настал момент ещё раз, но медленно и внимательно, прочитать RM0038 (понятно о чём я?) стр.741-767.
Там есть чудесные диаграммы как ведут себя флаги в SPI_SR.

Сообщение отредактировал IgorKossak - Jun 26 2015, 17:09
Причина редактирования: бездумное цитирование


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 26 2015, 17:09
Сообщение #66


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Obam, BooSooV, перечитайте ещё раз правила, особенно п. 3.4
Мне уже надоело править Ваши посты и надеяться, что Вы заметите мои комментарии.
Ещё раз замечу бездумное цитирование - забаню обоих на две недели.
Модератор.
Go to the top of the page
 
+Quote Post
BooSooV
сообщение Jul 13 2015, 06:58
Сообщение #67


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 10-06-15
Пользователь №: 87 107



После долгих мучений перешел на вот такой код
инициализации:
CODE
SPI_InitTypeDef SPI_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

SPI_Cmd(SPI2, DISABLE);
SPI_I2S_DeInit(SPI2);



// Настройки SPI2
SPI_InitStructure.SPI_Direction=SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial=7;

SPI_Init(SPI2,&SPI_InitStructure);

SPI_Cmd(SPI2,ENABLE);



Обмен данными:
CODE
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
for(uint32_t i=0; i<0x0000003F; i++);
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
SPI2->DR = 0xBC;
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
for(uint32_t i=0; i<0x0000003F; i++);

SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
for(uint32_t i=0; i<0x0000003F; i++);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}
uint8_t temp2 = SPI2->DR;
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
for(uint32_t i=0; i<0x0000003F; i++);
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
GPIO_SetBits(GPIOB, GPIO_Pin_12);


Датчик молчит.
а вот что на осциллографе:

HEEELP
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Obam
сообщение Jul 14 2015, 08:26
Сообщение #68


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Не 0xBC, а 0x8F ! Число 0xBC дожно быть возвращено датчиком.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
BooSooV
сообщение Jul 15 2015, 05:22
Сообщение #69


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 10-06-15
Пользователь №: 87 107



да хоть так хоть так, все равно ничего не отвечает
Go to the top of the page
 
+Quote Post
BooSooV
сообщение Jul 15 2015, 06:39
Сообщение #70


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 10-06-15
Пользователь №: 87 107



делал обмен по такому же интерфейсу(по одному проводу данных) на одной плате, и получилось, все работает вот код:
CODE
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}

SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Rx);

GPIO_ResetBits(GPIOB, GPIO_Pin_4);

SPI2->DR = 0x07;

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {}

uint8_t temp1 = SPI1->DR;

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}

////////////////////////////////////////////////////////////////////////////

SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx);
SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Tx);

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}

for(uint32_t i=0; i<0x0000003F; i++);

SPI1->DR = 0x04;

while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {}
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}

uint8_t temp2 = SPI2->DR;

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}

SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Rx);

GPIO_SetBits(GPIOB, GPIO_Pin_4);while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}

SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Rx);

GPIO_ResetBits(GPIOB, GPIO_Pin_4);

SPI2->DR = 0x07;

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {}

uint8_t temp1 = SPI1->DR;

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}

////////////////////////////////////////////////////////////////////////////

SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx);
SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Tx);

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}

for(uint32_t i=0; i<0x0000003F; i++);

SPI1->DR = 0x04;

while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) {}
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}

uint8_t temp2 = SPI2->DR;

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}

SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
SPI_BiDirectionalLineConfig(SPI1,SPI_Direction_Rx);

GPIO_SetBits(GPIOB, GPIO_Pin_4);


и осцилограммы
И вот вопрос, почему тут вся передача проходит норм а с датчиком нет?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Obam
сообщение Jul 15 2015, 07:58
Сообщение #71


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(BooSooV @ Jul 15 2015, 09:22) *
да хоть так хоть так, все равно ничего не отвечает


Ну значит хана датчику, "завоспитыван" отладкой кода.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
RoadRunner
сообщение Sep 28 2015, 08:31
Сообщение #72


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

Группа: Участник
Сообщений: 136
Регистрация: 13-05-11
Пользователь №: 64 972



Интересно, чем все закончилось)) А то у меня аналогичные проблемы с этим гребаным датчиком (hts221): передаю ему b"10001111" после чего перевожу линию данных на прием, генерю 8 импульсов SCK и ожидаю на шине данных 0xBC. Вместо этого там плавно нарастающий сигнал, который читается как 0xFF. Плавно нарастающий сигнал - это скорее всего колебания напряжения в третьем состоянии (десятые доли вольта), т.е. датчик просто отсутствует как драйвер, как будто неживой.

У кого нибудь вообще есть положительный опыт использования этого датчика в режиме SPI?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 10th July 2025 - 10:34
Рейтинг@Mail.ru


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