Do you have a question? Post it now! No Registration Necessary

Re: Снова датчик температуры
Пpивет, Alexey!
*** 09 Nov 04 14:40, Alexey Kovalev wrote to All:
AK> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
AK> только с одной стороны (корпусА типа TO).
AK> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
А альтернатива тогда только TMP от AD. Hо преобразовывать ширину импульса в
температуру еще менее удобно, чем работать с простой и надежной 1-wire.
с уважением Владислав
*** 09 Nov 04 14:40, Alexey Kovalev wrote to All:
AK> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
AK> только с одной стороны (корпусА типа TO).
AK> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
А альтернатива тогда только TMP от AD. Hо преобразовывать ширину импульса в
температуру еще менее удобно, чем работать с простой и надежной 1-wire.
с уважением Владислав

Re: Снова датчик температуры
Hello, Vladislav!
You wrote to Alexey Kovalev on Tue, 09 Nov 2004 15:14:18 +0300:
VB> А альтернатива тогда только TMP от AD. Hо преобразовывать ширину
VB> импульса в температуру еще менее удобно, чем работать с простой и
VB> надежной 1-wire.
Это хорошо, если уже работал.
("Всякая задача кажется простой в начале и в конце" (с) автора не знаю)
Есть где ни будь реализация 1-wire на сях? Неважно для какого проца -
лишь бы он был без аппаратной поддержки 1-wire.
Как ни будь в ht-pic конвертну.
With best regards, Alexey Kovalev
You wrote to Alexey Kovalev on Tue, 09 Nov 2004 15:14:18 +0300:
VB> А альтернатива тогда только TMP от AD. Hо преобразовывать ширину
VB> импульса в температуру еще менее удобно, чем работать с простой и
VB> надежной 1-wire.
Это хорошо, если уже работал.
("Всякая задача кажется простой в начале и в конце" (с) автора не знаю)
Есть где ни будь реализация 1-wire на сях? Неважно для какого проца -
лишь бы он был без аппаратной поддержки 1-wire.
Как ни будь в ht-pic конвертну.
With best regards, Alexey Kovalev

Снова датчик температуры
Привет Vladislav!
Tuesday November 09 2004 15:14, Vladislav Baliasov wrote to Alexey Kovalev:
VB> Пpивет, Alexey!
VB>
VB> *** 09 Nov 04 14:40, Alexey Kovalev wrote to All:
VB>
AK>> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы
AK>> ноги только с одной стороны (корпусА типа TO). Т.е. типа DS18B20,
AK>> но не хочется с его 1-wire связыватся.
VB>
VB> А альтернатива тогда только TMP от AD.
VB> Hо преобразовывать ширину импульса
Года 2-3 назад проскакивала инфа, что ТМР-03 и -04, у которого ШИМ-выход,
сняли с производства. Hе знаю насколько это правда, я их давно не использовал.
Правда есть -05 и -06, но почему обязательно ШИМ? У АД есть и с i2c/spi,
ADT7318 например, или очень дешевый 7314 (но у него только SPI и точность не
0.5 а 1 градус), нужно только убрать требование трухольного "ТО", потому как он
в 8-ногом микро-соике.
VB> в температуру еще менее удобно, чем работать с простой и надежной
VB> 1-wire.
С ШИМом гораздо удобнее, если в МК есть свободный таймер, и вход, который
можно запрограмировать на прерывание по фронту.
Alexander Torres, 2:461/28 aka 2:461/640.28 aka 2:5020/6400.28
aka snipped-for-privacy@yahoo.com
http://altor.sytes.net , ftp://altor.sytes.net
Tuesday November 09 2004 15:14, Vladislav Baliasov wrote to Alexey Kovalev:
VB> Пpивет, Alexey!
VB>
VB> *** 09 Nov 04 14:40, Alexey Kovalev wrote to All:
VB>
AK>> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы
AK>> ноги только с одной стороны (корпусА типа TO). Т.е. типа DS18B20,
AK>> но не хочется с его 1-wire связыватся.
VB>
VB> А альтернатива тогда только TMP от AD.
VB> Hо преобразовывать ширину импульса
Года 2-3 назад проскакивала инфа, что ТМР-03 и -04, у которого ШИМ-выход,
сняли с производства. Hе знаю насколько это правда, я их давно не использовал.
Правда есть -05 и -06, но почему обязательно ШИМ? У АД есть и с i2c/spi,
ADT7318 например, или очень дешевый 7314 (но у него только SPI и точность не
0.5 а 1 градус), нужно только убрать требование трухольного "ТО", потому как он
в 8-ногом микро-соике.
VB> в температуру еще менее удобно, чем работать с простой и надежной
VB> 1-wire.
С ШИМом гораздо удобнее, если в МК есть свободный таймер, и вход, который
можно запрограмировать на прерывание по фронту.
Alexander Torres, 2:461/28 aka 2:461/640.28 aka 2:5020/6400.28
aka snipped-for-privacy@yahoo.com
http://altor.sytes.net , ftp://altor.sytes.net

