ADC Como agregar un segundo o tercer canal al ADC 16F876A

Hola que tal, hice el proyecto Termometro pablin, que tiene corte superior e inferior de temperatura y funciona de maravilla, con una entrada de ADC ( AN0 ).

Originalmente esta con el 16F870, yo simplemente le cambie a 16f876A, y lo uso con un potenciometro, variandolo ......

Ahora quisiera saber como puedo agregarle un canal mas en AN1, asi leeria un segundo potenciometro, pero no logro hacerlo.

Segun la hoja de datos la configuracion para AN0 es 1110 y VDD ref+ y VSS ref-.

Para 2 entradas ( AN0 y AN1 ) la config. seria 1101 y AN3 ref+ y AN2 ref- O Tambien 0101 (AN3vref+ y VSS ref-)

Pero no se como leer ambos canales osea como referencia tengo el que lee 1 solo canal pero no se como hacer la lectura del otro y independizarlo.

Alguien podria simplificarme con algun ejemplo, aca les dejo el codigo fuente .... [/B]
http://www.elemon.com.ar/media/cata...icos/Termostato electrónico con PIC y LCD.pdf

Ahi se puede ver que lel resultado de la conversion esta en movf buffer, 0

No se si deberia crear un buffer2, uni2, dec2, cen2 para nuevos digitos o si con los mismos podre sacar una segunda lectura independiente.

Me hago entender lo que quisiera hacer ? ... desde ya agradezco su ayuda !!!
 
Última edición por un moderador:
lo que tienes que hacer aparte de activar los puertos analogicos necesarios, como dices anteriormente que ya has mirado, pero tambien hay otra funcion que es asignar de que canal vas a tomar la lectura, y eso es lo que tienes que hacer

creo que para ese pic el pin 0A se selecciona asi
0013: MOVLW 00
0014: MOVWF 78
0015: BCF 03.5
0016: MOVF 1F,W
0017: ANDLW C7
0018: IORWF 78,W
0019: MOVWF 1F

y el pin a1 asi:
0026: MOVLW 08
0027: MOVWF 78
0028: MOVF 1F,W
0029: ANDLW C7
002A: IORWF 78,W
002B: MOVWF 1F

Sinceramente no se ASM o bueno se pero es tan tosco que no lo miro... pero bueno eso es lo que me genera el compilador en la linea en la que hago un seteo del canal analogico a leer
 
lo que tienes que hacer aparte de activar los puertos analogicos necesarios, como dices anteriormente que ya has mirado, pero tambien hay otra funcion que es asignar de que canal vas a tomar la lectura, y eso es lo que tienes que hacer

creo que para ese pic el pin 0A se selecciona asi
0013: MOVLW 00
0014: MOVWF 78
0015: BCF 03.5
0016: MOVF 1F,W
0017: ANDLW C7
0018: IORWF 78,W
0019: MOVWF 1F

y el pin a1 asi:
0026: MOVLW 08
0027: MOVWF 78
0028: MOVF 1F,W
0029: ANDLW C7
002A: IORWF 78,W
002B: MOVWF 1F

Sinceramente no se ASM o bueno se pero es tan tosco que no lo miro... pero bueno eso es lo que me genera el compilador en la linea en la que hago un seteo del canal analogico a leer

Ohhh, muchas gracias por la info, y veo que tiene sentido llamando al canal, voy a probar gracias !!!
 
Última edición por un moderador:
Hola Vangeluz, aparte de seleccionar el canal a leer, tal como lo a dicho el colega Vangeluz, tienes varias cosas más que debes implementar, a saber:

PRIMERO: Dar tiempo ente la lectura de un canal y otro, por ejemplo: seleccionar un canal, tiempo, leer dicho canal, seleccionar otro canal, tiempo y leer canal.
Ese "tiempo" se debe implementar para que la entrada del conversor se estabilize, de lo contrario las lecturas serán erroneas. Esto porque son varias las entradas y el conversor es uno solo. Yo cuando uso 2 canales, lo que hago es sabiendo la tasa de refresco de por ejemplo 1 lectura por segundo, el tiempo lo divido en dos y leo un canal cada 500ms, o sea cada segundo tengo la lectura de los 2 canales, de esta manera me garantizo una buena estabilidad.

