Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Термодатчик AD7814 по SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
junkl
Здравствуйте!
Кто-нибудь реализовывал работу с температурным датчиком 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?
SDS28
Цитата(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.
junkl
Спасибо за быстрый ответ!

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

Если считать младшие биты (справа) за значение температуры, то она получается либо отрицательной, либо слишком большой (и вообще значение нестабильно), а LEADING ZERO вообще непонятно где.
Что может быть неправильно настроено?
Я настроила Baud rate на 1МГц, а вот задержки не знаю, какие нужны...
SDS28
Прошу прощения за неправильную информацию, попутал микросхемы.

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

вот так правильно smile.gif
junkl
Цитата(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 град.? У меня тут прохладно :-)
SDS28
А что Вы в нее пишете?
junkl
Цитата(SDS28 @ Nov 16 2007, 12:18) *
А что Вы в нее пишете?


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

На шине SPI запись и чтение идут одновременно, и если вывод DIN AD7814 подключен к MOSI процессора, то содержимое регистра SPI_TDR попадает в ее регистр конфигурации. А дальше см. DataSheet стр. 6, "Write operation".
Master
Цитата(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 );
}

Удачи!
junkl
Всем большое спасибо!
Оказалось, что я действительно при чтении еще и записывала в AD7814 ненулевое значение (неправильноинициализировала PDC). Теперь разобралась, все работает, как надо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.