Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
9260 и adt7302 (датчик температуры с интерфейсом SPI)
Kuzemko
Добавлено 25.02.2010 20:51 Редактировалось 25.02.2010 20:53 Сообщение: 11
Kuzemko
0

Пункты: 370
Регистрация: 26.09.2009
Пол: Мужчина
http://rghost.ru/1053317
Термометр на разъеме РС14 (стр 3.)
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 25.02.2010 21:36 Редактировалось 25.02.2010 21:52 Сообщение: 12
sasamy
4.70

Пункты: 78610
Регистрация: 14.08.2009
У меня по крайней мере с такими параметрами probe вызывается
{ /* Termometr chip */
.modalias = "lm70",
.chip_select = 1,
.max_speed_hz = 10 * 1000 * 1000,
.bus_num = 1,
},
А это судя по разъему P14 должно быть именно так - spi1, ncsp1.

Нужно убрать .mode - режим в самом драйвере lm70 задается иначе probe с ошибкой вылетает, probe пока что у меня вылетает тут - в lm70 в ф-ции probe:

/* 3-wire link (shared SI/SO) for LM70 */
if (chip == LM70_CHIP_LM70 && !(spi->mode & SPI_3WIRE))
return -EINVAL;

думаю если это выкинуть только легче станет :) ваш чип как раз в 4wire режиме работает, в общем экспериментируйте :) Да и это тоже выкинуть

/* signaling is SPI_MODE_0 for both LM70 and TMP121 */
if (spi->mode & (SPI_CPOL | SPI_CPHA))
return -EINVAL;
и поставить нужный режим в структуре .mode.
Спуститься к концу Подняться к началу
Персональная информация
Kuzemko
Добавлено 25.02.2010 21:57 Сообщение: 13
Kuzemko
0

Пункты: 370
Регистрация: 26.09.2009
Пол: Мужчина
Спасибо, буду экспериментировать.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 25.02.2010 22:05 Редактировалось 25.02.2010 22:23 Сообщение: 14
sasamy
4.70

Пункты: 78610
Регистрация: 14.08.2009
Да там собственно работы на 15 мин :) выкинуть все лишнее и сдвинуть результирующий raw на 3 позиции :)
case LM70_CHIP_TMP121:
val = ((int)raw / 8) * 625 / 10;
break;
}
вот тут например на 8 не делить (деление на 8 равносильно сдвигу вправо на 3 - у вас и так уже данные в младших разрядах).
spi подключить по-человечески 4-wire как и положено чтобы писать в него можно было - ваш чип спать умеет, а это надо использовать :)

Вернее на вашем чипе правило преобраования будет другим, судя по исходникам в даташите

ADC_Temp_Code = make16(MSByte,LSByte); //16bit ADC code is stored ADC_Temp_Code.
ADC_Temp_Code_dec = (float)ADC_Temp_Code; //Covert to float for division.
if ((0x2000 & ADC_Temp_Code) == 0x2000) //Check sign bit for negative value.
{
TempVal = (ADC_Temp_Code_dec - 16384)/32; //Conversion formula if negative temperature.
}
else
{
TempVal = (ADC_Temp_Code_dec/32); //Conversion formula if positive temperature.
}
}while(True);
//Temperature value stored in TempVal.
}
Спуститься к концу Подняться к началу
Персональная информация
Kuzemko
Добавлено 26.02.2010 19:05 Сообщение: 15
Kuzemko
0

Пункты: 370
Регистрация: 26.09.2009
Пол: Мужчина
На основе lm70 написал свой драйвер.
http://rghost.ru/1058676
Температуру показывает в милиградусах.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux