Отговори на тема  [ 21 мнения ]  Отиди на страница Предишна  1, 2
Atmega и SPI 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Filo написа:
paregov написа:
Сигурен ли си, че първо не трябва да кажеш на датчика какво искаш да прочетеш от него?
(Нямам сега време да я чета. ) :D


Сигурен. в даташита казват че свалиш ли му CS-a и почва да предава. Има малко смущаващи неща тука. На всякъде където четох SPI е с 4 линии а при този датчик е с 3. Демек MOSI и MISO влизат на неговия SI/O.

Ама на мен не ми се връзва. За SPI пише че като си мастър трябва да изпратиш "dummy" байт за да почнеш да четеш от слейва.
В даташита на датчика пише че свалиш ли му CS-a почва директно да праща. Цялата история не ми се връзва ама никак.


Ето ти още едно мнение:

Datasheeta- казва че е по стандартта за SPI, нещо което не мисля е така, защото казват:

1.CS-a разрешава започването на комуникация -> не я почва ;-) това ок.
2.ЗА да има комуникация трябва SCK/clock от мцу - ок.
Данните се прадват от датчика на падащо ниво на клока, НО
не се предават на (два) байт(а) , ами (поне така пише) се пращат 14бита последователно.
Т.е те очакват ти да пуснеш clock 14 1->0 , 1->0, ...

А SPI е точно както си го казал, пускам dummy byte той генерира клок, след това отново се генерира клок, за да се прочете байт-а отговор от у-вото, с което комуникираш.

Обаче ето една примерна програма (намерих), която чете TC77 датчик използвайки pic и хардуерният му модул
Гледайки програмата се спазавт всички правила за spi следователно просто има кофти написана документиция въпросният датчик, така че провери пак дали четеш на rising edge Или на failing edge. Като трябва да е второто по документаиця, но в тази програма се чете на raising edge.

Код:
  SSPCON  = 0b0011.0000;                        // SPI master, OSC/4
                                                // receive:rising edge
SSPSTAT = 0b1000.0000;                        // sample at end of output


static  uns16  TempRead(uns8 sensor) {

  uns16  temp;                                  // for 13 bits of sensor
  uns8   msb,lsb;

  if (sensor == 0)
    TS1 = FALSE;                                // select sensor #1
  else
    TS2 = FALSE;                                // select sensor #2

  lsb = SSPBUF;                                 // empty buffer
  SSPBUF = 0x00;                                // write byte
  while (BF == FALSE);                          // spin
  msb = SSPBUF;                                 // MSB
  SSPBUF = 0x00;                                // write byte
  while (BF == FALSE);                          // spin
  lsb = SSPBUF;                                 // LSB

  if (sensor == 0)
    TS1 = TRUE;                                 // de-select sensor #1
  else
    TS2 = TRUE;                                 // de-select sensor #2

  if ( !(lsb & 0b0000.0100))                    // invalid temperature
    return TEMPFLT;                             // faulty temp reading

  temp = ((uns16)msb << 8);
  temp |= (lsb & ~0b0000.0111);                 // LSB (clear low order bits)
  return temp;                                  // temparature (raw)
  }

http://www.robh.nl/zip/dualtemp022.zip

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Авг 04, 2006 1:12 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Мда, 14-бита обаче е самата температура, останалите младши два бита ще се чете нещо неопределено тъй като TC77 ще остави MISO в HI-Z състояние. Тоест, четеш 16-бита по SPI и шифтваш два пъти надясно за да получиш температурата. Същото е при MCP32XX ADC-тата на Microchip, там го написах софтуерно понеже в контролера нямах SPI периферия.


Пет Авг 04, 2006 1:24 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Това относно шифтването е ясно.
Въпросът е че документацията е объркваща относно как точно става предването.
Както са го написали те карат да очакваш последователно ВЕДНАГА щом пуснеш CLK 16бит без никакви преди това dummy bytes и прочие.

Връзвал съм MCP3208 по SPI, но с разбирането на неговата документация проблеми нямах.

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Авг 04, 2006 5:09 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Ако погледнеш малко по-внимателно ще видиш че секцията за комуникация в PDF-а на TC77 и MCP32XX чиповете е почти еднаква, а стандарт за комуникация SPI знам само за един...абе празни приказки да говорим смисъл няма, експериментирайте :)


Пет Авг 04, 2006 5:28 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Юни 16, 2005 11:04 am
Мнения: 37
Мнение 
Днеска си разписах един клок и с един бутон си цъкам CS-a и работи точно както е описано в PDF-a. В момента в който CS-a стане 0 и датчика почва да мята едно след друго измерванията.

С хардуерния SPI на мегата още не съм успял да го подкарам.


Пет Авг 04, 2006 5:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
вероятно няма и да можеш :wink:
по дефиниция, SPI е замислен за връзка с много проста периферия, например шифт-регистър.
по тази причина има 3 сигнала: клок, вход И изход. с коя периферия ще си говориш се определя от селект.
говоря за MICROWIRE специфициран от national semi и SPI, поне популярната му интерпретация

майкрочип пак са се надминали с този датчик, като са свързали входа и изхода в един пин, при това тристейтов.
не вижда смисъла от икономията, защото в SOIC корпуса имат 3 свободни крака, а SOT-23-5 без усложнения може да се корпусира в SOT-23-6
от документацията разбирам, че този тел е изход за първите 16 клока и е вход за следващите 16
т.е. трябва да можеш да превключваш пина на твоя микроконтролер от вход към изход по средата на обмена (без да махаш слекта), което за мегата (и други контролери) е невъзможно, просто защото входа и изхода са два отделни пина.

аз лично не виждам защо трябва да ползваш този датчик, вместо да си сложиш TCN75.


Съб Авг 05, 2006 3:51 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 21 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни