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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> STM32L100 + HTS221
Obam
сообщение Jun 24 2015, 08:50
Сообщение #31


Знающий
****

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



Цитата(BooSooV @ Jun 24 2015, 12:40) *
что за DR?

DataRegister wink.gif
"bufPr1 = SPI2->DR;//Считываем данные из приемного б…"

Цитата
я ведь должен прислать датчику такое чтобы считать? 10111100 (BC) ?

0xBC должен ответить датчик.

Цитата
Синхроимпульсы есть? а как проверить правильно ли выбраны их фронты?


Данные SPI-блоком в контроллере могут двигаться по переднему или по заднему фронту синхроимпульсов.
Вот ответ датчика с правильным ID и будет признаком правильной настройки интерфейса.

Наличие синхроимпульсов во время плавного спада данных не годится.


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


Участник
*

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



Пойдем по списку))
смотрел на прямую DR, пишу в него BC (10111100)
1 - чтение
0 - без здвига
111100 - 6 разрядный адрес 0F задом наперед

можно как нибудь решить проблему плавного спада?

Я домой, дальнейшие пытки датчика продолжатся завтра с 9:00 =)

Сообщение отредактировал IgorKossak - Jun 25 2015, 16:12
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 24 2015, 09:54
Сообщение #33


Знающий
****

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



Стоять!!!!! Назад!!!!!

В DR 0xBC писать не надо. Это датчик во втором байте должен вернуть (т.е. процессор вычитать).
Вот примерно так:
Прикрепленное изображение

По поводу плавного спада: надо разобраться с исходным уровнем и активным фронтом SCK.

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


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


Участник
*

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



AD5 AD4.....AD0 они ведь идут задом наперед, не надо ли и адрес в бинарном коде писать задом наперед?
Так ведь чтобы что то передать это что то надо записать в DR, оттуда и считать что пришло, разве нет?

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


Знающий
****

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



Шутки шутками, но доку (DS на датчик и контроллер и RefMan на контроллер) - курить до просветления.

Данные в датчик должны "вдуваться" старшим (MSB) битом вперёд: R\~Wбит это старший, AD5..AD0 - записаны от старшего к младшему => 10001111b. Зачем это преворачивать?

"Так ведь чтобы что то передать это что то надо записать в DR, оттуда и считать что пришло, разве нет?"
Так вы и писали в DR 0x8F при BIDIOE==1, а как этот байт был отправлен, то BIDIOE 1-->0 переключит SPI на приём и автоматически вычитает (R\~W==1 не забыли?) из датчика
данные по только что переданному адресу, их вы увидите тоже в DR.

И ещё: если не будет выполнено "This line is driven at the falling edge of SCL and should be captured at the rising edge of SCL." то не правильно будут тактироваться данные.
CPOL, CPHA соответствуют требуемому?


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


Участник
*

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



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

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


Знающий
****

Группа: Участник
Сообщений: 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"


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


Участник
*

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



Ну откуда??? 8 синхроимпульсов от "SPI2->DR = 0x8F" и 8 синхроимпульсов от "SPI2->CR1 &= ~ SPI_CR1_BIDIOE"[/quote]
если бы я знал)) я закоментил все, оставил только отправку, а как было 16 импульсов так и осталось

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


Знающий
****

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



Цитата(BooSooV @ Jun 25 2015, 12:05) *
если бы я знал)) я закоментил все, оставил только отправку, а как было 16 импульсов так и осталось


• 8- or 16-bit transfer frame format selection



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


Участник
*

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



Цитата(Obam @ Jun 25 2015, 08:35) *
• 8- or 16-bit transfer frame format selection

но у меня выставлен формат данных 8, и вроде он должен отправлять и принимать по 8 импульсов, но на самом деле как я понял по его работе, он первую половину воспринимает как отправляемое сообщение, а вторую часть как получаемое, короче я воще ничего не понимаю,
запустил код на Дискавери, думал может что разведено не так,а один фиг при некоторых комбинациях вижу плавный спад


Передаю 2A, размер данных 8 бит, прицепил к осцилографу два щупа, и получил вот такое соответствие,
первый такт
второй данные
Такое разве нормально?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 06:48
Сообщение #41


Знающий
****

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



А что не так?
[attachment=93482:_x9_.png]
00101010b==0x2A старшим битом вперёд. Всё нормально.


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


Участник
*

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



Меня смущает то, что в даташите на датчик, начало импульсов в шине данных совпадает с падением в шине такта, а у нас с подъёмом, это нормально?

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

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


Знающий
****

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



"но у меня выставлен формат данных 8, и вроде он должен отправлять и принимать по 8 импульсов, но на самом деле как я понял по его работе, он первую половину воспринимает как отправляемое сообщение, а вторую часть как получаемое"

Во-первых, кто он?
Во-вторых, первый байт - адрес в датчике, а второй байт - данные (если запись в датчик) или ответ датчика (если чтение из него).

"SPI2->DR = 0x8F" команда, дающая передачу первого байта;
"SPI2->CR1 &= ~ SPI_CR1_BIDIOE" команда, дающая прием второго байта.
Если бы надо было записать данные в датчик, то использовалась бы вторая команда "SPI2->DR = 0x**".


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


Участник
*

Группа: Участник
Сообщений: 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.
Вот выдержка из даташита, которая говорит тоже самое
Можно как то настроить чтобы он не по возрастанию читал линию данных а по падению
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 26 2015, 07:13
Сообщение #45


Знающий
****

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



Цитата(BooSooV @ Jun 26 2015, 11:03) *
Меня смущает то, что в даташите на датчик, начало импульсов в шине данных совпадает с падением в шине такта, а у нас с подъёмом, это нормально?


Данные у вас меняются по заднему фронту SCL, фиксируются по переднему фронту. Всё нормально.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd July 2025 - 23:03
Рейтинг@Mail.ru


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