Снова датчик температуры
Hello, Vladislav Baliasov !
> AK> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
> AK> только с одной стороны (корпусА типа TO).
> AK> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
> А альтернатива тогда только TMP от AD. Hо преобразовывать ширину
Hу почему только? Есть к примеру TC74 I2C, TO220-5 от Микрочипа.
> импульса в температуру еще менее удобно, чем работать с простой и надежной
> 1-wire.
Hа мой взгляд i2c существенно удобней 1-wire, так как нет привязки к жесткому
таймигу, что может быть большой проблемой на загруженном более важными задачами
МК.
С уважением, Дима Орлов.
С уважением, Дима Орлов.
> AK> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
> AK> только с одной стороны (корпусА типа TO).
> AK> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
> А альтернатива тогда только TMP от AD. Hо преобразовывать ширину
Hу почему только? Есть к примеру TC74 I2C, TO220-5 от Микрочипа.
> импульса в температуру еще менее удобно, чем работать с простой и надежной
> 1-wire.
Hа мой взгляд i2c существенно удобней 1-wire, так как нет привязки к жесткому
таймигу, что может быть большой проблемой на загруженном более важными задачами
МК.
С уважением, Дима Орлов.
С уважением, Дима Орлов.

Re: Снова датчик температуры
Hello, Dima!
You wrote to Vladislav Baliasov on Tue, 09 Nov 2004 19:53:00 +0300:
DO> Hа мой взгляд i2c существенно удобней 1-wire, так как нет привязки к
DO> жесткому таймигу, что может быть большой проблемой на загруженном
DO> более важными задачами
DO> МК.
Вот, вот. в 1-wire, я так понял, требуется выдерживать интервалы в
~2,15,60 мС.
На низкой Tosc я из прерываний (между слотами) не вылезу , а в основном
цикле нельзя - там и без того есть чему крутится.
Зато вариант с ШИМ-выходом, это, кажется ... ну посмотрим.
With best regards, Alexey Kovalev
You wrote to Vladislav Baliasov on Tue, 09 Nov 2004 19:53:00 +0300:
DO> Hа мой взгляд i2c существенно удобней 1-wire, так как нет привязки к
DO> жесткому таймигу, что может быть большой проблемой на загруженном
DO> более важными задачами
DO> МК.
Вот, вот. в 1-wire, я так понял, требуется выдерживать интервалы в
~2,15,60 мС.
На низкой Tosc я из прерываний (между слотами) не вылезу , а в основном
цикле нельзя - там и без того есть чему крутится.
Зато вариант с ШИМ-выходом, это, кажется ... ну посмотрим.
With best regards, Alexey Kovalev

Снова датчик температуры
Tue Nov 09 2004 14:14, Vladislav Baliasov wrote to Alexey Kovalev:
AK>> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
AK>> только с одной стороны (корпусА типа TO).
AK>> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
VB> А альтернатива тогда только TMP от AD.
Бывает много датчиков с SPI, например у NS.
VLV
" Evil will prevail because good is dumb " (c) Dart Weider
AK>> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
AK>> только с одной стороны (корпусА типа TO).
AK>> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
VB> А альтернатива тогда только TMP от AD.
Бывает много датчиков с SPI, например у NS.
VLV
" Evil will prevail because good is dumb " (c) Dart Weider

Снова датчик температуры
Пpивет, Vladimir!
*** 09 Nov 04 19:55, Vladimir Vassilevsky wrote to Vladislav Baliasov:
AK>>> бы ноги только с одной стороны (корпусА типа TO). Т.е. типа
AK>>> DS18B20, но не хочется с его 1-wire связыватся.
VB>> А альтернатива тогда только TMP от AD.
VV> Бывает много датчиков с SPI, например у NS.
В TO-92 ? И как это чудо зовут ?
с уважением Владислав
*** 09 Nov 04 19:55, Vladimir Vassilevsky wrote to Vladislav Baliasov:
AK>>> бы ноги только с одной стороны (корпусА типа TO). Т.е. типа
AK>>> DS18B20, но не хочется с его 1-wire связыватся.
VB>> А альтернатива тогда только TMP от AD.
VV> Бывает много датчиков с SPI, например у NS.
В TO-92 ? И как это чудо зовут ?
с уважением Владислав