SEGUNDO: Crear los registros necesario para los datos del segundo canal, por ejemplo, si deseas tener las lecturas de ambos canales en pantalla, deberás tener los datos de los dos canales siempre para poder leerlos cuando sea necesario refrescar el LCD, de lo contrario uno de los canales será representado como cero al no tener el dato real.
Más allá de lo anterior, si cada canal tiene temperaturas de corte diferentes, estos datos también deberás duplicarlos.

TERCERO: tener en cuenta que el programa principal necesitará una muy buena reestructuración y reforma para realizar todos los procesos necesarios y pertinentes a cada canal analógico que le agregues. Si bien muchas de las sub-rutinas pueden ser usadas para ambos canales, el tema de la lectura del canal, refresco del display, control con respecto a la máxima/mínima y demás, deberás implementarlo según sea necesario.

El circuito que as posteado es muy exacto, pero ten en cuenta que no es capaz de medir temperaturas por debajo de aproximadamente unos 5°C, por debajo de este valor los valores son inexactos por completo, para medir temperaturas inferiores deberás reformar el circuito y rediseñar los cálculos a realizar por el micro.
Tampoco puedes medir temperaturas superiores a los 100°c ya que el error aumenta y ya corres la posibilidad de dañar el LM35.

Espero te ayude.

Un saludo.

Atte. CARLOS.
 
Hola Vangeluz, aparte de seleccionar el canal a leer, tal como lo a dicho el colega Vangeluz, tienes varias cosas más que debes implementar, a saber:

PRIMERO: Dar tiempo ente la lectura de un canal y otro, por ejemplo: seleccionar un canal, tiempo, leer dicho canal, seleccionar otro canal, tiempo y leer canal.
Ese "tiempo" se debe implementar para que la entrada del conversor se estabilize, de lo contrario las lecturas serán erroneas. Esto porque son varias las entradas y el conversor es uno solo. Yo cuando uso 2 canales, lo que hago es sabiendo la tasa de refresco de por ejemplo 1 lectura por segundo, el tiempo lo divido en dos y leo un canal cada 500ms, o sea cada segundo tengo la lectura de los 2 canales, de esta manera me garantizo una buena estabilidad.

SEGUNDO: Crear los registros necesario para los datos del segundo canal, por ejemplo, si deseas tener las lecturas de ambos canales en pantalla, deberás tener los datos de los dos canales siempre para poder leerlos cuando sea necesario refrescar el LCD, de lo contrario uno de los canales será representado como cero al no tener el dato real.
Más allá de lo anterior, si cada canal tiene temperaturas de corte diferentes, estos datos también deberás duplicarlos.

TERCERO: tener en cuenta que el programa principal necesitará una muy buena reestructuración y reforma para realizar todos los procesos necesarios y pertinentes a cada canal analógico que le agregues. Si bien muchas de las sub-rutinas pueden ser usadas para ambos canales, el tema de la lectura del canal, refresco del display, control con respecto a la máxima/mínima y demás, deberás implementarlo según sea necesario.

El circuito que as posteado es muy exacto, pero ten en cuenta que no es capaz de medir temperaturas por debajo de aproximadamente unos 5°C, por debajo de este valor los valores son inexactos por completo, para medir temperaturas inferiores deberás reformar el circuito y rediseñar los cálculos a realizar por el micro.
Tampoco puedes medir temperaturas superiores a los 100°c ya que el error aumenta y ya corres la posibilidad de dañar el LM35.

Espero te ayude.

Un saludo.

Atte. CARLOS.

Muchas gracias Carlos, por tu extensa y muy completa explicacion, yo creo que con toda la teoria que me has dado tendria que llevarla a la practica y terminar mi objetivo !!!. Muchisimas gracias.
ATTE: Victor Angel
 
Última edición por un moderador:
Atrás
Arriba