|
Термодатчик AD7814 по SPI, Чтение регистра температуры |
|
|
|
Nov 16 2007, 07:25
|
Участник

Группа: Новичок
Сообщений: 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?
|
|
|
|
|
 |
Ответов
|
Nov 16 2007, 07:51
|
Участник

Группа: Участник
Сообщений: 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.
|
|
|
|
|
Nov 16 2007, 08:04
|
Участник

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

|
Спасибо за быстрый ответ!
В чем тогда у меня может быть проблема? Я читаю несколько раз по 16 бит, получаю непонятные значения: 0b0010110011111111 0b0000110111111111 0b0010111111111111 0b0010110100000000 0b0010110100000000
Если считать младшие биты (справа) за значение температуры, то она получается либо отрицательной, либо слишком большой (и вообще значение нестабильно), а LEADING ZERO вообще непонятно где. Что может быть неправильно настроено? Я настроила Baud rate на 1МГц, а вот задержки не знаю, какие нужны...
|
|
|
|
|
Nov 16 2007, 08:42
|
Участник

Группа: Участник
Сообщений: 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 вот так правильно
|
|
|
|
|
Nov 16 2007, 08:59
|
Участник

Группа: Новичок
Сообщений: 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 вот так правильно  Спасибо, а почему тогда значения все равно получаются сильно разными и сильно большими, например, 90-95 град.? У меня тут прохладно :-)
|
|
|
|
|
Nov 16 2007, 12:39
|
Частый гость
 
Группа: Новичок
Сообщений: 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 ); } Удачи!
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|