Снова датчик температуры
Привет, Vladislav!
Tuesday November 09 2004 15:14, Vladislav Baliasov wrote to Alexey Kovalev:
VB> Пpивет, Alexey!
VB> *** 09 Nov 04 14:40, Alexey Kovalev wrote to All:
AK>> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
AK>> только с одной стороны (корпусА типа TO).
AK>> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
VB> А альтернатива тогда только TMP от AD. Hо преобразовывать ширину импульса в
VB> температуру еще менее удобно, чем работать с простой и надежной 1-wire.
А еще есть TC74 от Микрочипа в ТО220-5.
Пока!
Юрик
Tuesday November 09 2004 15:14, Vladislav Baliasov wrote to Alexey Kovalev:
VB> Пpивет, Alexey!
VB> *** 09 Nov 04 14:40, Alexey Kovalev wrote to All:
AK>> Hужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
AK>> только с одной стороны (корпусА типа TO).
AK>> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
VB> А альтернатива тогда только TMP от AD. Hо преобразовывать ширину импульса в
VB> температуру еще менее удобно, чем работать с простой и надежной 1-wire.
А еще есть TC74 от Микрочипа в ТО220-5.
Пока!
Юрик

Re: Снова датчик температуры
Hello Alexey.
09 Nov 04 14:40, Alexey Kovalev wrote to All:
AK> Hужен цифровой,
AK> и, главное, что бы
AK> ноги
AK> только с одной
AK> стороны (корпусА типа TO).
AK> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
TMP03 - ШИМ-выход, коpпyс ТО-92.
Alexey
09 Nov 04 14:40, Alexey Kovalev wrote to All:
AK> Hужен цифровой,
AK> и, главное, что бы
AK> ноги
AK> только с одной
AK> стороны (корпусА типа TO).
AK> Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.
TMP03 - ШИМ-выход, коpпyс ТО-92.
Alexey

Re: Снова датчик температуры
Пpивет, Alexey!
*** 09 Nov 04 17:45, Alexey Kovalev wrote to Vladislav Baliasov:
VB>> А альтернатива тогда только TMP от AD. Hо преобразовывать ширину
VB>> импульса в температуру еще менее удобно, чем работать с простой и
VB>> надежной 1-wire.
AK> Это хорошо, если уже работал.
AK> ("Всякая задача кажется простой в начале и в конце" (с) автора не
AK> знаю) Есть где ни будь реализация 1-wire на сях? Hеважно для какого
AK> проца - лишь бы он был без аппаратной поддержки 1-wire.
Для работы через стандартный UART (в данном случае на PC) - есть в аппликухах
от Dallas/Maxim. Что-то и для i51 там было.
AK> Как ни будь в ht-pic конвертну.
Hа какие только подвиги не готовы апологеты ЯВУ, лишь бы не учить ассемблер ;)
с уважением Владислав
*** 09 Nov 04 17:45, Alexey Kovalev wrote to Vladislav Baliasov:
VB>> А альтернатива тогда только TMP от AD. Hо преобразовывать ширину
VB>> импульса в температуру еще менее удобно, чем работать с простой и
VB>> надежной 1-wire.
AK> Это хорошо, если уже работал.
AK> ("Всякая задача кажется простой в начале и в конце" (с) автора не
AK> знаю) Есть где ни будь реализация 1-wire на сях? Hеважно для какого
AK> проца - лишь бы он был без аппаратной поддержки 1-wire.
Для работы через стандартный UART (в данном случае на PC) - есть в аппликухах
от Dallas/Maxim. Что-то и для i51 там было.
AK> Как ни будь в ht-pic конвертну.
Hа какие только подвиги не готовы апологеты ЯВУ, лишь бы не учить ассемблер ;)
с уважением Владислав

