|
|
  |
STM32L100 + HTS221 |
|
|
|
Jun 24 2015, 08:50
|

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

|
Цитата(BooSooV @ Jun 24 2015, 12:40)  что за DR? DataRegister  "bufPr1 = SPI2->DR;//Считываем данные из приемного б…" Цитата я ведь должен прислать датчику такое чтобы считать? 10111100 (BC) ? 0xBC должен ответить датчик. Цитата Синхроимпульсы есть? а как проверить правильно ли выбраны их фронты? Данные SPI-блоком в контроллере могут двигаться по переднему или по заднему фронту синхроимпульсов. Вот ответ датчика с правильным ID и будет признаком правильной настройки интерфейса. Наличие синхроимпульсов во время плавного спада данных не годится.
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Jun 24 2015, 09:22
|
Участник

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

|
Пойдем по списку)) смотрел на прямую DR, пишу в него BC (10111100) 1 - чтение 0 - без здвига 111100 - 6 разрядный адрес 0F задом наперед можно как нибудь решить проблему плавного спада? Я домой, дальнейшие пытки датчика продолжатся завтра с 9:00 =)
Сообщение отредактировал IgorKossak - Jun 25 2015, 16:12
Причина редактирования: бездумное цитирование
|
|
|
|
|
Jun 24 2015, 09:54
|

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

|
Стоять!!!!! Назад!!!!! В DR 0xBC писать не надо. Это датчик во втором байте должен вернуть (т.е. процессор вычитать). Вот примерно так:
По поводу плавного спада: надо разобраться с исходным уровнем и активным фронтом SCK.
Сообщение отредактировал IgorKossak - Jun 25 2015, 16:13
Причина редактирования: бездумное цитирование
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Jun 25 2015, 05:32
|
Участник

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

|
AD5 AD4.....AD0 они ведь идут задом наперед, не надо ли и адрес в бинарном коде писать задом наперед? Так ведь чтобы что то передать это что то надо записать в DR, оттуда и считать что пришло, разве нет?
Сообщение отредактировал IgorKossak - Jun 25 2015, 16:13
Причина редактирования: бездумное цитирование
|
|
|
|
|
Jun 25 2015, 07:36
|
Участник

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

|
увидел только что одну проблему, мой код почему то на отправку генерит 16 импульсов, и ничего не генерит на прием, я думал что это 8 на передачу и 8 на прием, а оказалось что на прием воще ничего нет, сейчас пробую другой пример под себя переделать, об успехах отпишусь
Сообщение отредактировал IgorKossak - Jun 25 2015, 16:14
Причина редактирования: бездумное цитирование
|
|
|
|
|
Jun 25 2015, 07:49
|

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

|
CODE SPI2->CR1 |= SPI_CR1_BIDIOE; //BIDIOE передача SPI2->DR = 0x8F; //Пишем в буфер передатчика SPI1. while(!(SPI2->SR & SPI_SR_TXE));// Ожидаем окончания передачи данных SPI2->CR1 |= SPI_CR1_BIDIOE; //BIDIOE передача
for(uint32_t i=0; i<0x000FFFFF; i++); //Прием данных.
SPI2->CR1 &= ~ SPI_CR1_BIDIOE; //BIDIOE прием while(!(SPI2->SR & SPI_SR_RXNE));//приняли данные bufPr1 = SPI2->DR;//Считываем данные из приемного буфера SPI1. При этой операции происходит очистка буфера и сброс флага RXNE SPI2->CR1 |= SPI_CR1_BIDIOE; //BIDIOE передача
Ну откуда??? 8 синхроимпульсов от "SPI2->DR = 0x8F" и 8 синхроимпульсов от "SPI2->CR1 &= ~ SPI_CR1_BIDIOE"
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Jun 25 2015, 08:05
|
Участник

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

|
Ну откуда??? 8 синхроимпульсов от "SPI2->DR = 0x8F" и 8 синхроимпульсов от "SPI2->CR1 &= ~ SPI_CR1_BIDIOE"[/quote] если бы я знал)) я закоментил все, оставил только отправку, а как было 16 импульсов так и осталось
Сообщение отредактировал IgorKossak - Jun 25 2015, 16:14
Причина редактирования: бездумное цитирование
|
|
|
|
|
Jun 26 2015, 06:35
|
Участник

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

|
Цитата(Obam @ Jun 25 2015, 08:35)  • 8- or 16-bit transfer frame format selection но у меня выставлен формат данных 8, и вроде он должен отправлять и принимать по 8 импульсов, но на самом деле как я понял по его работе, он первую половину воспринимает как отправляемое сообщение, а вторую часть как получаемое, короче я воще ничего не понимаю, запустил код на Дискавери, думал может что разведено не так,а один фиг при некоторых комбинациях вижу плавный спад Передаю 2A, размер данных 8 бит, прицепил к осцилографу два щупа, и получил вот такое соответствие, первый такт второй данные Такое разве нормально?
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 26 2015, 07:03
|
Участник

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

|
Меня смущает то, что в даташите на датчик, начало импульсов в шине данных совпадает с падением в шине такта, а у нас с подъёмом, это нормально?
Сообщение отредактировал IgorKossak - Jun 26 2015, 17:03
Причина редактирования: бездумное цитирование
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 26 2015, 07:05
|

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

|
"но у меня выставлен формат данных 8, и вроде он должен отправлять и принимать по 8 импульсов, но на самом деле как я понял по его работе, он первую половину воспринимает как отправляемое сообщение, а вторую часть как получаемое"
Во-первых, кто он? Во-вторых, первый байт - адрес в датчике, а второй байт - данные (если запись в датчик) или ответ датчика (если чтение из него).
"SPI2->DR = 0x8F" команда, дающая передачу первого байта; "SPI2->CR1 &= ~ SPI_CR1_BIDIOE" команда, дающая прием второго байта. Если бы надо было записать данные в датчик, то использовалась бы вторая команда "SPI2->DR = 0x**".
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Jun 26 2015, 07:11
|
Участник

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

|
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. Вот выдержка из даташита, которая говорит тоже самое Можно как то настроить чтобы он не по возрастанию читал линию данных а по падению
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|