Librería DHT22

Librería DHT22 (AMS2302)

Librería en VHDL para controlar un sensor de temperatura y humedad DHT22 mediante protocolo serial OneWire. La librería realiza un muestreo cada dos segundos y realiza la operación de Checksum para compararlo con el Checksum que envía el sensor y así comprobar la correcta transferencia de datos, en caso contrario se envía una señal de error la cual detiene el proceso de adquisición.

Los puertos que componen a la librería son los siguientes:

CLK_FPGA: Puerto genérico de tipo integer en donde se especificará la frecuencia del reloj dada en Hertz.

RESET: Bit que reinicia el proceso de adquisición cuando se pone a ‘1’, mientras se mantenga activo el proceso está detenido.

ENABLE: Se debe poner a ‘1’ para iniciar el proceso de adquisición.

DATA: Puerto bidireccional para el protocolo serial OneWire.

ERROR: Bit que indica error en la transferencia de datos. Se activa cuando el Checksum calculado no coincide con el Checksum que envía el sensor, en caso de error el proceso se detiene completamente y se tiene que mandar un reset.

RH: Puerto de 16 bits con el valor de la humedad relativa.

TEMP: Puerto de 16 bits con el valor de la temperatura.

FIN: Bit que indica el fin de transferencia y es cuando los valores de RH y TEMP pueden ser leídos.

Funcionamiento

Conexión

El sensor cuenta con 4 pines, dos de alimentación, un pin de datos conectado a una resistencia pull-up y un pin que no se utiliza.

Control del sensor

La librería genera el protocolo OneWire que requiere el sensor según las especificaciones del DHT11, la transferencia de datos tiene la siguiente secuencia:

  • Para iniciar el FPGA manda 1 bit de inicio en ‘0’.
  • Después suelta el bus poniéndolo en alta impedancia esperando la respuesta del sensor.
  • El sensor toma el control del bus y responde con un ‘0’.
  • El sensor pone en alta impedancia al bus.
  • El sensor manda los datos de la temperatura, humedad relativa y un Checksum para que el FPGA pueda comprobar si los datos se transfirieron correctamente.
  • Se espera 2 segundos antes de empezar nuevamente el proceso.

 

Si la transferencia resultó exitosa y ya transcurrieron los 2 segundos se manda un bit de “FIN” que sólo dura un ciclo de reloj indicando que los datos están listos en el puerto RH y TEMP.

Obtención de datos.

El protocolo OneWire utiliza los tiempos en alto y bajo para determinar si ser recibió un ‘1’ o ‘0’ lógicos.

El Checksum se calcula con la suma de los valores de humedad relativa y temperatura. Tanto el FPGA y el DHT22 calculan el Checksum y deberán ser comparados, si no coinciden entonces ocurrió un error en la transferencia de datos.

Interpretar datos.

El sensor tiene un rango de operación de 0% a 100% de humedad relativa y -40°C a 80°C de temperatura. Para los valores negativos el bit más significativo (15) se pondrá a ‘1’, el sensor no utiliza complemento a dos. Los datos se envían incluyendo la parte decimal pero para obtenerla se deberá dividir el valor recibido entre 10, por ejemplo:

Temperatura sensor = 0000 0001 0111 0000‬ = 368 
Temperatura real = 368 / 10 = 36.8 °C

Para valores negativos:

Temperatura sensor = 1000 0001 0000 0001‬ = – 257
Temperatura real = -257 / 10 = – 25.7 °C 
Menú