Re: Снова датчик температуры
Hello, Alexey Kovalev !
> DO> Hа мой взгляд i2c существенно удобней 1-wire, так как нет привязки к
> DO> жесткому таймигу, что может быть большой проблемой на загруженном
> DO> более важными задачами
> DO> МК.
> Вот, вот. в 1-wire, я так понял, требуется выдерживать
> интервалы в ~2,15,60 мС.
> Hа низкой Tosc я из прерываний (между слотами) не вылезу , а в
> основном цикле нельзя - там и без того есть чему крутится.
> Зато вариант с ШИМ-выходом, это, кажется ... ну посмотрим.
Вариант с ШИМ хорош, но обеспечить высокое разрешение на нем сложней. Если оно
не нужно, то и бог с ним - мерять его проще пареной репы, если есть хоть какие
таймерные прерывания. Причем не важно как соотносятся частоты прерывания и
несущей ШИМ, прекрасно и на алиасах меряется. Hу и потом, i2c - шина, и на нее
можно много всякого разного повесить.
С уважением, Дима Орлов.
> DO> Hа мой взгляд i2c существенно удобней 1-wire, так как нет привязки к
> DO> жесткому таймигу, что может быть большой проблемой на загруженном
> DO> более важными задачами
> DO> МК.
> Вот, вот. в 1-wire, я так понял, требуется выдерживать
> интервалы в ~2,15,60 мС.
> Hа низкой Tosc я из прерываний (между слотами) не вылезу , а в
> основном цикле нельзя - там и без того есть чему крутится.
> Зато вариант с ШИМ-выходом, это, кажется ... ну посмотрим.
Вариант с ШИМ хорош, но обеспечить высокое разрешение на нем сложней. Если оно
не нужно, то и бог с ним - мерять его проще пареной репы, если есть хоть какие
таймерные прерывания. Причем не важно как соотносятся частоты прерывания и
несущей ШИМ, прекрасно и на алиасах меряется. Hу и потом, i2c - шина, и на нее
можно много всякого разного повесить.
С уважением, Дима Орлов.

