|
Как передать 7 бит по SPI ? |
|
|
|
Jul 9 2015, 07:24
|

Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 7-10-10
Из: Москва
Пользователь №: 59 985

|
Цитата(Lmx2315 @ Jul 9 2015, 10:22)  ..самодельным SPI в софтовой реализации. Вот только как реализовать его? Есть примерчик рабочий?
|
|
|
|
|
Jul 9 2015, 07:32
|

отэц
    
Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684

|
Цитата(uzzzer @ Jul 9 2015, 11:24)  Вот только как реализовать его? Есть примерчик рабочий? рабочего примерчика для 7-ми бит нет, наверное это будет что то вроде такого: Цитата void spisend (char d) {
int i=0;
PORTA &= ~0b00000010; // CS = 0 delay(1); for (i=0;i<7;i++) { if ((d&0x01)==0x01) PORTA |= 0b00000100; else PORTA &= ~0b00000100; //данные MOSI delay(1); PORTA |= 0b00001000; // CLK delay(1); PORTA &= ~0b00001000; delay(1); d=d>>1; } PORTA |= 0b00000010; // CS = 1 }
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Jul 9 2015, 07:55
|

Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 7-10-10
Из: Москва
Пользователь №: 59 985

|
Цитата(Obam @ Jul 9 2015, 10:40)  Я правильно понял "четыре регистра соедененных каскадом,получается 7+7+7+7 битовый регистр."? Если правильно, то "разложить" 28 бит в 4 байта и заслать четырьмя посылками. К примеру, MSB-first: четыре старших бита нули, а остальные 28 нужные биты подряд. Вы все правильно поняли  Вот в этом у меня и вопрос, как это сделать правильно? Я уже поднимал подобный вопрос в теме: http://electronix.ru/forum/index.php?showtopic=127773С регистром 595 проблем нет, все шлется, индикаторы подсвечиваются и т.д. А вот с семибитными регистрами проблема.
|
|
|
|
|
Jul 9 2015, 08:03
|

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

|
d[0]=d[0] | (d[1] << 7); d[1]=(d[1] >> 2) | (d[2] << 6); d[2]=(d[2] >> 3) | (d[3] << 5); d[3]=(d[3] >> 4); Вот как-то так
Сообщение отредактировал Obam - Jul 9 2015, 08:03
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Jul 9 2015, 08:08
|

отэц
    
Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684

|
Цитата(uzzzer @ Jul 9 2015, 11:55)  Я уже поднимал подобный вопрос в теме: http://electronix.ru/forum/index.php?showtopic=127773С регистром 595 проблем нет, все шлется, индикаторы подсвечиваются и т.д. А вот с семибитными регистрами проблема. ..компонуйте ваши биты в 32-битную переменную, через сдвиги. А потом её отправляйте в 4-ре регистра. a = 01111111 b = 01111110 c = 01111100 d = 01111000 x = (a)+(b<<7)+(c<<14)+(d<<21) spi(x) отправлять старшим битом вперёд.
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Jul 9 2015, 09:30
|

Частый гость
 
Группа: Свой
Сообщений: 78
Регистрация: 7-10-10
Из: Москва
Пользователь №: 59 985

|
Цитата(Lmx2315 @ Jul 9 2015, 11:08)  ..компонуйте ваши биты в 32-битную переменную, через сдвиги. А потом её отправляйте в 4-ре регистра. a = 01111111 b = 01111110 c = 01111100 d = 01111000
x = (a)+(b<<7)+(c<<14)+(d<<21)
spi(x)
отправлять старшим битом вперёд. Немного не понятна суть метода.. получается, что a,b,c,d - это переменные, которые загоняются по очереди в регистры, тогда почему число x = (a)+(b<<7)+(c<<14)+(d<<21) в итоге получаетя 39 разрядов ?
|
|
|
|
|
Jul 9 2015, 09:45
|

отэц
    
Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684

|
Цитата(uzzzer @ Jul 9 2015, 13:30)  Немного не понятна суть метода.. получается, что a,b,c,d - это переменные, которые загоняются по очереди в регистры, тогда почему число x = (a)+(b<<7)+(c<<14)+(d<<21) в итоге получаетя 39 разрядов ? a,b,c,d - это ваши данные которые хотите разместить в 7-ми битных регистрах (т.е. это 32 битные переменные в микрокотроллере), заполняете младшие 7-мь бит этих переменных. Вы заносите в каждую переменную ваши данные а потом складываете переменные по формуле для х - тоже 32 битная переменная, потому в ней не может оказаться больше 32 бит  . Отправляете в SPI (x) .
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|