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

 
 
 
Reply to this topicStart new topic
> Термодатчик AD7814 по SPI, Чтение регистра температуры
junkl
сообщение Nov 16 2007, 07:25
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Здравствуйте!
Кто-нибудь реализовывал работу с температурным датчиком AD7814 по SPI?
Подкажите, как настроить SPI Chip Select Register (CSR1)?
В описании AD7814 написано "Data is clocked out on the falling edge of SCLK",
поэтому в CSR1 задаю AT91C_SPI_CPOL = 1, AT91C_SPI_NCPHA = 0. Это правильно?
В считываемых шестнадцати битах какие 10 бит являются данными D9..D0?
Присутствует ли в в этих 16 считанных битах LEADING ZERO?
Go to the top of the page
 
+Quote Post
SDS28
сообщение Nov 16 2007, 07:51
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 16-03-05
Пользователь №: 3 407



Цитата(junkl @ Nov 16 2007, 11:25) *
... задаю AT91C_SPI_CPOL = 1, AT91C_SPI_NCPHA = 0. Это правильно?

правильно.
Цитата(junkl @ Nov 16 2007, 11:25) *
В считываемых шестнадцати битах какие 10 бит являются данными D9..D0?
Присутствует ли в в этих 16 считанных битах LEADING ZERO?

младшие 10 бит являются данными D9..D0, а остальные LEADING ZERO.
Go to the top of the page
 
+Quote Post
junkl
сообщение Nov 16 2007, 08:04
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Спасибо за быстрый ответ!

В чем тогда у меня может быть проблема? Я читаю несколько раз по 16 бит, получаю непонятные значения:
0b0010110011111111
0b0000110111111111
0b0010111111111111
0b0010110100000000
0b0010110100000000

Если считать младшие биты (справа) за значение температуры, то она получается либо отрицательной, либо слишком большой (и вообще значение нестабильно), а LEADING ZERO вообще непонятно где.
Что может быть неправильно настроено?
Я настроила Baud rate на 1МГц, а вот задержки не знаю, какие нужны...
Go to the top of the page
 
+Quote Post
SDS28
сообщение Nov 16 2007, 08:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 16-03-05
Пользователь №: 3 407



Прошу прощения за неправильную информацию, попутал микросхемы.

Bit16 Bit15 Bit14 ... Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
LEADING ZERO D9 D8 ... D0 D0 D0 D0 D0 D0 D0

вот так правильно smile.gif
Go to the top of the page
 
+Quote Post
junkl
сообщение Nov 16 2007, 08:59
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Цитата(SDS28 @ Nov 16 2007, 11:42) *
Прошу прощения за неправильную информацию, попутал микросхемы.

Bit16 Bit15 Bit14 ... Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
LEADING ZERO D9 D8 ... D0 D0 D0 D0 D0 D0 D0

вот так правильно smile.gif


Спасибо, а почему тогда значения все равно получаются сильно разными и сильно большими, например, 90-95 град.? У меня тут прохладно :-)
Go to the top of the page
 
+Quote Post
SDS28
сообщение Nov 16 2007, 09:18
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 16-03-05
Пользователь №: 3 407



А что Вы в нее пишете?
Go to the top of the page
 
+Quote Post
junkl
сообщение Nov 16 2007, 10:19
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Цитата(SDS28 @ Nov 16 2007, 12:18) *
А что Вы в нее пишете?


Я вообще ничего в нее не пишу, никак не конфигурирую. А надо?
Go to the top of the page
 
+Quote Post
SDS28
сообщение Nov 16 2007, 10:34
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 16-03-05
Пользователь №: 3 407



Цитата(junkl @ Nov 16 2007, 14:19) *
Я вообще ничего в нее не пишу, никак не конфигурирую. А надо?

На шине SPI запись и чтение идут одновременно, и если вывод DIN AD7814 подключен к MOSI процессора, то содержимое регистра SPI_TDR попадает в ее регистр конфигурации. А дальше см. DataSheet стр. 6, "Write operation".
Go to the top of the page
 
+Quote Post
Master
сообщение Nov 16 2007, 12:39
Сообщение #9


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(junkl @ Nov 16 2007, 12:59) *
Спасибо, а почему тогда значения все равно получаются сильно разными и сильно большими, например, 90-95 град.? У меня тут прохладно :-)

Например так:
Код
int main( void )
{
    unsigned char    bDataL = 0x01;    // младшфий байт, полученный от AD7814
    unsigned char    bDataH = 0x01;    // старший байт, полученный от AD7814
    unsigned short    wData = ( bDataH << 8 ) | bDataL;
    float        fRealTemp;
    char        ch = '-';

    // 0b 0000 00x0 0000 0000
    // 0b 0000 0011 1111 1111
    if ( wData & 0x200 ){
    // отрицательная температура
        fRealTemp = ( ~wData & 0x1FF ) * 0.25;
    }
    else {
    // положительная температура
        fRealTemp = ( wData & 0x1FF ) * 0.25;
        ch = ' ';
    }
    printf( "t°C = %c%f\n", ch, fRealTemp );
}

Удачи!
Go to the top of the page
 
+Quote Post
junkl
сообщение Nov 20 2007, 10:34
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Всем большое спасибо!
Оказалось, что я действительно при чтении еще и записывала в AD7814 ненулевое значение (неправильноинициализировала PDC). Теперь разобралась, все работает, как надо!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:40
Рейтинг@Mail.ru


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