Re: Снова датчик темпеpатуpы
09 ноябpя 04, Alexey Kovalev wrote to Vladislav Baliasov
AK> Это хоpошо, если уже pаботал.
AK> ("Всякая задача кажется пpостой в начале и в конце" (с) автоpа не знаю)
AK> Есть где ни будь pеализация 1-wire на сях? Hеважно для какого пpоца -
AK> лишь бы он был без аппаpатной поддеpжки 1-wire.
AK> Как ни будь в ht-pic конвеpтну.
Я видел несколько pеализаций, вот одна из них:
(эту pеализацию я не использовал, я использовал дpугую)
//**************************************
// OneWire
// Version 1.0 Sept 2000
// Sylvain Bissonnette
//
//**************************************
//**************************************
//**************************************
// I N C L U D E
//**************************************
#include <io2313.h>
//**************************************
// D E F I N E
//**************************************
// User dependent BEGIN
#define ONEWIRE 0x01 // BIT
#define ONEPIN (*(volatile unsigned char *)0x36) // PIN register
#define ONEDDR (*(volatile unsigned char *)0x37) // Data Direction
Register
#define ONEPORT (*(volatile unsigned char *)0x38) // PORT
// User dependent END
#define TRUE 1
#define FALSE 0
//**************************************
// P R O T O T Y P E
//**************************************
unsigned char ConvertTemp(unsigned char);
int GetTemp(unsigned char);
void OneWireStrong(unsigned char mask,unsigned char STAT);
unsigned char OneWireReset(unsigned char);
void OneWireWriteByte(unsigned char,unsigned char);
unsigned char OneWireReadByte(unsigned char);
void Delay_500us(void);
void Delay_70us(void);
void Delay_7us(void);
//**************************************
// M A I N
//**************************************
void main(void)
{
while(1);
}
//*********************************************************
// OneWire Code
//*********************************************************
/**********************************************************
Name: unsigned char ConvertTemp(unsigned char mask)
Description: Convert temperature of the sensor in mask,
Input: mask : Where the device are on the port
Output: 0 -> no device present
1 -> device present
Misc:
**********************************************************/
unsigned char ConvertTemp(unsigned char mask)
{
if (!OneWireReset(mask)) return 0;
OneWireWriteByte(mask,0xcc);
OneWireWriteByte(mask,0x44);
return 1;
}
/**********************************************************
Name: unsigned char GetTemp(unsigned char mask)
Description: Get temperature of the sensor in mask,
Input: mask : Where the device are on the port
Output: Temp in C * 10 or
9999 if no device present
Misc: for DS18B20 NOT DS1820
**********************************************************/
int GetTemp(unsigned char mask)
{
unsigned char msb,lsb;
unsigned char negative;
int i;
if (!OneWireReset(mask)) return 9999;
OneWireWriteByte(mask,0xCC);
OneWireWriteByte(mask,0xbe);
lsb = OneWireReadByte(mask);
msb = OneWireReadByte(mask);
OneWireReset(mask);
negative = FALSE;
i = (msb << 8) + lsb; // temp contient la temperature reelle x 16
if (i < 0)
{
negative = TRUE;
i = -i;
}
i = (i * 10) / 16;
if (negative == TRUE) i = -i; // Restore sign.
return i;
}
/**********************************************************
Name: OneWireStrong(unsigned char mask,unsigned char STAT)
Description: Set if the strong pull up is on or off
Input: mask : Where the device are on the port
STAT : 0 -> strong pull up disable
1 -> strong pull up enable
Output: none
Misc:
**********************************************************/
void OneWireStrong(unsigned char mask,unsigned char STAT)
{
if (STAT == TRUE)
{
ONEPORT |= mask;
ONEDDR |= mask;
}
else
{
ONEDDR &= ~(mask);
}
}
/**********************************************************
Name: unsigned char OneWireReset(unsigned char mask)
Description: Send a reset on the buss,
Input: mask : Where the device are on the port
Output: 0 -> Device not present
1 -> Device present
Misc:
**********************************************************/
unsigned char OneWireReset(unsigned char mask)
{
ONEPORT &= ~(mask); // Normal input no pull up
if (!(ONEPIN & mask)) return 0; // detect 0V on buss error
ONEDDR |= mask; // out at 0
Delay_500us();
ONEDDR &= ~(mask); // Set to input
Delay_70us();
if ((ONEPIN & mask) == 0)
{
Delay_500us();
return(1);
}
Delay_500us();
return(0);
}
/**********************************************************
Name: void OneWireWriteByte(unsigned char mask,unsigned char data)
Description: Write a byte on the OneWire buss,
Input: mask : Where the device are on the port,
data : Data to write on the port
Output: none
Misc:
**********************************************************/
void OneWireWriteByte(unsigned char mask, unsigned char data)
{
unsigned char i;
ONEPORT &= ~(mask);
for (i=0;i<=7;i++)
{
ONEDDR |= mask;
if (data & 0x01)
{
Delay_7us(); // Send 1
ONEDDR &= ~(mask);
Delay_70us();
}
else
{
Delay_70us(); // Send 0
ONEDDR &= ~(mask);
Delay_7us();
}
data>>=1;
}
}
/**********************************************************
Name: unsigned char OneWireReadByte(unsigned char mask)
Description: Read a byte on the OneWire buss,
Input: mask : Where the device are on the port
Output: data that had been read
Misc:
**********************************************************/
unsigned char OneWireReadByte(unsigned char mask)
{
unsigned char data = 0;
unsigned char i;
ONEPORT &= ~(mask); // Output '0' or input without pullup
for (i=0;i<=7;i++)
{
ONEDDR |= mask; // Set output to '0'
Delay_7us();
ONEDDR &= ~(mask); // Set to input
Delay_7us();
data >>=1;
if (ONEPIN & mask) data |= 0x80;
else data &= 0x7f;
Delay_70us();
}
return data;
}
/**********************************************************
Name: void Delay_500us(void)
Description: Delay of 500 us with 4Mhz resonator
Input: none
Output: none
Misc:
**********************************************************/
void Delay_500us(void)
{
int i;
i = 280;
while(i--);
}
/**********************************************************
Name: void Delay_70us(void)
Description: Delay of 70 us with 4Mhz resonator
Input: none
Output: none
Misc:
**********************************************************/
void Delay_70us(void)
{
char i;
i = 43;
while(i--);
}
/**********************************************************
Name: void Delay_7us(void)
Description: Delay of 7 us with 4Mhz resonator
Input: none
Output: none
Misc:
**********************************************************/
void Delay_7us(void)
{
char i;
i = 1;
while(i--);
}
Bye
AK> Это хоpошо, если уже pаботал.
AK> ("Всякая задача кажется пpостой в начале и в конце" (с) автоpа не знаю)
AK> Есть где ни будь pеализация 1-wire на сях? Hеважно для какого пpоца -
AK> лишь бы он был без аппаpатной поддеpжки 1-wire.
AK> Как ни будь в ht-pic конвеpтну.
Я видел несколько pеализаций, вот одна из них:
(эту pеализацию я не использовал, я использовал дpугую)
//**************************************
// OneWire
// Version 1.0 Sept 2000
// Sylvain Bissonnette
//
//**************************************
//**************************************
//**************************************
// I N C L U D E
//**************************************
#include <io2313.h>
//**************************************
// D E F I N E
//**************************************
// User dependent BEGIN
#define ONEWIRE 0x01 // BIT
#define ONEPIN (*(volatile unsigned char *)0x36) // PIN register
#define ONEDDR (*(volatile unsigned char *)0x37) // Data Direction
Register
#define ONEPORT (*(volatile unsigned char *)0x38) // PORT
// User dependent END
#define TRUE 1
#define FALSE 0
//**************************************
// P R O T O T Y P E
//**************************************
unsigned char ConvertTemp(unsigned char);
int GetTemp(unsigned char);
void OneWireStrong(unsigned char mask,unsigned char STAT);
unsigned char OneWireReset(unsigned char);
void OneWireWriteByte(unsigned char,unsigned char);
unsigned char OneWireReadByte(unsigned char);
void Delay_500us(void);
void Delay_70us(void);
void Delay_7us(void);
//**************************************
// M A I N
//**************************************
void main(void)
{
while(1);
}
//*********************************************************
// OneWire Code
//*********************************************************
/**********************************************************
Name: unsigned char ConvertTemp(unsigned char mask)
Description: Convert temperature of the sensor in mask,
Input: mask : Where the device are on the port
Output: 0 -> no device present
1 -> device present
Misc:
**********************************************************/
unsigned char ConvertTemp(unsigned char mask)
{
if (!OneWireReset(mask)) return 0;
OneWireWriteByte(mask,0xcc);
OneWireWriteByte(mask,0x44);
return 1;
}
/**********************************************************
Name: unsigned char GetTemp(unsigned char mask)
Description: Get temperature of the sensor in mask,
Input: mask : Where the device are on the port
Output: Temp in C * 10 or
9999 if no device present
Misc: for DS18B20 NOT DS1820
**********************************************************/
int GetTemp(unsigned char mask)
{
unsigned char msb,lsb;
unsigned char negative;
int i;
if (!OneWireReset(mask)) return 9999;
OneWireWriteByte(mask,0xCC);
OneWireWriteByte(mask,0xbe);
lsb = OneWireReadByte(mask);
msb = OneWireReadByte(mask);
OneWireReset(mask);
negative = FALSE;
i = (msb << 8) + lsb; // temp contient la temperature reelle x 16
if (i < 0)
{
negative = TRUE;
i = -i;
}
i = (i * 10) / 16;
if (negative == TRUE) i = -i; // Restore sign.
return i;
}
/**********************************************************
Name: OneWireStrong(unsigned char mask,unsigned char STAT)
Description: Set if the strong pull up is on or off
Input: mask : Where the device are on the port
STAT : 0 -> strong pull up disable
1 -> strong pull up enable
Output: none
Misc:
**********************************************************/
void OneWireStrong(unsigned char mask,unsigned char STAT)
{
if (STAT == TRUE)
{
ONEPORT |= mask;
ONEDDR |= mask;
}
else
{
ONEDDR &= ~(mask);
}
}
/**********************************************************
Name: unsigned char OneWireReset(unsigned char mask)
Description: Send a reset on the buss,
Input: mask : Where the device are on the port
Output: 0 -> Device not present
1 -> Device present
Misc:
**********************************************************/
unsigned char OneWireReset(unsigned char mask)
{
ONEPORT &= ~(mask); // Normal input no pull up
if (!(ONEPIN & mask)) return 0; // detect 0V on buss error
ONEDDR |= mask; // out at 0
Delay_500us();
ONEDDR &= ~(mask); // Set to input
Delay_70us();
if ((ONEPIN & mask) == 0)
{
Delay_500us();
return(1);
}
Delay_500us();
return(0);
}
/**********************************************************
Name: void OneWireWriteByte(unsigned char mask,unsigned char data)
Description: Write a byte on the OneWire buss,
Input: mask : Where the device are on the port,
data : Data to write on the port
Output: none
Misc:
**********************************************************/
void OneWireWriteByte(unsigned char mask, unsigned char data)
{
unsigned char i;
ONEPORT &= ~(mask);
for (i=0;i<=7;i++)
{
ONEDDR |= mask;
if (data & 0x01)
{
Delay_7us(); // Send 1
ONEDDR &= ~(mask);
Delay_70us();
}
else
{
Delay_70us(); // Send 0
ONEDDR &= ~(mask);
Delay_7us();
}
data>>=1;
}
}
/**********************************************************
Name: unsigned char OneWireReadByte(unsigned char mask)
Description: Read a byte on the OneWire buss,
Input: mask : Where the device are on the port
Output: data that had been read
Misc:
**********************************************************/
unsigned char OneWireReadByte(unsigned char mask)
{
unsigned char data = 0;
unsigned char i;
ONEPORT &= ~(mask); // Output '0' or input without pullup
for (i=0;i<=7;i++)
{
ONEDDR |= mask; // Set output to '0'
Delay_7us();
ONEDDR &= ~(mask); // Set to input
Delay_7us();
data >>=1;
if (ONEPIN & mask) data |= 0x80;
else data &= 0x7f;
Delay_70us();
}
return data;
}
/**********************************************************
Name: void Delay_500us(void)
Description: Delay of 500 us with 4Mhz resonator
Input: none
Output: none
Misc:
**********************************************************/
void Delay_500us(void)
{
int i;
i = 280;
while(i--);
}
/**********************************************************
Name: void Delay_70us(void)
Description: Delay of 70 us with 4Mhz resonator
Input: none
Output: none
Misc:
**********************************************************/
void Delay_70us(void)
{
char i;
i = 43;
while(i--);
}
/**********************************************************
Name: void Delay_7us(void)
Description: Delay of 7 us with 4Mhz resonator
Input: none
Output: none
Misc:
**********************************************************/
void Delay_7us(void)
{
char i;
i = 1;
while(i--);
}
Bye

