Sonda y Cable del Sensor de Temperatura DS18B20
Introducción al sensor de temperatura DS18B20:
DS18B20 es un sensor de temperatura digital con una amplia gama de aplicaciones. Emite señales digitales y tiene las características de tamaño pequeño, bajo consumo de recursos de hardware, gran capacidad antiinterferencias y alta precisión.
Características del sensor de temperatura DS18B20:
1. Adopte el método de interfaz de un solo cable: el sensor de temperatura DS18B20 solo necesita un cable para lograr una comunicación bidireccional con el microprocesador.
2. Rango de medición de temperatura: El rango de medición de temperatura del sensor de temperatura DS18B20 puede alcanzar -55 ℃ ~ +125 ℃, y el error es ±0,4° en el rango de -10 ℃ a +85 ℃.
3. Admite la función de red multipunto: se pueden conectar múltiples sensores de temperatura DS18B20 en paralelo en una línea de datos, se pueden conectar hasta 8 en paralelo para lograr una medición de temperatura multipunto.
4. Fuente de alimentación de funcionamiento: 3,0 ~ 5,5 V/CC. El sensor de temperatura DS18B20 puede ser alimentado por una fuente de alimentación externa independiente o una fuente de alimentación parásita de línea de datos.
5. El sensor de temperatura DS18B20 no requiere ningún componente externo durante su aplicación.
6. La temperatura medida por el sensor de temperatura DS18B20 se transmite en serie en un formato digital de 9 a 12 bits.
7. Función de protección de apagado. El sensor de temperatura DS18B20 contiene una EEPROM en su interior. La precisión de la conversión digital y la temperatura de la alarma se pueden configurar a través del registro de configuración. Las configuraciones de resolución y temperatura de alarma aún se pueden guardar después de apagar el sensor de temperatura DS18B20.
8. El sensor de temperatura DS18B20 devuelve un número binario de 16 bits que representa el valor de temperatura detectado en este momento, y los cinco dígitos superiores representan positivo y negativo. Si los cinco bits altos son todos 1, significa que el valor de temperatura devuelto es un valor negativo. Si los cinco bits altos son todos 0, significa que el valor de temperatura devuelto es un valor positivo. Los siguientes 11 bits de datos representan el valor absoluto de la temperatura, luego de convertirlo a un valor decimal, multiplíquelo por 0.0625 para obtener el valor de temperatura en este momento.
Descripción del pin del sensor de temperatura DS18B20
Modo de fuente de alimentación parásita del sensor de temperatura DS18B20:
El modo de fuente de alimentación parásita del sensor de temperatura DS18B20 se muestra en la siguiente figura. En el modo de fuente de alimentación parásita, el sensor de temperatura DS18B20 extrae energía de la línea de señal: cuando la línea de señal es alta, la energía eléctrica se almacena en el condensador interno. Cuando la línea de señal tiene un nivel bajo, se consume la energía del condensador y el condensador (fuente de alimentación parásita) se carga hasta que la línea de señal alcanza un nivel alto.
Ventajas de la fuente de alimentación parásita:
1. No se requiere fuente de alimentación local y se puede realizar una medición remota de la temperatura.
2. La medición de temperatura se puede lograr con una sola línea de señal, lo que simplifica el circuito.
Desventajas del suministro de energía parásita:
Para que el sensor de temperatura DS18B20 realice una conversión de temperatura precisa, la línea de señal debe garantizar que se proporcione suficiente energía durante la conversión de temperatura. Pero cuando se cuelgan varios sensores de temperatura DS18B20 en la misma línea de señal, la resistencia pull-up por sí sola no puede proporcionar suficiente energía, lo que provocará que el sensor de temperatura DS18B20 no pueda medir la temperatura o tenga un error enorme.
Por lo tanto, el método de fuente de alimentación parásita solo es adecuado para medir la temperatura con un solo sensor de temperatura DS18B20.
DS18B20 sensor de temperatura fuente de alimentación parásita fuerte modo de fuente de alimentación pull-up:
El modo de fuente de alimentación pull-up fuerte de la fuente de alimentación parásita del sensor de temperatura DS18B20 se muestra en la siguiente figura. Para que el sensor de temperatura DS18B20 obtenga suficiente suministro de energía durante el proceso de medición de temperatura, use un MOSFET para tirar directamente de la línea de señal a VCC para proporcionar suficiente energía. (Siempre que se trate de copiar o iniciar un comando de conversión de temperatura, la línea de señal debe convertirse a un estado de pull-up fuerte dentro de un máximo de 10 μS) para resolver el problema del suministro de energía insuficiente. El fuerte modo de fuente de alimentación pull-up de la fuente de alimentación parásita del sensor de temperatura DS18B20 es adecuado para aplicaciones de medición de temperatura multipunto, pero requiere una línea de E/S más para una fuerte conmutación pull-up.
Modo de fuente de alimentación externa del sensor de temperatura DS18B20:
En el modo de fuente de alimentación externa, la fuente de alimentación de trabajo del sensor de temperatura DS18B20 está conectada al pin VDD. No hay problema de corriente de suministro de energía insuficiente y se puede garantizar la precisión de la conversión. Al mismo tiempo, se pueden conectar varios sensores de temperatura DS18B20 al bus para formar un sistema de medición de temperatura multipunto. El método de suministro de energía externo es el mejor método de suministro de energía para el sensor de temperatura DS18B20: funciona de manera estable y confiable, tiene una gran capacidad antiinterferente y el circuito es relativamente simple.
Estructura interna del sensor de temperatura DS18B20:
El interior del sensor de temperatura DS18B20 está compuesto por ROM de 64 bits, memoria caché, generador CRC, dispositivo sensible a la temperatura, disparador de temperatura alta y baja y registro de configuración.
1. ROM de 64 bits del sensor de temperatura DS18B20
Hay una ROM de 64 bits dentro del sensor de temperatura DS18B20 y la ROM curada tiene ciertos contenidos. Los ocho bits inferiores (fijados en 28H) son el número de identificación del tipo de producto, los siguientes 48 bits son el número de serie y los ocho bits superiores son los 56 bits anteriores del código de verificación de redundancia cíclica.
2. Mapeo de memoria del sensor de temperatura DS18B20
Hay unidades de memoria caché de 9 bytes en el sensor de temperatura DS18B20, como se muestra en la siguiente figura.
3. Registro de configuración del sensor de temperatura DS18B20
El bit BIT7 más alto del byte de registro de configuración del sensor de temperatura DS18B20 es el bit de modo de prueba. Es 0 cuando se envía de fábrica y no es necesario que el usuario lo cambie. BIT6 y BIT5 se utilizan para configurar la resolución de conversión del sensor de temperatura DS18B20. Hay cuatro opciones de resolución: 9, 10, 11 y 12 bits. Los tiempos de conversión correspondientes son: 93,73 ms, 187,5 ms, 375 ms y 750 ms respectivamente. Los 5 bits inferiores restantes son bits reservados (todos 1).
Las configuraciones predeterminadas R0 y R1 del sensor de temperatura DS18B20 son 11. Esa es una resolución de 12 bits, es decir, 1 bit representa 0,0625 grados Celsius.
Lectura y escritura del sensor de temperatura DS18B20.
instrucción
El valor de temperatura convertido por el sensor de temperatura DS18B20 se almacena en los bytes 0 y 1 de la memoria de almacenamiento temporal de alta velocidad en forma de complemento de dos bytes. Entonces, cuando solo queremos leer el valor de temperatura, solo necesitamos leer los bytes 0 y 1 en el registro temporal.
Los sencillos pasos para leer el valor de temperatura son los siguientes:
1. Omita la operación de la ROM.
2. Enviar comando de conversión de temperatura.
3. Omita la operación de la ROM.
4. Envíe el comando de lectura de temperatura.
5. Lea el valor de temperatura.
Inicialización del sensor de temperatura DS18B20
El dispositivo maestro primero envía un pulso de bajo nivel de 480 a 960 microsegundos, luego libera el bus a un nivel alto y detecta el bus dentro de los 480 microsegundos siguientes. Si hay un nivel bajo, significa que hay un sensor de temperatura DS18B20 en el bus que ha respondido. Si no hay un nivel bajo, significa que no hay respuesta del sensor de temperatura DS18B20 en el bus.
Como dispositivo esclavo, el sensor de temperatura DS18B20 ha estado detectando si hay un nivel bajo de 480-960 microsegundos en el bus tan pronto como se enciende. Si es así, espere entre 15 y 60 microsegundos después de que el bus alcance el nivel alto, luego baje el nivel del bus durante 60 a 240 microsegundos para responder con un pulso, indicando al host que el dispositivo está listo. Si no se detecta, seguirá comprobando y esperando.
Operación de escritura del sensor de temperatura DS18B20:
El ciclo de escritura es de un mínimo de 60 microsegundos y un máximo de 120 microsegundos.
Al comienzo del ciclo de escritura, el dispositivo maestro primero baja el bus durante 1 microsegundo para indicar el inicio del ciclo de escritura. Luego, si el maestro quiere escribir un 0, pone el bus en nivel bajo. Si el maestro quiere escribir 1, establece el bus en alto durante al menos 60 microsegundos hasta el final del ciclo de escritura y luego libera el bus en alto durante al menos 1 microsegundo para permitir que el bus se recupere. El sensor de temperatura DS18B20 espera 15 microsegundos después de detectar que el bus está bajado y luego comienza a muestrear el bus de 15 us a 45 us. Es 1 si el nivel del bus es alto durante el período de muestreo y 0 si el nivel del bus es bajo durante el período de muestreo.
Lea el funcionamiento del sensor de temperatura DS18B20:
El tiempo de la operación de lectura de datos también se divide en dos procesos: tiempo de lectura 0 y tiempo de lectura 1.
El ciclo de lectura es cuando el dispositivo maestro baja el bus único durante 1 microsegundo y luego libera el bus único a un nivel alto para permitir que el sensor de temperatura DS18B20 transmita datos al bus único. Como sensor de temperatura esclavo DS18B20, comienza a enviar datos después de detectar que el bus está bajo durante 1 microsegundo. Si desea enviar 0, baje el bus hasta el final del ciclo de lectura. Si desea enviar 1, suelte el bus al nivel alto.
El dispositivo maestro inicialmente baja el bus durante 1 microsegundo y luego lo libera, y luego completa el muestreo y la detección del bus en 15 microsegundos, incluido el 1 microsegundo anterior de bajar el nivel del bus. Si el nivel del bus es bajo durante el período de muestreo, se confirma como 0. Si el bus está alto durante el período de muestreo, se confirma como 1. Se necesitan al menos 60 microsegundos para completar un proceso de sincronización de lectura.
Circuito de aplicación del sensor de temperatura DS18B20
Método de cableado DS18B20 único: VDD está conectado a la fuente de alimentación, DQ está conectado al pin del microcontrolador, se agrega una resistencia pull-up y GND está conectado a tierra. Tenga en cuenta que esta resistencia pull-up es necesaria, es decir, el pin DQ debe tener una resistencia pull-up.
Una rutina para el sensor de temperatura DS18B20
/******************DS18B20 mide la temperatura******************
*Modelo de MCU: STC89C52RC
*Entorno de desarrollo: KEIL
*Función: DS18B20 mide la temperatura y la muestra en el tubo digital.
***********************************************/
#incluir <reg52.h>
#definir uchar carácter sin firmar
#definir uint int sin firmar
bit DS = P2^2;
bit LE1 = P2^6;
bit LE2 = P2^7;
temperatura unitaria;
bandera uchar1;
tabla de códigos de caracteres sin firmar[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
tabla de códigos de caracteres sin firmar1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
retraso nulo (cuenta de uint)
{
uint yo;
mientras (cuenta)
{
yo=200;
mientras(i>0)
i--;
contar--;
}
}
anular dsreset (anular)
{
uint yo;
DS=0;
i=103;
mientras(i>0)i--;
DS=1;
yo=4;
mientras(i>0)i--;
}
bit tmpreadbit(nulo)
{
uint yo;
poco eso;
DS=0;i++;
DS=1;i++;i++;
datos=DS;
i=8;mientras(i>0)i--;
regresar (dat);
}
uchar tmpread(nulo)
{
uchar i,j,dat;
datos=0;
para(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);
}
retorno(dat);
}
void tmpwritebyte(uchar dat)
{
uint yo;
uchar j;
prueba de bitsb;
para(j=1;j<=8;j++)
{
pruebab=dat&0x01;
dat=dat>>1;
if(testb) //escribe 1
{
DS=0;
i++;i++;
DS=1;
i=8;mientras(i>0)i--;
}
demás
{
DS=0;
i=8;mientras(i>0)i--;
DS=1;
i++;i++;
}
}
}
cambio de tmp nulo (nulo)
{
dsreset();
retraso(1);
tmpwritebyte(0xcc);
tmpwritebyte(0x44);
}
uintmp()
{
flotar tt;
uchar a,b;
dsreset();
retraso(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temperatura=b;
temperatura<<=8;
temperatura=temp|a;
tt=temperatura*0,0625;
temperatura=tt*10+0,5;
temperatura de retorno;
}
pantalla vacía (temperatura unitaria)
{
uchar A1,A2,A2t,A3;
A1=temperatura/100;
A2t=temperatura%100;
A2=A2t/10;
A3=A2t%10;
LE1=0;
P0=table[A1]; //Mostrar dígitos de centenas
LE1=1;
LE1=0;
LE2=0;
P0=0xfe;
LE2=1;
LE2=0;
retraso(1);
LE1=0;
P0=table1[A2]; //Mostrar dígito de las decenas
LE1=1;
LE1=0;
LE2=0;
P0=0xfd;
LE2=1;
LE2=0;
retraso(1);
LE1=0;
P0=table[A3]; //Mostrar dígitos de unidades
LE1=1;
LE1=0;
LE2=0;
P0=0xfb;
LE2=1;
LE2=0;
retraso(1);
}
vacío principal()
{
uchar a;
hacer
{
tmpcambio();
para(a=10;a>0;a--)
{
mostrar(tmp());
}
} mientras(1);
}
DS18B20 es un sensor de temperatura digital con una amplia gama de aplicaciones. Emite señales digitales y tiene las características de tamaño pequeño, bajo consumo de recursos de hardware, gran capacidad antiinterferencias y alta precisión.
1. Adopte el método de interfaz de un solo cable: el sensor de temperatura DS18B20 solo necesita un cable para lograr una comunicación bidireccional con el microprocesador.
2. Rango de medición de temperatura: El rango de medición de temperatura del sensor de temperatura DS18B20 puede alcanzar -55 ℃ ~ +125 ℃, y el error es ±0,4° en el rango de -10 ℃ a +85 ℃.
3. Admite la función de red multipunto: se pueden conectar múltiples sensores de temperatura DS18B20 en paralelo en una línea de datos, se pueden conectar hasta 8 en paralelo para lograr una medición de temperatura multipunto.
4. Fuente de alimentación de funcionamiento: 3,0 ~ 5,5 V/CC. El sensor de temperatura DS18B20 puede ser alimentado por una fuente de alimentación externa independiente o una fuente de alimentación parásita de línea de datos.
5. El sensor de temperatura DS18B20 no requiere ningún componente externo durante su aplicación.
6. La temperatura medida por el sensor de temperatura DS18B20 se transmite en serie en un formato digital de 9 a 12 bits.
7. Función de protección de apagado. El sensor de temperatura DS18B20 contiene una EEPROM en su interior. La precisión de la conversión digital y la temperatura de la alarma se pueden configurar a través del registro de configuración. Las configuraciones de resolución y temperatura de alarma aún se pueden guardar después de apagar el sensor de temperatura DS18B20.
8. El sensor de temperatura DS18B20 devuelve un número binario de 16 bits que representa el valor de temperatura detectado en este momento, y los cinco dígitos superiores representan positivo y negativo. Si los cinco bits altos son todos 1, significa que el valor de temperatura devuelto es un valor negativo. Si los cinco bits altos son todos 0, significa que el valor de temperatura devuelto es un valor positivo. Los siguientes 11 bits de datos representan el valor absoluto de la temperatura, luego de convertirlo a un valor decimal, multiplíquelo por 0.0625 para obtener el valor de temperatura en este momento.
Descripción del pin del sensor de temperatura DS18B20
Modo de fuente de alimentación parásita del sensor de temperatura DS18B20:
El modo de fuente de alimentación parásita del sensor de temperatura DS18B20 se muestra en la siguiente figura. En el modo de fuente de alimentación parásita, el sensor de temperatura DS18B20 extrae energía de la línea de señal: cuando la línea de señal es alta, la energía eléctrica se almacena en el condensador interno. Cuando la línea de señal tiene un nivel bajo, se consume la energía del condensador y el condensador (fuente de alimentación parásita) se carga hasta que la línea de señal alcanza un nivel alto.
Ventajas de la fuente de alimentación parásita:
1. No se requiere fuente de alimentación local y se puede realizar una medición remota de la temperatura.
2. La medición de temperatura se puede lograr con una sola línea de señal, lo que simplifica el circuito.
Desventajas del suministro de energía parásita:
Para que el sensor de temperatura DS18B20 realice una conversión de temperatura precisa, la línea de señal debe garantizar que se proporcione suficiente energía durante la conversión de temperatura. Pero cuando se cuelgan varios sensores de temperatura DS18B20 en la misma línea de señal, la resistencia pull-up por sí sola no puede proporcionar suficiente energía, lo que provocará que el sensor de temperatura DS18B20 no pueda medir la temperatura o tenga un error enorme.
Por lo tanto, el método de fuente de alimentación parásita solo es adecuado para medir la temperatura con un solo sensor de temperatura DS18B20.
DS18B20 sensor de temperatura fuente de alimentación parásita fuerte modo de fuente de alimentación pull-up:
El modo de fuente de alimentación pull-up fuerte de la fuente de alimentación parásita del sensor de temperatura DS18B20 se muestra en la siguiente figura. Para que el sensor de temperatura DS18B20 obtenga suficiente suministro de energía durante el proceso de medición de temperatura, use un MOSFET para tirar directamente de la línea de señal a VCC para proporcionar suficiente energía. (Siempre que se trate de copiar o iniciar un comando de conversión de temperatura, la línea de señal debe convertirse a un estado de pull-up fuerte dentro de un máximo de 10 μS) para resolver el problema del suministro de energía insuficiente. El fuerte modo de fuente de alimentación pull-up de la fuente de alimentación parásita del sensor de temperatura DS18B20 es adecuado para aplicaciones de medición de temperatura multipunto, pero requiere una línea de E/S más para una fuerte conmutación pull-up.
Modo de fuente de alimentación externa del sensor de temperatura DS18B20:
En el modo de fuente de alimentación externa, la fuente de alimentación de trabajo del sensor de temperatura DS18B20 está conectada al pin VDD. No hay problema de corriente de suministro de energía insuficiente y se puede garantizar la precisión de la conversión. Al mismo tiempo, se pueden conectar varios sensores de temperatura DS18B20 al bus para formar un sistema de medición de temperatura multipunto. El método de suministro de energía externo es el mejor método de suministro de energía para el sensor de temperatura DS18B20: funciona de manera estable y confiable, tiene una gran capacidad antiinterferente y el circuito es relativamente simple.
Estructura interna del sensor de temperatura DS18B20:
El interior del sensor de temperatura DS18B20 está compuesto por ROM de 64 bits, memoria caché, generador CRC, dispositivo sensible a la temperatura, disparador de temperatura alta y baja y registro de configuración.
1. ROM de 64 bits del sensor de temperatura DS18B20
Hay una ROM de 64 bits dentro del sensor de temperatura DS18B20 y la ROM curada tiene ciertos contenidos. Los ocho bits inferiores (fijados en 28H) son el número de identificación del tipo de producto, los siguientes 48 bits son el número de serie y los ocho bits superiores son los 56 bits anteriores del código de verificación de redundancia cíclica.
2. Mapeo de memoria del sensor de temperatura DS18B20
Hay unidades de memoria caché de 9 bytes en el sensor de temperatura DS18B20, como se muestra en la siguiente figura.
3. Registro de configuración del sensor de temperatura DS18B20
El bit BIT7 más alto del byte de registro de configuración del sensor de temperatura DS18B20 es el bit de modo de prueba. Es 0 cuando se envía de fábrica y no es necesario que el usuario lo cambie. BIT6 y BIT5 se utilizan para configurar la resolución de conversión del sensor de temperatura DS18B20. Hay cuatro opciones de resolución: 9, 10, 11 y 12 bits. Los tiempos de conversión correspondientes son: 93,73 ms, 187,5 ms, 375 ms y 750 ms respectivamente. Los 5 bits inferiores restantes son bits reservados (todos 1).
Las configuraciones predeterminadas R0 y R1 del sensor de temperatura DS18B20 son 11. Esa es una resolución de 12 bits, es decir, 1 bit representa 0,0625 grados Celsius.
Lectura y escritura del sensor de temperatura DS18B20.
instrucción
El valor de temperatura convertido por el sensor de temperatura DS18B20 se almacena en los bytes 0 y 1 de la memoria de almacenamiento temporal de alta velocidad en forma de complemento de dos bytes. Entonces, cuando solo queremos leer el valor de temperatura, solo necesitamos leer los bytes 0 y 1 en el registro temporal.
Los sencillos pasos para leer el valor de temperatura son los siguientes:
1. Omita la operación de la ROM.
2. Enviar comando de conversión de temperatura.
3. Omita la operación de la ROM.
4. Envíe el comando de lectura de temperatura.
5. Lea el valor de temperatura.
Inicialización del sensor de temperatura DS18B20
El dispositivo maestro primero envía un pulso de bajo nivel de 480 a 960 microsegundos, luego libera el bus a un nivel alto y detecta el bus dentro de los 480 microsegundos siguientes. Si hay un nivel bajo, significa que hay un sensor de temperatura DS18B20 en el bus que ha respondido. Si no hay un nivel bajo, significa que no hay respuesta del sensor de temperatura DS18B20 en el bus.
Como dispositivo esclavo, el sensor de temperatura DS18B20 ha estado detectando si hay un nivel bajo de 480-960 microsegundos en el bus tan pronto como se enciende. Si es así, espere entre 15 y 60 microsegundos después de que el bus alcance el nivel alto, luego baje el nivel del bus durante 60 a 240 microsegundos para responder con un pulso, indicando al host que el dispositivo está listo. Si no se detecta, seguirá comprobando y esperando.
Operación de escritura del sensor de temperatura DS18B20:
El ciclo de escritura es de un mínimo de 60 microsegundos y un máximo de 120 microsegundos.
Al comienzo del ciclo de escritura, el dispositivo maestro primero baja el bus durante 1 microsegundo para indicar el inicio del ciclo de escritura. Luego, si el maestro quiere escribir un 0, pone el bus en nivel bajo. Si el maestro quiere escribir 1, establece el bus en alto durante al menos 60 microsegundos hasta el final del ciclo de escritura y luego libera el bus en alto durante al menos 1 microsegundo para permitir que el bus se recupere. El sensor de temperatura DS18B20 espera 15 microsegundos después de detectar que el bus está bajado y luego comienza a muestrear el bus de 15 us a 45 us. Es 1 si el nivel del bus es alto durante el período de muestreo y 0 si el nivel del bus es bajo durante el período de muestreo.
Lea el funcionamiento del sensor de temperatura DS18B20:
El tiempo de la operación de lectura de datos también se divide en dos procesos: tiempo de lectura 0 y tiempo de lectura 1.
El ciclo de lectura es cuando el dispositivo maestro baja el bus único durante 1 microsegundo y luego libera el bus único a un nivel alto para permitir que el sensor de temperatura DS18B20 transmita datos al bus único. Como sensor de temperatura esclavo DS18B20, comienza a enviar datos después de detectar que el bus está bajo durante 1 microsegundo. Si desea enviar 0, baje el bus hasta el final del ciclo de lectura. Si desea enviar 1, suelte el bus al nivel alto.
El dispositivo maestro inicialmente baja el bus durante 1 microsegundo y luego lo libera, y luego completa el muestreo y la detección del bus en 15 microsegundos, incluido el 1 microsegundo anterior de bajar el nivel del bus. Si el nivel del bus es bajo durante el período de muestreo, se confirma como 0. Si el bus está alto durante el período de muestreo, se confirma como 1. Se necesitan al menos 60 microsegundos para completar un proceso de sincronización de lectura.
Circuito de aplicación del sensor de temperatura DS18B20
Método de cableado DS18B20 único: VDD está conectado a la fuente de alimentación, DQ está conectado al pin del microcontrolador, se agrega una resistencia pull-up y GND está conectado a tierra. Tenga en cuenta que esta resistencia pull-up es necesaria, es decir, el pin DQ debe tener una resistencia pull-up.
Una rutina para el sensor de temperatura DS18B20
/******************DS18B20 mide la temperatura******************
*Modelo de MCU: STC89C52RC
*Entorno de desarrollo: KEIL
*Función: DS18B20 mide la temperatura y la muestra en el tubo digital.
***********************************************/
#incluir <reg52.h>
#definir uchar carácter sin firmar
#definir uint int sin firmar
bit DS = P2^2;
bit LE1 = P2^6;
bit LE2 = P2^7;
temperatura unitaria;
bandera uchar1;
tabla de códigos de caracteres sin firmar[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
tabla de códigos de caracteres sin firmar1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
retraso nulo (cuenta de uint)
{
uint yo;
mientras (cuenta)
{
yo=200;
mientras(i>0)
i--;
contar--;
}
}
anular dsreset (anular)
{
uint yo;
DS=0;
i=103;
mientras(i>0)i--;
DS=1;
yo=4;
mientras(i>0)i--;
}
bit tmpreadbit(nulo)
{
uint yo;
poco eso;
DS=0;i++;
DS=1;i++;i++;
datos=DS;
i=8;mientras(i>0)i--;
regresar (dat);
}
uchar tmpread(nulo)
{
uchar i,j,dat;
datos=0;
para(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);
}
retorno(dat);
}
void tmpwritebyte(uchar dat)
{
uint yo;
uchar j;
prueba de bitsb;
para(j=1;j<=8;j++)
{
pruebab=dat&0x01;
dat=dat>>1;
if(testb) //escribe 1
{
DS=0;
i++;i++;
DS=1;
i=8;mientras(i>0)i--;
}
demás
{
DS=0;
i=8;mientras(i>0)i--;
DS=1;
i++;i++;
}
}
}
cambio de tmp nulo (nulo)
{
dsreset();
retraso(1);
tmpwritebyte(0xcc);
tmpwritebyte(0x44);
}
uintmp()
{
flotar tt;
uchar a,b;
dsreset();
retraso(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temperatura=b;
temperatura<<=8;
temperatura=temp|a;
tt=temperatura*0,0625;
temperatura=tt*10+0,5;
temperatura de retorno;
}
pantalla vacía (temperatura unitaria)
{
uchar A1,A2,A2t,A3;
A1=temperatura/100;
A2t=temperatura%100;
A2=A2t/10;
A3=A2t%10;
LE1=0;
P0=table[A1]; //Mostrar dígitos de centenas
LE1=1;
LE1=0;
LE2=0;
P0=0xfe;
LE2=1;
LE2=0;
retraso(1);
LE1=0;
P0=table1[A2]; //Mostrar dígito de las decenas
LE1=1;
LE1=0;
LE2=0;
P0=0xfd;
LE2=1;
LE2=0;
retraso(1);
LE1=0;
P0=table[A3]; //Mostrar dígitos de unidades
LE1=1;
LE1=0;
LE2=0;
P0=0xfb;
LE2=1;
LE2=0;
retraso(1);
}
vacío principal()
{
uchar a;
hacer
{
tmpcambio();
para(a=10;a>0;a--)
{
mostrar(tmp());
}
} mientras(1);
}