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

 
 
> atmega 168 аппаратный SPI, чтение данных некратно 8бит
(vS)
сообщение Jul 13 2010, 02:05
Сообщение #1


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

Группа: Участник
Сообщений: 135
Регистрация: 13-07-06
Из: С-Пб
Пользователь №: 18 778



имею необходимость читать нестандартные данные, т.е. 4 бита, 30 бит, 12 бит....
второй день читаю даташит, уже сам почти все понял
пока у меня мнение, аппаратно вычитать такие данные нельзя, т.к. регистр сдвига 8и битный?

т.е. нужно писать свою либу или функцию?


--------------------
тут может быть какаято реклама
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 14)
mempfis_
сообщение Jul 13 2010, 04:06
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата((vS) @ Jul 13 2010, 05:05) *
т.е. нужно писать свою либу или функцию?


Soft-SPI - элементарная вещь.
Снизу пример на 16 бит. Легко можно модифицировать к любому кол-ву бит.
Функция одна т.к. чтение из SPI это та же самая запись с использованием возвращаемого функций результата.

Код
#define HI(x) SPI_PORT |= (1<<(x))
#define LO(x) SPI_PORT &= ~(1<<(x))

unsigned int SPIWriteWord(unsigned int cmd) {
  unsigned char i;
  unsigned int recv;
  recv = 0;
  LO(SCK);
  LO(nSS);
  for(i=0; i<16; i++) {
    if(cmd&0x8000) HI(SDI); else LO(SDI);
    HI(SCK);
    recv<<=1;    
    if( SPI_PIN&(1<<SDO) ) {
      recv|=0x0001;
    }
    LO(SCK);
    cmd<<=1;
  }
  HI(nSS);
  return recv;
}

Go to the top of the page
 
+Quote Post
(vS)
сообщение Jul 13 2010, 04:24
Сообщение #3


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

Группа: Участник
Сообщений: 135
Регистрация: 13-07-06
Из: С-Пб
Пользователь №: 18 778



дак я знаю, что элементарная smile.gif если честно, то с софтового варианта и начал.... но чот наверно на солнце перегрелся на выходных, решил сделать на аппаратном, раз он есть... и уперся
спасибо за пример smile.gif
кстати, в вашем варианте МАСТЕР, а у меня СЛЭЙВ wink.gif

собственно вопрос, можно ли аппаратным SPI считать МЕНЬШЕ 8 бит?

Сообщение отредактировал (vS) - Jul 13 2010, 04:27


--------------------
тут может быть какаято реклама
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 13 2010, 05:35
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



То что у Вас слейв Вы не уточнили...
Но если подумать то можно легко реализовать отслеживая состояние SS и SCK.
Аппаратный SPI у atmeg ориентирован на байтовые посылки. Так что можете принимать только 8/16/24/.... бит.

Большая часть микросхем с которыми я работал имели 8/16-битный интерфейс. Не встречал SPI с разрядностью не кратной 8 бит....
Go to the top of the page
 
+Quote Post
(vS)
сообщение Jul 13 2010, 06:08
Сообщение #5


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

Группа: Участник
Сообщений: 135
Регистрация: 13-07-06
Из: С-Пб
Пользователь №: 18 778



я тоже его недавно встретил smile.gif
драйвер клавиатуры и дисплея от OKI
MASTER uPD 78какойта


--------------------
тут может быть какаято реклама
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 13 2010, 17:07
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата((vS) @ Jul 13 2010, 13:05) *
пока у меня мнение, аппаратно вычитать такие данные нельзя, т.к. регистр сдвига 8и битный?

совершенно верно.
Go to the top of the page
 
+Quote Post
fmdost
сообщение Jul 13 2010, 17:56
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



у тиней есть USI. Там помоему счётчик принятых бит програмно доступен. А нет ли USI на меге? Если есть, то можно даже по прерыванию.
Go to the top of the page
 
+Quote Post
(vS)
сообщение Jul 13 2010, 23:10
Сообщение #8


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

Группа: Участник
Сообщений: 135
Регистрация: 13-07-06
Из: С-Пб
Пользователь №: 18 778



да
копаю в сторону USI, на аппаратным ни софтовым ни чего хорошего пока не вышло. аппаратным 30бит приходят один раз 4мя байтами, другой 5ю, 4мя, потом 5ю...

нашел дома attiny26, USI присутствует, буду копать...


--------------------
тут может быть какаято реклама
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 15 2010, 14:55
Сообщение #9


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Пришла в голову идея, как ведомому МК аппаратно принять любое количество бит. Надо просто досчитывать импульсы до состояния, кратного 8-ми. Скажем, надо принять 12 бит, принимаем 8 бит, как обычно, после записи следующих 4-х бит клок мастера остановится, а МК выработает оставшиеся 4 импульса, дальше думаю, всё ясно. Принимать клоки от мастера и МК можно, скажем, через схему 2-И или 2-ИЛИ, вариантов много.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 15 2010, 15:17
Сообщение #10


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Принимать клоки от мастера и МК можно, скажем, через схему 2-И или 2-ИЛИ, вариантов много.


Есть способ проще - после остановки клока мастера пощелкать полярностью клока в соответствующем регистре нужное количество раз. И готово.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 15 2010, 16:01
Сообщение #11


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



1) Интересно, но фича не документирована. Сами пользовались?

2) Ваш вариант на большие скорости, скажем, больше 1 Мбита/с не потянет, а на меньшие скорости лучше делать через INT0 или INT1. Мой вариант будет работать и на 10 Мбит/с.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 15 2010, 16:27
Сообщение #12


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Сами пользовались?


В режиме мастера точно работает. В слейве, как мне помнится, биты досылает. Проверить не долго.

QUOTE
Ваш вариант на большие скорости, скажем, больше 1 Мбита/с не потянет


Это почему?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 15 2010, 20:53
Сообщение #13


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



1) Как принять 9 бит на скорости 10 Мбод?

2) Фича документирована?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
(vS)
сообщение Jul 16 2010, 10:28
Сообщение #14


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

Группа: Участник
Сообщений: 135
Регистрация: 13-07-06
Из: С-Пб
Пользователь №: 18 778



смотрю я не одинок в своих "нестандартных" пакетах smile.gif
а дослать клок это мысль...


--------------------
тут может быть какаято реклама
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 16 2010, 11:23
Сообщение #15


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Это ещё что. Мне вот надо поставить МК, чтобы разгрузить DSP, посылка 37 бит на скорости 5 Мбод, причём протокол I2C-подобный и очень жёсткие требования к фронтам. Т.е. меняем бит данных, ждём 50 нс, выставляем клок, ждём 100 нс, снимаем клок, ждём 50 нс, новый бит данных, и т.д...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

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

 


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


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