Librería en VHDL para controlar un sensor de temperatura y humedad DHT11 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 del error 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 8 bits con el valor de la humedad relativa.
TEMP: Puerto de 8 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 DHT11 calculan el Checksum y deberán ser comparados, si no coinciden entonces ocurrió un error en la transferencia de datos.