Sensor de temperatura Verilog

0

Hola, he estado trabajando en un sensor de temperatura analógico TMP36 y estoy tratando de obtener la temperatura y mostrarla en el SSD NEXYS3. Soy consciente de que el NEXYS3 no tiene un pin analógico y construí un convertidor de analógico a digital utilizando el ADC0804 de TI y un ADC de 8 bits. La parte con la que necesito ayuda es en particular obtener la entrada del sensor de temperatura. No entiendo la hoja de datos lo suficientemente bien como para encontrar la fórmula en verilog. El único ejemplo que encontré fue para un arduino en el siguiente enlace

enlace

HOJA DE DATOS

enlace

Estoy alimentando el ADC con 5 voltios y necesito ayuda para convertir su fórmula a verilog.

Voltaje en el pin en milivoltios = (lectura de ADC) * (5000/1024) Temperatura en grados centígrados = [(voltaje analógico en mV) - 500] / 10

Esas son las dos fórmulas con las que necesito ayuda. Necesito una fórmula equivalente en Verilog. La salida al SSD es un número de 8 bits, en otras palabras, solo estoy interesado en las temperaturas 0-99 para mi proyecto. Gracias cualquier ayuda sería apreciada.

    
pregunta blackninja

2 respuestas

2

Álgebra simple. Conecte uno de ellos al otro y simplifique:

mv = código * 5000/1024

temp = (mv - 500) / 10

temp * 10 = mv - 500

temp * 10 = código * 5000/1024 - 500

temp * 10 = (código * 5000) / 1024 - 500

(agregue divisor / 2 antes de realizar una división entera para redondear)

temp * 10 = (código * 5000 + 512) / 1024 - 500

temp * 10 = ((código * 5000 + 512) > > 10) - 500

Una multiplicación, un desplazamiento a la derecha por 10, una suma y una resta. Luego conviértalo a BCD y visualícelo.

Sin embargo, si tienes un ADC de 8 bits, probablemente querrás dividir por 256 en lugar de 1024 (cambiar a la derecha por 8 en lugar de 10) y agregar 128 en lugar de 512.

Y aquí hay un algoritmo para convertir binario a BCD: enlace

Simplemente ejecute eso, divídalo en grupos de 4 bits, e ingrese cada dígito en la pantalla con un grupo (después de decodificar a las 7 señales de segmento apropiadas, por supuesto).

    
respondido por el alex.forencich
0

Muchas gracias por la ayuda. Usé el código anterior para ayudarme y terminé con lo que tengo debajo si alguien lo necesita.

assign tempV = (tempin * 16'b0001001110001000 + 8'd128) / 9'b100000000; 
assign tempC = (tempV - 9'd500) / 8'd10; 

Pensé que su fórmula estaba equivocada, pero me di cuenta de que el problema que tenía era con el voltaje de entrada, que no era preciso y necesitaba un ajuste. Mi temperatura estaba en un par de grados, pero me di cuenta. Gracias, era la primera vez que trabajaba con ADC y no entendía completamente cómo funcionan, pero tengo una muy buena comprensión con algunas búsquedas.

    
respondido por el blackninja

Lea otras preguntas en las etiquetas