Снова датчик температуры

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

Threaded View
Hello, All!

    Нужен цифровой, I2C или SPI (можно и UART) и, главное, что бы ноги
только с одной
стороны (корпусА типа TO).
    Т.е. типа DS18B20, но не хочется с его 1-wire связыватся.

With best regards, Alexey Kovalev



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.

                                      с уважением Владислав

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



Снова датчик температуры
Привет 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



Снова датчик температуры
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, так как нет привязки к жесткому
таймигу, что может быть большой проблемой на загруженном более важными задачами
МК.

С уважением, Дима Орлов.


С уважением, Дима Орлов.


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



Снова датчик температуры
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


Снова датчик температуры
                           П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 ? И как это чудо зовут ?

                                      с уважением Владислав

Снова датчик температуры
 Привет, 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.

   Пока!
             Юрик

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


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а какие только подвиги не готовы апологеты ЯВУ, лишь бы не учить ассемблер ;)

                                      с уважением Владислав

Re: Снова датчик температуры
Hello, Alexey Kovalev !

 >  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

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.


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



Re: Снова датчик температуры
Hемедленно нажми на RESET, Maxim Polyanskiy!


 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

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


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


Site Timeline