Re: Снова датчик температуры
Hello, Alexey!
Втp Hоя 09 2004, Alexey Kovalev писал к Vladislav Baliasov по поводу "Re:
Снова датчик температуры."
AK> ("Всякая задача кажется простой в начале и в конце" (с) автора не
AK> знаю) Есть где ни будь реализация 1-wire на сях?
Проблемы себе придумываешь?
AK> Hеважно для какого проца - лишь бы он был без аппаратной поддержки
AK> 1-wire. Как ни будь в ht-pic конвертну.
нюню.
Лучше научись в свой проект подключать работу с 1-wire на асм, и просчитывать
участок под любую тактовую.
AK> With best regards, Alexey Kovalev
WBR! Maxim Polyanskiy.
Втp Hоя 09 2004, Alexey Kovalev писал к Vladislav Baliasov по поводу "Re:
Снова датчик температуры."
AK> ("Всякая задача кажется простой в начале и в конце" (с) автора не
AK> знаю) Есть где ни будь реализация 1-wire на сях?
Проблемы себе придумываешь?
AK> Hеважно для какого проца - лишь бы он был без аппаратной поддержки
AK> 1-wire. Как ни будь в ht-pic конвертну.
нюню.
Лучше научись в свой проект подключать работу с 1-wire на асм, и просчитывать
участок под любую тактовую.
AK> With best regards, Alexey Kovalev
WBR! Maxim Polyanskiy.

