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

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> STM32L100 + HTS221
BooSooV
сообщение Jun 26 2015, 07:14
Сообщение #46


Участник
*

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



Цитата(Obam @ Jun 26 2015, 07:05) *
"но у меня выставлен формат данных 8, и вроде он должен отправлять и принимать по 8 импульсов, но на Во-первых, кто он?

ОН контроллер)) ко е что прояснилось, но вопросы с чтением по падению или возрастанию в линии тактирования открыты

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


Знающий
****

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



Цитата(BooSooV @ Jun 26 2015, 11:11) *
The first bit (bit 0) starts at the first falling edge of SCL after the falling edge
of CS while the last bit (bit 15, bit 23,...) starts at the last falling edge of SCL just before the
rising edge of CS.
Вот выдержка из даташита, которая говорит тоже самое
Можно как то настроить чтобы он не по возрастанию читал линию данных а по падению



Биты CPOL, CPHA в настройках SPI


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


Участник
*

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



Цитата(Obam @ Jun 26 2015, 07:13) *
Данные у вас меняются по заднему фронту SCL, фиксируются по переднему фронту. Всё нормально.

Похоже и правда все норм))
от того страннее что ничего не работает))


Цитата(Obam @ Jun 26 2015, 07:17) *
Биты CPOL, CPHA в настройках SPI

этот вопрос снят, вроде и впрямь и так все правильно работает
зато вот какая странность
Это нормально? я думал что мое сообщение должно идти первым а не вторым?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 07:29
Сообщение #49


Знающий
****

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



Ну что?

SPI2->CR1 |= SPI_CR1_CPOL; //исходное состояние SCK==1
SPI2->CR1 |= SPI_CR1_CPHA; //capture 0-->1
не судьба?


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


Участник
*

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



сейчас сделаю)) посмотрим что будет

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


Знающий
****

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



Цитата(BooSooV @ Jun 26 2015, 11:29) *
Похоже и правда все норм))
от того страннее что ничего не работает))



этот вопрос снят, вроде и впрямь и так все правильно работает
зато вот какая странность
Это нормально? я думал что мое сообщение должно идти первым а не вторым?


Какой смысл вашего сообщения? Запись в датчик по адресу 0x00? При том что: Reserved - 0x00..0x0E - Do not modify.


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


Участник
*

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



Цитата(Obam @ Jun 26 2015, 07:37) *
Какой смысл вашего сообщения? Запись в датчик по адресу 0x00? При том что: Reserved - 0x00..0x0E - Do not modify.

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



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

GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2);

SPI_I2S_SendData(SPI2, 0x8F);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);

Delay(1);
GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2);
Delay(100);
Сейчас юзаю такой код, чисто отсылаю и не опрашиваю
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 08:02
Сообщение #53


Знающий
****

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



Это одна команда SPI2->DR = 0x8F?
Вот что хотите делайте, но на диаграмме 16-битовый обмен: 0x008F.

"Сейчас юзаю такой код, чисто отсылаю и не опрашиваю "
Нельзя так делать: цикл шины датчика должен быть завершённым; впрочем так и есть - запись по адресу 0x00 числа 0x8F что запрещено. Изнасилованный HTS221 crying.gif

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


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


Участник
*

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



Цитата(Obam @ Jun 26 2015, 08:02) *
Это одна команда SPI2->DR = 0x8F?
Вот что хотите делайте, но на диаграмме 16-битовый обмен: 0x008F.

CODE
void Init_SPI2()
{
SPI_InitTypeDef SPI_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

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

init_GPIO_for_SPI2();

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

SPI_Init(SPI2,&SPI_InitStructure);

SPI_Cmd(SPI2,ENABLE);

GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2);
}


CODE

SPI2->CR1 |= SPI_CR1_CPOL; //исходное состояние SCK==1
SPI2->CR1 |= SPI_CR1_CPHA; //capture 0-->1
while(1)
{

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2);

//while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}

SPI_I2S_SendData(SPI2, 0x8F);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
/*
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx);

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
uint8_t data = SPI_I2S_ReceiveData(SPI2);
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);
*/
GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2);
Delay(100);
/*
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}
uint8_t data = SPI_I2S_ReceiveData(SPI2);
*/

}


Вот хоть убейте, ничего больше нету

Заменил отправку на
SPI_I2S_SendData(SPI2, 0x8F00);
теперь сдвинулось на первые 8 бит

Сообщение отредактировал BooSooV - Jun 26 2015, 08:07
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 08:22
Сообщение #55


Знающий
****

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



"Вот хоть убейте…"
" SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b; "

Из солёного огурца пристрелить разве что…

Цитата(BooSooV @ Jun 26 2015, 12:13) *
Заменил отправку на
SPI_I2S_SendData(SPI2, 0x8F00);
теперь сдвинулось на первые 8 бит


Да ё-ж-моё!!! 8-битный интерфейс!!! Читать после 0x8F в ваших 0x8F00 чем будете?


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


Участник
*

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



Цитата(Obam @ Jun 26 2015, 08:22) *
"Вот хоть убейте…"
" SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b; "

Из солёного огурца пристрелить разве что…



Да ё-ж-моё!!! 8-битный интерфейс!!! Читать после 0x8F в ваших 0x8F00 чем будете?

ну хоть на осцилографе правильную картинку увидел))
подскажите как правильно сдвинуть сообщение на первые 8 бит?
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 08:33
Сообщение #57


Знающий
****

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



Цитата(BooSooV @ Jun 26 2015, 12:30) *
ну хоть на осцилографе правильную картинку увидел))
подскажите как правильно сдвинуть сообщение на первые 8 бит?

Ни фига не правильную! А "сообщение" не двигать, а SPI 8-битный должен быть.


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


Участник
*

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



Цитата(Obam @ Jun 26 2015, 08:33) *
Ни фига не правильную! А "сообщение" не двигать, а SPI 8-битный должен быть.

написал
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
теперь 8 импульсов тактирования

имеем

как же теперь получить ещё 8 тактов на которые должен ответить датчик?

кажется что то понял

во мой код на отправку и получение, пока что без датчика, просто смотрю что генерит контроллер
CODE
while(1)
{

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {}
GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2);

//while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {}

SPI_I2S_SendData(SPI2, 0x8F);
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);

//Delay(2);
for(uint32_t i=0; i<0x000001FF; i++); // время по подачи импульсов на ответ
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx);

while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
uint8_t data = SPI_I2S_ReceiveData(SPI2);
//Delay(2);
for(uint32_t i=0; i<0x000000FF; i++); // подолжительность импульсов на ответ
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx);

GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2);
Delay(100);
/*
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {}
uint8_t data = SPI_I2S_ReceiveData(SPI2);
*/

}


получил
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 09:25
Сообщение #59


Знающий
****

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



http://electronix.ru/forum/index.php?showt...t&p=1347675

На приём почему 16бит?

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


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


Участник
*

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



Цитата(Obam @ Jun 26 2015, 09:25) *
http://electronix.ru/forum/index.php?showt...t&p=1347675

На приём почему 16бит?

на прием не 16, на прием он их генерит пока задержка не кончится, а надо ровно 8? больше нельзя?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 20:00
Рейтинг@Mail.ru


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