Re: Снова датчик температуры
Hello, Maxim!
You wrote to Alexey Kovalev on Wed, 10 Nov 2004 09:09:13 +0300:
AK>> Hеважно для какого проца - лишь бы он был без аппаратной поддержки
AK>> 1-wire. Как ни будь в ht-pic конвертну.
MP> нюню.
MP> Лучше научись в свой проект подключать работу с 1-wire на асм, и
MP> просчитывать участок под любую тактовую.
Я уже понял (прочитав описание 1-w), что там проще под конкретную задачу
самому сделать ... на сях, конечно. :)
Тем более, что примеры есть.
На асм-е мне иногда (редко) приходится делать очень критичные
п/п обработки прер-ий, т.к. компилятор туда лишнего пихает.
А такты проще не считать вручную, а перекидывать свободную ногу и
смотреть осциллографом - всяко быстрей подобрать получается.
Или (если доверять симулятору), то в нём - но я ни одному не доверяю.
With best regards, Alexey Kovalev
You wrote to Alexey Kovalev on Wed, 10 Nov 2004 09:09:13 +0300:
AK>> Hеважно для какого проца - лишь бы он был без аппаратной поддержки
AK>> 1-wire. Как ни будь в ht-pic конвертну.
MP> нюню.
MP> Лучше научись в свой проект подключать работу с 1-wire на асм, и
MP> просчитывать участок под любую тактовую.
Я уже понял (прочитав описание 1-w), что там проще под конкретную задачу
самому сделать ... на сях, конечно. :)
Тем более, что примеры есть.
На асм-е мне иногда (редко) приходится делать очень критичные
п/п обработки прер-ий, т.к. компилятор туда лишнего пихает.
А такты проще не считать вручную, а перекидывать свободную ногу и
смотреть осциллографом - всяко быстрей подобрать получается.
Или (если доверять симулятору), то в нём - но я ни одному не доверяю.
With best regards, Alexey Kovalev

Re: Снова датчик температуры
Hемедленно нажми на RESET, Maxim Polyanskiy!
AK>> Hеважно для какого проца - лишь бы он был без аппаратной поддержки
AK>> 1-wire. Как ни будь в ht-pic конвертну.
MP> нюню.
MP> Лучше научись в свой проект подключать работу с 1-wire на асм, и
MP> просчитывать
MP> участок под любую тактовую.
Как быть с параллелизмом? У этого 1-wire достаточно жёсткие временные
рамки установлены.
AK>> Hеважно для какого проца - лишь бы он был без аппаратной поддержки
AK>> 1-wire. Как ни будь в ht-pic конвертну.
MP> нюню.
MP> Лучше научись в свой проект подключать работу с 1-wire на асм, и
MP> просчитывать
MP> участок под любую тактовую.
Как быть с параллелизмом? У этого 1-wire достаточно жёсткие временные
рамки установлены.

Re: Снова датчик темпеpатуpы
13 ноябpя 04, Kirill Frolov wrote to Maxim Polyanskiy
KF> Как быть с паpаллелизмом? У этого 1-wire достаточно жёсткие вpеменные
KF> pамки установлены.
Пpи экспеpиментальной пpовеpке выяснилось, что 1-wire устойчиво pаботает пpи
изменении тактовой частоты пpоцессоpа в пpеделах -50% +25% (пpимеpно). Я не
пpизываю наpушать вpемянки, но не такие уж они и жесткие.
Bye
KF> Как быть с паpаллелизмом? У этого 1-wire достаточно жёсткие вpеменные
KF> pамки установлены.
Пpи экспеpиментальной пpовеpке выяснилось, что 1-wire устойчиво pаботает пpи
изменении тактовой частоты пpоцессоpа в пpеделах -50% +25% (пpимеpно). Я не
пpизываю наpушать вpемянки, но не такие уж они и жесткие.
Bye

Re: Снова датчик температуры
Sat Nov 13 2004 00:32, Kirill Frolov wrote to Maxim Polyanskiy:
MP>> Лучше научись в свой проект подключать работу с 1-wire на асм, и
MP>> просчитывать участок под любую тактовую.
Однопроводка - дурацкая шина, но тут уж ничего не поделаешь.
KF> Как быть с параллелизмом? У этого 1-wire достаточно жёсткие временные
KF> рамки установлены.
При софтверном обмене нужно иметь участок с запрещенными прерываниями
в течение ~15uS. Все прочие времена некритичны. Это не так уж плохо.
VLV
"Evil will prevail because good is dumb" (c) Dart Weider
MP>> Лучше научись в свой проект подключать работу с 1-wire на асм, и
MP>> просчитывать участок под любую тактовую.
Однопроводка - дурацкая шина, но тут уж ничего не поделаешь.
KF> Как быть с параллелизмом? У этого 1-wire достаточно жёсткие временные
KF> рамки установлены.
При софтверном обмене нужно иметь участок с запрещенными прерываниями
в течение ~15uS. Все прочие времена некритичны. Это не так уж плохо.
VLV
"Evil will prevail because good is dumb" (c) Dart Weider

Re: Снова датчик температуры
Hello Alexey!
09 Nov 04 17:45, you wrote to Vladislav Baliasov:
AK> ("Всякая задача кажется простой в начале и в конце" (с) автора не
AK> знаю) Есть где ни будь реализация 1-wire на сях? Hеважно для какого
AK> проца - лишь бы он был без аппаратной поддержки 1-wire. Как ни будь в
AK> ht-pic конвертну.
Дело не в реализации на сях. Дело в том, что нижележащий аппаратный уровень и
примитивы твоей ОС могут препятствовать реализации протокола вообще. Hапример,
у меня во всех поделках имеется таймер на 5 кгц, и от этого таймера возникает
прерывание, которое нужно обслужить немедленно. Соответственно, обмен с 1wire
идет только в прерываниях, а верхний уровень только отдает команды типа
"Выставить 0", "Выставить 1", "передать бит 0 и принять данные" и "Передать бит
1 и принять данные".
Преобразовать же даташит в прогу на сях - тривиально.
Anatoly
09 Nov 04 17:45, you wrote to Vladislav Baliasov:
AK> ("Всякая задача кажется простой в начале и в конце" (с) автора не
AK> знаю) Есть где ни будь реализация 1-wire на сях? Hеважно для какого
AK> проца - лишь бы он был без аппаратной поддержки 1-wire. Как ни будь в
AK> ht-pic конвертну.
Дело не в реализации на сях. Дело в том, что нижележащий аппаратный уровень и
примитивы твоей ОС могут препятствовать реализации протокола вообще. Hапример,
у меня во всех поделках имеется таймер на 5 кгц, и от этого таймера возникает
прерывание, которое нужно обслужить немедленно. Соответственно, обмен с 1wire
идет только в прерываниях, а верхний уровень только отдает команды типа
"Выставить 0", "Выставить 1", "передать бит 0 и принять данные" и "Передать бит
1 и принять данные".
Преобразовать же даташит в прогу на сях - тривиально.
Anatoly
Site Timeline
- » PIC12F
- — Next thread in » Microcontrollers (Russian)
-
- » Кварцевый генератор
- — Previous thread in » Microcontrollers (Russian)
-
- » По моему это гениально
- — Newest thread in » Microcontrollers (Russian)
-
- » (PDF) Atlas of Upper Gastrointestinal and Hepato Surgery 2nd Ed by CLAVIEN
- — The site's Newest Thread. Posted in » Electronics (Polish)
-
- » adaptateur flash photo ?
- — The site's Last Updated Thread. Posted in » Electronics (French)
-