TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: ajkite en 14 de Noviembre de 2005, 06:46:00

Título: Ayuda con el conversor A/D del 16F876
Publicado por: ajkite en 14 de Noviembre de 2005, 06:46:00
Qeria saber si me podriais poner un ejemplo sobre como se configura el conversor A/D, el cual kiero poner una entrada analogica y las demas digitales, asi como se pone el reloj del conversor y todo lo akello q ay q acer para q convierta la señal

gracias
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: PAOLA09 en 14 de Noviembre de 2005, 08:01:00
HOLA
QUISIERA SABER QUE LENGUAJE DE PROGRAMACION USAS YA QUE YO MANEJO EL ASSEMBLER, SI LO MANEJAS TAMBIEN TE INCLUYO UN EJEMPLO.
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: ajkite en 14 de Noviembre de 2005, 10:33:00
Pues utilizo el MPLAB
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: PAOLA09 en 15 de Noviembre de 2005, 09:39:00
hola perdona la demora

BCF      STATUS,RPO;BANCO 0
MOVLW B"10000001";FOSC/32 SELECCION DE RA0
MOVWF ADCON0
BSF      STATUS,RP0;CAMBIO DE BANCO 1
MOVLW  B"10001110"
MOVWF  ADCON1
MOVLW B"00000001";DEJANDO COMO ENTRADA A AN0
MOVWF  TRISA

;MANEJO DE LA CONVERSION
 UNO                                               CLRF   ADRESL
BCF                                          STATUS,RP0
AD         CALL   DELAY1
         CALL   DELAY1
         CLRF   VAR10
         CLRF   VAR11

;INICIO DEL PROCESO      
         CLRF   ADRESH
         BSF   ADCON0,GODONE
CRA0                      BTFSC   ADCON0,GODONE   ;VERIFICACION DE FINALIZACION DE CONVERSION
         GOTO   CRA0
         MOVF   ADRESH,00
                                                MOVWF    VAR11
                                                BSF           STATUS,RP0
         MOVF   ADRESL,00
                                                MOVWF    VAR10
                                                GOTO        UNO
LOS DELAYS SON TIEMPOS NECESARIOS ENTRE CONVERSIONES DE ESTE DEPENDE DE QUE SE REALICE ADECUADAMENTE, LO PUSE PARA QUE SE REALIZARA LA CONVERSION CONTINUAMENTE PERO LO PUEDES AJUSTAR SEGUN LO NECESITES. LAS VARIABLES DE ALMACENAMIENTO SE DEBEN DECLARAR Y EN CASO DE SER SALIDA EN EL PUERTO SE REEMPLAZARAN POR ESTE.

CUALQUIER COSA ME DICES SI TE SIRVIO.
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: ajkite en 15 de Noviembre de 2005, 11:02:00
Pues muxisima grasia ma servido d muxa ayuda pero tengo una pekeña duda, no se xq as puesto
ADRESL,00 , significa lo de 00

Contx si no te importa y grasias de nuevo
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: PAOLA09 en 15 de Noviembre de 2005, 13:22:00
HOLA
LA LINEA DE MOVF ADRESL,00 SIGNIFICA QUE SE PASA EL DATO DEL REGISTRO A W PARA ASIGNARLO A OTRO O AL PURTO. NO OLVIDES QUE EL TIEMPO DE LOS DELAYS ES IMPORTANTE PARA UNA BUENA CONVERSIO.

Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 17 de Noviembre de 2005, 20:02:00
Escrito originalmente por ajkite
Pues muxisima grasia ma servido d muxa ayuda pero tengo una pekeña duda, no se xq as puesto
ADRESL,00 , significa lo de 00

Contx si no te importa y grasias de nuevo


Tambien puedes hacer

Codigo:
w set 0


y luego hacer

Codigo:
   movf ADRESL,w


Estas pequeñas cosas hacen mas legible el codigo
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 21 de Diciembre de 2005, 15:02:00
saludos,

tengo unas dudas a ver si alguien me puede ayudar:
1. se puede emular con el mplab la entrada analogica del pic?
2. para que son los analog channels? chs2,  chs1, chs0.. en el data los veo pero no encuentro para que valen.
3. en el ejemplo que pones, usando an0 .... por an0 que entra solo la entrada analogica verdad?

por cierto no estoy muy seguro de como funciona el convertidor AD.... tienes 3 entradas no? voltaje alto, bajo y la de referencia que seria la que saldria del potenciometro verdad?

espero me puedan ayudar

gracias por adelantado... felices fiestas
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: migsantiago en 21 de Diciembre de 2005, 16:58:00
Paola,

yo ya he usado el ADC en lenguaje C y desde siempre he copiado una rutina de conversión que incluye un delay de 20us.

¿Porqué se deben poner siempre 20us? ¿o se tienen que cambiar según la velocidad del PIC?

Siempre me han funcionado a 4MHz, pero ahora que estoy corriendo PICs a 20MHz, no sé si se deba aumentar o disminuir ese delay.

Thanks Pao Divertido
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 22 de Diciembre de 2005, 05:26:00
Escrito originalmente por dj_valle
saludos,

tengo unas dudas a ver si alguien me puede ayudar:
1. se puede emular con el mplab la entrada analogica del pic?
2. para que son los analog channels? chs2,  chs1, chs0.. en el data los veo pero no encuentro para que valen.
3. en el ejemplo que pones, usando an0 .... por an0 que entra solo la entrada analogica verdad?

por cierto no estoy muy seguro de como funciona el convertidor AD.... tienes 3 entradas no? voltaje alto, bajo y la de referencia que seria la que saldria del potenciometro verdad?

felices fiestas


A ver si te puedo ayudar.

1) Si se puede utilizar.  Si solo haras una entrada analógica es simple y se hace con el SCL generator en el menu Debugger de MPLAB.  Antes debes tener habilitado el modulo MPSIM

2) No entiendo bien tu pregunta pero te explico que el PIC (cualquier sea su modelo de los PIC16f... tienen un solo conversor A/D con "varias" entradas).  Uno selecciona por software que entrada leer en cada momento, a esto se le llama multiplexar.

3) AN0 es la entrada analógica 0, que corresponde a seleccionar el Canal 0.  No es el único canal, puedes tener hasta 13 canales A/D dependiendo del pic que uses!!  

4) Si bien no le pusiste numero le pongo yo.  Un A/D funciona con un "voltaje de referencia" y la entrada analógica.  El voltaje de referencia en el caso de los PIC16F, va entre 0V y Vdd.  Vdd puede ser 5 V como máximo y nunca más que el voltaje de alimentación + 0.3V o 0.5V  .  Si elijes la referencia como "interna" entonces el módulo A/D usará al alimentación del PIC como referencia de comparación para la entrada analógica que le pongas.
Ese ejemplod el potenciómetro es UN EJEMPLO; de ninguna manera es la única forma de ingresarle una entrada analógica a un PIC.

Además te aclaro que en los pic, el pin AN0 puede ser también un pin digital de propósito general , si se deshabilita esa entrada analógica.  De hecho hay muchas configuraciones posibles en los A/D para seleccionar los canales A/D que realmente vayamos a usar y no otros.

Espero te haya sido de mejor utilidad la explicacion
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: poi5on en 22 de Diciembre de 2005, 07:43:00
Hola amigos,
Toda esa infomración la puedes conseguir el el datasheet del PIC q estes usando, ahi te muestra una tabla de las configuraciones posibles y el valor que debe tener el registro ADCON1 para que puedas trabajar que fue lo que hizo PAOLA09 en el programa de ejemplo.

Saludos
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: PAOLA09 en 22 de Diciembre de 2005, 10:50:00
HOLA

EL DELAY QUE USAS ES EL TIEMPO MINIMO QUE DEBE HABER ENTRE CONVERSIONES, EL CUAL ES IGUAL AL DOBLE DEL TIEMPO DE ADQUISICION. ESTE TIEMPO SE VE AFECTADO POR EL PRODUCTO DE EL TIEMPO ELEGIDO EN LOS REGISTROS ADCON0 Y ADCON1  PARA LA CONVERSION Y POR EL TIEMPO DEL OSCILADOR. ES DECIR QUE ENTRE MAYOR SEA LA FRECUENCIA DE TU OSCILADOR MENOR SERA DICHO TIEMPO.

TAD=T(ADSC1:ADSC0)*TOSC

NO HAY QUE OLVIDAR QUE LA FRECUENCIA MINIMA DE TAD DEBE SER IGUAL A 1.6u

EL TIEMPO QUE TIENES IGUAL TE SIRVE, PERO SI NECESITAS MAS RAPIDEZ EN TU APLICACION LO PUEDES REDUCIR.Sonrisa Gigante
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 22 de Diciembre de 2005, 11:48:00
Escrito originalmente por PAOLA09
HOLA

EL DELAY QUE USAS ES EL TIEMPO MINIMO QUE DEBE HABER ENTRE CONVERSIONES, EL CUAL ES IGUAL AL DOBLE DEL TIEMPO DE ADQUISICION. ESTE TIEMPO SE VE AFECTADO POR EL PRODUCTO DE EL TIEMPO ELEGIDO EN LOS REGISTROS ADCON0 Y ADCON1  PARA LA CONVERSION Y POR EL TIEMPO DEL OSCILADOR. ES DECIR QUE ENTRE MAYOR SEA LA FRECUENCIA DE TU OSCILADOR MENOR SERA DICHO TIEMPO.

TAD=T(ADSC1:ADSC0)*TOSC

NO HAY QUE OLVIDAR QUE LA FRECUENCIA MINIMA DE TAD DEBE SER IGUAL A 1.6u

EL TIEMPO QUE TIENES IGUAL TE SIRVE, PERO SI NECESITAS MAS RAPIDEZ EN TU APLICACION LO PUEDES REDUCIR.Sonrisa Gigante


Paola, te estas olvidando que el TIEMPO DE MUESTREo no es el doble, ni el simple, ni el triple de nada...

El tiempo de muestreo es directamente proporcional a la constante RC formada por la impedancia externa en la pata del PIC y el capacitor de muestreo o de HOLD...

Este tiempo es totalmente independiente de la velocidad con la que luego el A/D realice la conversión (una vez capturado el valor analógico, es el tiempo que tarda en convertirlo en digital).

En la hoja de datos hay un ejemplo de como calcular este tiempo de muestreo .. o al menos un tiempo aproximado, aunque si uno no conoce bien la impedancia de la carga que le coloa entonces deberá hacer pruebas empíricas.

Para los que no lo sepan, el tiempo de muestreo es el tiempo que transcurre entre que uno selecciona un canal A/D hasta que se dispara la conversión.   Es el tiempo que tiene el capacitor de muestreo para tomar el mismo valor de tensión que tiene la entrada.  

Saludos
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: PAOLA09 en 22 de Diciembre de 2005, 13:17:00
HOLA

CREO QUE TAL VEZ NO FUI MUY CLARA ME REFIERO AL TIEMO ENTRE LAS CONVERSIONES, NO AL TIEMPO DE MUESTREO EL CUAL SI ES INDEPENDIENTE DE LA FRECUENCIA PERO EL TIEMPO ENTRE MUESTRAS COMO DICE EL DATASHEET ES EL DOBLE DEL TAD. ESTE ES EL TIEMPO POR EL CUAL PREGUNTANSonrisa Gigante
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 23 de Diciembre de 2005, 11:56:00
Pao, creo que tu hablas de algo muy particular y yo hablo de algo mas general.

migsantiago escribió:
Escrito originalmente por migsantiago
Paola,
yo ya he usado el ADC en lenguaje C y desde siempre he copiado una rutina de conversión que incluye un delay de 20us.
¿Porqué se deben poner siempre 20us? ¿o se tienen que cambiar según la velocidad del PIC?
Siempre me han funcionado a 4MHz, pero ahora que estoy corriendo PICs a 20MHz, no sé si se deba aumentar o disminuir ese delay.



A lo cual yo respondí lo del sampling time.  Siendo más general expondré lo sigueinte:

El tiempo de demora entre conversiones debe ser el siguiente:

Tdelayentreconversiones >= 2Tad + Tmuestreo

TAd depende de la configuracion del A/D tal cual PAOLA dijo.

Tmuestreo depende de la carga conectada al A/D.

El tiempo de muestreo será mucho menor si siempre se sensa la misma entrada y si la misma cambia muy lento entonces podemos casi no utilizarlo, ahora bien si se utilizan varios canales A/D y encima con señales muy diferentes entre sí entonces el tiempo de muestreo no es despreciable y debe tenerse muy en cuenta.

Saludos
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: migsantiago en 23 de Diciembre de 2005, 15:44:00
Voy a revisar la hoja de características del 877A para entender al 100% esto.

Por ahora dejaré los 20us, ya que no me afectan en las conversiones que haré.

Gracias Pao y maunix. Idea
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 24 de Diciembre de 2005, 08:21:00
Escrito originalmente por migsantiago
Voy a revisar la hoja de características del 877A para entender al 100% esto.

Por ahora dejaré los 20us, ya que no me afectan en las conversiones que haré.

Gracias Pao y maunix. Idea


Muy bien, me alegro que te haya servido la información.  Cualquier otra duda vuelves a preguntar.

Esa parte de los Tad y demases,  genera muchas dudas en mucha gente, es que tal vez no esté bien explicado en el datasheet o al menos está explicado muy brevemente.
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 25 de Diciembre de 2005, 20:25:00
A ver si te puedo ayudar.

1) Si se puede utilizar.  Si solo haras una entrada analógica es simple y se hace con el SCL generator en el menu Debugger de MPLAB.  Antes debes tener habilitado el modulo MPSIM
     

hola, gracias por la info...... pero me podrias explicar un poco mas sobre el uso de la entrada analogica en mplab? no encuentro donde ponerla, si hay que configurar varias entradas o que. Es decir, ¿¿donde voy en el scl workbook?

si sabes de algun manual de mplab donde explique como configurarlo me seria de gran ayuda.. muchas gracias de antemano.
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 25 de Diciembre de 2005, 21:30:00
Escrito originalmente por dj_valle
A ver si te puedo ayudar.

1) Si se puede utilizar.  Si solo haras una entrada analógica es simple y se hace con el SCL generator en el menu Debugger de MPLAB.  Antes debes tener habilitado el modulo MPSIM
     

hola, gracias por la info...... pero me podrias explicar un poco mas sobre el uso de la entrada analogica en mplab? no encuentro donde ponerla, si hay que configurar varias entradas o que. Es decir, ¿¿donde voy en el scl workbook?

si sabes de algun manual de mplab donde explique como configurarlo me seria de gran ayuda.. muchas gracias de antemano.


Volviendo sobre los pasos, el help del MPLAB es quien te dice como hacer un estimulo, pero la verdad que es muy malo el help en este aspecto.   Yo lo pude hacer a prueba y error.

En el SCL workbook  REGISTER INJECTION.

Ahí Tienes varios campos. En REGISTER, seleccionas el ADRESL, al estimular este registro automáticamente también se estimulará el ADRESH.  Cabe aclarar que todo esto es para 1 solo canal.

En DATA FILENAME ubicas un archivo .txt en que tengas los valorse A/D que le quieras cargar al módulo para irlo simulando.

En formato puedes seleccionar entre varios, te aconsejo uses el HEX.

El Trigger dejalo ON DEMAND que significa que se irá agregando un valor al registro A/D a medida que lo vayas leyendo (no antes) y esto lo hace todo más facil.

En el archivo .TXT , lo debes haber hecho previamente con el Bloc de Notas (notepad), y tienes que poner datos que no sean mayores a 10 bits, osea algo asi por ejemplo

3F0
1A0
041
001

y terminas el archivo sin dejar ningun espacio ni ninguna linea por debajo del mismo y lo guardas.

Guardas el workbook si quieres y tienes que EXPORTAR el archivo .SCL.

Es decir que todo esto que has hecho es para generar un archivo .SCL

Para generar dicho archivo pulsas en Generate SCL from Workbook.  Y te genera un archivo .scl del nombre que tu elijas.

Luego vas al menu STIMULUS CONTROLLER también dentro de debugger.
Para poder simular el archivo SCL recien generado debes clickear en "attach" y elijes el archivo .SCL.

LISTO!

Cabe aclarar que Microchip aún no ha hecho ningun manual sobre el lenguaje SCL pero en el foro de Microchip alguna gente ha posteado algunos ejemplos y trucos sobre su uso!!  
Digamos, todo esto es automático y se genera un archivo .SCL pero si queremos hacer cosas especiales como por ejemplo estimulos A/D para diferentes canale del A/D (no siempre el mismo canal) entonces hay que recurrir al lenguaje SCL directamente y es ahí donde entra en juego "conocer" el lenguaje SCL que es en definitiva un set reducido del VHDL (muy conocido por quienes programan las famosas FPGA ).

Espero te sirva, si no he sido claro en algún punto vuelveme a preguntar Sonrisa
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 26 de Diciembre de 2005, 11:57:00
Escrito originalmente por dj_valle
hola,
Pues bien, segun veo en el programa de paola09 la conversion la saca por:
MOVF ADDRESH,00
MOVF ADDRESL,00  

que como parece decir puedes cambiar 00 por el puerto de salida.
Pues bien, si pones el potenciometro y utilizas todo el rango 0v - 5v la conversion la realiza por una regla de 3? es decir a 0v = 00h y 5v = ffh? y ese resultado lo saca por el puerto por el que lo establezcas a la salida verdad?



Vamos por partes.  Si haces MOVF ADDRESH,00 es lo mismo que hacer MOVF ADDRESH,w

es decir que mueves el resultado al Registro de Trabajo : WREG

Luego puedes hacer lo que quieras con el.

En el 16F876 y 16F873 el conversor es de 10 bits.  Si quieres usar solo 8 bits entonces tienes que usar Justificacion Izquierda y leer nada mas que el ADRESH.

Si quieres trabajar con los 10 bits, pues entonces el cálculo es similar a lo que tu expusiste

0V = 000h
5V = 3FFh

Saludos
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 26 de Diciembre de 2005, 12:31:00
ok, muchas gracias por la respuesta... voy a probar a crear un pequeño programa y simularlo en una protoboard a ver que me da.

gracias.
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 26 de Diciembre de 2005, 17:36:00
hola,

probe el programa pero no me va, no me muestra nada por el puertob, alguien me puede ayudar?

LIST P=PIC16F876
INCLUDE <P16f876.INC>

STATUS EQU 0X03
ADCON0 EQU 0X1F
ADCON1 EQU 0X9F
TRISA EQU 0X85
TRISB EQU 0X86
VAR10 EQU 0X20
VAR11 EQU 0X21
ADRESH EQU 0X1E
ADRESL EQU 0X9E
PORTA EQU 0X05
PORTB EQU 0X06
REG1 EQU 0X40
REG2 EQU 0X41

   CLRF REG1
   CLRF REG2
   BCF STATUS,5;BANCO 0
   MOVLW B"10000001";FOSC/23 SELECCION DE RA0
   MOVWF ADCON0
   BSF STATUS,5;CAMBIO DE BANCO 1
   MOVLW B"10001110"
   MOVWF ADCON1
   MOVLW B"000001";DEJANDO COMO ENTRADA A AN0
   MOVWF TRISA
   MOVLW B"00000000"
   MOVWF TRISB      ;PUERTO B COMO SALIDA
   CLRF VAR10
   CLRF VAR11
;MANEJO DE LA CONVERSION
UNO
   CLRF ADRESL
   BCF STATUS,5 ;VOLVEMOS AL BANCO 0
   MOVF VAR11,W
   MOVWF PORTB
   MOVLW 0X64
   MOVWF REG1
   MOVLW 0X05
   MOVWF REG2      
   CALL DELAY1
   CALL DELAY1

;INICIO DEL PROCESO
   CLRF ADRESH
   BSF ADCON0,2    ;EMPEZAR LA CONVERSION
CRA0
   BTFSC ADCON0,2 ;VERIFICACION DE FINALIZACION DE CONVERSION
   GOTO CRA0
   MOVF ADRESH,W
   BSF STATUS,5   ;PASAMOS A BANCO 1
   MOVF ADRESL,W
   MOVWF VAR11
   GOTO UNO


DELAY1
   DECFSZ REG1
   GOTO DELAY1
   MOVLW 0X64
   MOVWF REG1
   DECFSZ REG2
   GOTO DELAY1
   MOVLW 0X05
   MOVWF REG2
   RETLW DELAY1
   

END

el trisa y trisb lo puse en 85 y 86 pq me daba un error el mplab... no se pq, porque en otros programas los puse como 05 y 06 y me daba ok.

es un programa hecho a partir de el de paola09...

gracias de antemano.
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 27 de Diciembre de 2005, 05:11:00
Escrito originalmente por dj_valle
hola,

probe el programa pero no me va, no me muestra nada por el puertob, alguien me puede ayudar?

LIST P=PIC16F876
INCLUDE <P16f876.INC>

el trisa y trisb lo puse en 85 y 86 pq me daba un error el mplab... no se pq, porque en otros programas los puse como 05 y 06 y me daba ok.

es un programa hecho a partir de el de paola09...




Antes de probar tu firmware te digo lo siguiente.

Si utilizas el archivo .INC no hace falta que definas los registros TRISA; TRISB, etc!  Eso es precisamente lo que incluye el archivo .INC

Eso sí, estan descriptos en mayúscula y si tu los escribes en minúscula es por eso que no te da error, pero si incurriras en errores en tu software.

Además incluye definiciones de los bits de cada registro, como por ejemplo en vez de hacer STATUS,5 puedes hacer STATUS,RP0 ya que el RP0 está definido como 5 en el archivo .INC

Espero te sirva, borres esas definiciones de registros y vuelvas a intentar, si aún sigue sin funcionar te pido que postees tu código utilizando el marco [ code ] y [ /code ]  o agregalo como un adjunto zipeado.


Saludos
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 27 de Diciembre de 2005, 06:12:00
hola,

ya decia yo que me daba error, bueno ahora lo que hice para probar fue cambiar el adcon1 bit (7) ponerlo a 0, para usar 8 bits del adresh y 2 bits del adresl... que ha pasado? que ahora por el puerto b leo el adresh y me funciona ok, al menos varia la salida segun cambio el potenciometro, pero si intento sacar por el puerto b el adreshL me sigue igual no me indica nada.
Primero pensaba que no me sacaba nada por el puerto b al mandar el adresL pq trabajaba en el banco1 pero cambie todo y sigue sin funcionar, es decir mande var11 al portb desde el banco0 y nada de nada sigue sin ir. Sin embargo mandado al portb el ADRESH si que me varia la salida del puerto.

Hago algo mal con el adresL o tiene algun modo especial de mandar su info al puerto?

gracias
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 27 de Diciembre de 2005, 06:15:00
hola,

ya decia yo que me daba error, bueno ahora lo que hice para probar fue cambiar el adcon1 bit (7) ponerlo a 0, para usar 8 bits del adresh y 2 bits del adresl... que ha pasado? que ahora por el puerto b leo el adresh y me funciona ok, al menos varia la salida segun cambio el potenciometro, pero si intento sacar por el puerto b el adreshL me sigue igual no me indica nada.
Primero pensaba que no me sacaba nada por el puerto b al mandar el adresL pq trabajaba en el banco1 pero cambie todo y sigue sin funcionar, es decir mande var11 al portb desde el banco0 y nada de nada sigue sin ir. Sin embargo mandado al portb el ADRESH si que me varia la salida del puerto.

Hago algo mal con el adresL o tiene algun modo especial de mandar su info al puerto?

gracias
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: PAOLA09 en 27 de Diciembre de 2005, 08:37:00
HOLA


DEBES TENER EN CUENTA QUE ADRESL ESTA EN EL BANCO1 Y PORTB EN EL BANCO 0 AL IGUAL QUE LA VAIABLE VAR11, ES DECIR EL RESULTADO DE ADRESL LO DEBES PONER PRIMERO EN W Y LUEGO CAMBIAR EL BANCO A 0 PARA ASI ASIGNARLO EN EL PUERTO O LA VARIABLE QUE SE USA. DE TODAS FORMAS ME GUSTARIA VER LA PARTE DE TU PROGRAMA DONDE HACES DICHA ASIGNACION.


Sonrisa Gigante
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 27 de Diciembre de 2005, 09:58:00
Asi es postea tu código y recuerda usar los corchetes y code!!


Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 27 de Diciembre de 2005, 12:02:00
paola lo del codigo lo tengo puesto en el de antes:
movf var11,w
movwf portb
esto en el canal 0

y en el canal 1 habia movido:
mowf adresl,w
movwf var11

esta bien?


maunix: no se a lo que te refieres con lo de usar los corchetes y el code... de dodne lo saco? es que llevo programando esto 3 dias

gracias
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: PAOLA09 en 27 de Diciembre de 2005, 13:46:00
HOLA

TU PROBLEMA ES LO QUE PENSE DEBES TENER EN CUENTA QUE VAR11 Y VAR10 ESTAN EN EL BANCO 0,  POR LO QUE CUANDO USAS CLRF VAR11 Y CLRF VAR10 LO DEBES HACER EN EL BANCO 0.

ADEMAS PARA PASAR LOS DATOS AL PUERTO PRIMERO DEBERAS TENER:

BSF          STATUS,5 ;BANCO1
MOVF        ADRESL,W
BCF          STATUS,5 ;BANCO0
MOVWF    VAR11

ASI CUANDO ASIGNES EL VALOR DE ADRESL QUEDARA LISTO PARA SACARSE POR EL PUERTO, NO OLVIDES TENER EN CUENTA QUE LOS REGISTROS POR DEFECTO ESTAN EN MAYUSCULAS. PRUEBALO Y ME DICES A VER SI AHORA TE FUNCIONA CON EL ADRESH NO TE DA ERROR YA QUE ESTE ESTA EN EK MISMO BANCO QUE LOS REGISTROS VAR11 Y VAR10. ESPERO TE HAYA SIDO UTILSonrisa Gigante

Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 27 de Diciembre de 2005, 16:57:00
holas,

muchas gracias por las aportaciones... tenias razon paola hacia el cambio de adresl a w en el banco 1 pero tambien cambiaba de w a var11 en el banco 1.... ya esta todo funcionando ok (supongo, pq al menos los leds se encienden a la salida variando el potenciometro).

muchas gracias a todos por las aportaciones y el tiempo empleado.

GRACIAS
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 27 de Diciembre de 2005, 21:50:00
Hola.... una duda Muchas risas

he estado tomando muestras a traves de salidas port puerto C y B (AdresH y adresL) a traves de un potenciometro para variar la tension de entrada mas o menos como un Lm35 y esto son los resultados:
mv ..... decimal ..... hex
170        37             25
180        39             27
190        45             2d
210        45             2d
220        47             2f
230        52             34
240        53             35
250        no varia la salida
260        55             37


es decir, de 190 a 220 tiene la misma salida  y en 250mv no varia la salida con respecto a 240mv....
y da un salto enorme de 180mv a 190mv en la salida del PIC.

alguien sabe pq? esto lo he hecho como medida si tuviera un lm35 que varia cada 10mv/ºC pero asi en 19, 20 21 y 22 ºC daria la misma salida el PIC, por eso es necesario un amplificador, para agrandar las señales y tener mas margen de cambio?
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 28 de Diciembre de 2005, 05:12:00
Escrito originalmente por dj_valle
Hola.... una duda Muchas risas



Realmente es muy raro lo que muestras y solo lo adjudico a que tengas algún problema de ruido o a que tu muestreo sea muy bajo.

Aumentale el tiempo de muestreo, es decir el tiempo en que no haces "nada" despues de sacar por el puerto los datos.  El tiempo de establecimiento es proporcional a la impedancia externa.  Te aconsejo hagas caso a Microchip y utilices algúna impedancia del orden de los 10K o menor para tu potenciómetro.

Por último todo esto "suponiendo" que haces las cosas bien, jamás tuve semejante problema.

Si trabajas con un conversor de 5V / 1024 muestras, tienes una precisión de 5mV
Lograr tal precisión te digo NO ES FACIL , porqué? precisamente por cuestiones de ruido eléctrico.  Es por eso que cuando la gente pide conversores A/D de 12 o 16 bits uno no sabe si reirse o si admirar a quien pretende utilizar tal precisión.  No solo es complicado técnicamente eliminar el ruido sino que también es muy costoso.

Los ultimos bits terminan variando precisamente por razones de ruido de conmutación de la fuente o el ruido blanco presente en todas las líneas eléctricas y semiconductores.  Si usas un osciloscopio debieras ver este ripple.  Si utilizas un multímetro digital tal vez no porque estos equipos gralmente toman un valor RMS y lo integran (esto si el multímetro es bueno) .  Si tu multímetro es de marca poco reconocida y te salió un par de dólares... entonces ni siquiera confíes en el.

Vuelve a probar con un potenciómetro menor y un mayor tiempo entre muestras y vuelve a postear tus resultados.

Si piensas utilizar esos sensores de temperatura te aconsejo lo "escales" con algún operacional con ganancia 3 a 1, o 10 a 1.
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 28 de Diciembre de 2005, 08:48:00
Hola

aqui te posteo los resultados creados con un potenciometro 4k7 y un retardo de mas o menos 1 segundo entre muestras:

mv ......... dec
230 ........ 49
235 ........ 52
240 ........ 53
257 ........ 55
267 ........ 57
270 ........ 60
275 ........ 61
300 ........ 63
308 ........ 65
310 ........ 68
315 ........ 69
337 ........ 71

los rangos que dan saltos es porque la salida me la detectaba con el mismo valor que el anterior com 280mv, 285mv, 290mv. Puede que sea por el polimetro que me marque mal la entrada.... alguien me deja un fluke?

de todas formas si parece que cada bit de conversion varie 5mv a la entrada. Ampliare la señal con un operacional a ver que obtengo a la salida.

gracias
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 28 de Diciembre de 2005, 12:57:00
Ahora me queda mas claro, fijate , si tu tensión de referencia es 5,00V , entonces cada bit significará 4.88mV
Haciendo algunos redondeos, tu tabla quedaría así.

230   . . . . . . 47
235   . . . . . . 48
240   . . . . . . 49
257   . . . . . . 52
267   . . . . . . 54
270   . . . . . . 55
275   . . . . . . 56
300   . . . . . . 61
308   . . . . . . 63
310   . . . . . . 63
315   . . . . . . 64
337   . . . . . . 69

Pero esto es teniendo en cuenta que tu voltaje de referencia no oscile en ningun momento ni en lo más mínimo.  Pon un capacitor de .1uF entre VCC y GND bien pegado al microcontrolador.

Por otra parte, en tus datos veo que el salto es en los 300mV.  Esto se puede deber precisamente al multímetro.   Me preguntarás porque... bien, te paso a contar que es lo que me parece.
Los multímetros trabajan en un rango amplio de tensiones, esto lo logran todo con una misma lógica de conversión interna la cual va "conmutando" de acuerdo a la tensión de entrada (si es auto rango) o manualmente con la llave selectora si es manual.

IMaginemos que tu multímetro tiene una resolución de 100 valores en todo le rango.
Esto hace que por ejemplo de 0 a 200mV tenga una precisión de ese rango dividido 100 veces, es decir una precisión de 2mV.  
Al pasarse al siguiente rango, que iría de 0 a 2V, la precisión también son 100 valores, es decir que la precisión ahora es de 20mV por medición.  Me sigues la idea?

Es probable que tu multímetro tenga un salto justo en esa zona.

Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: dj_valle en 28 de Diciembre de 2005, 13:13:00
aja, ya veo a lo que te refieres.

ahora lo que he hecho es amplificar la señal x3 (con el condensador que me haces referencia)... ahora da todos los resultados mas precisos.

No sabia lo del polimetro que funcionara asi, pensaba que el valor que daban de origen (margen de error) era lineal en toda su escala, pero segun dices no es asi... de todas formas voy a ver si puedo adquirir un fluke serie 100.

Muchas gracias por la explicacion, me fue muy util.
Título: RE: Ayuda con el conversor A/D del 16F876
Publicado por: maunix en 29 de Diciembre de 2005, 05:36:00
Escrito originalmente por dj_valle
aja, ya veo a lo que te refieres.

ahora lo que he hecho es amplificar la señal x3 (con el condensador que me haces referencia)... ahora da todos los resultados mas precisos.

No sabia lo del polimetro que funcionara asi, pensaba que el valor que daban de origen (margen de error) era lineal en toda su escala, pero segun dices no es asi... de todas formas voy a ver si puedo adquirir un fluke serie 100.

Muchas gracias por la explicacion, me fue muy util.


Me alegro que te haya funcionado mejor y aqui estaré para leer tus novedades Sonrisa

Lo del capacitor es SIEMPRE SIEMPRE SIEMPRE, en cualquier PIC que uses, no importa que sea para sensar canales analógicos o no.

Saludos
Título: Re: Ayuda con el conversor A/D del 16F876
Publicado por: Leon Pic en 04 de Diciembre de 2008, 10:57:29
Hola a todos.

Re abro este hilo, porque mi problema trata de la simulación del convertidor A/D y como aquí se trató el tema, y pali en un hilo que armó cita este post, será más fácil su uso.

Cuando simulo, el primer dato que cargo en el archivo con los valores a convertir, lo hace bien. El problema está cuando vuelvo a repetir el ciclo y tendría que convertir el segundo dato, lo hace mal. He cargado nuevos datos en el archivo que luego vuelvo a generar el archivo.scl y me convierte el mismo dato. :shock:

No logro decifrar dónde está el error, ya que el primero, lo hace bien pero el segundo no.

Estos son los valores a convertir:

2FF
041
1FF

La forma que guardé los datos es como lo explica aquí MAUNIX.

Este es el valor que me convierte a 2FF ADRESH B'00000010' y ADRESL B'11111111' (tiene alineación a la deracha), como ven, lo hace bien, pero cuando convierte el valor 041 me da ADRESH B'00010000' ADRESL B'01000000' Y por mas que cambie otro valor, me da el mismo dato.

Copio la primera parte del código

Código: ASM
  1. CLRF            PORTA
  2.                         CLRF            PORTB
  3.                         CLRF            PORTC
  4.                         CLRF            PORTD
  5.                         CLRF            PORTC
  6.                         BSF                     STATUS,RP0
  7.                         BCF                     STATUS,RP1
  8.                         MOVLW           .1
  9.                         MOVWF           TRISA                   ;RA0 COMO ENTRADA, DEMÁS SALIDAS
  10.                         BCF                     STATUS,RP0              ;BANCO 0
  11.                         MOVLW           B'10000001'             ;ADC ENC. CANAL AN0. FREC Fosc/32
  12.                         MOVWF           ADCON0                  ;Y LO PASO AL ADCON0
  13.                         BSF                     STATUS,RP0              ;BANCO 1
  14.                         MOVLW           B'10000001'             ;+VREF RA3, ALINEACIÓN A LA DERECHA Y PORTA TODAS ANALÓGICAS.
  15.                         MOVWF           ADCON1                  ;Y LO PASO AL ADCON1
  16.                         BCF                     STATUS,RP0              ;BANCO 0
  17.                         BCF                     PIR1,ADIF               ;INDICO QUE LA CONVERSIÓN NO ESTÁ ECHA
  18.                        
  19. COMIENZO        BSF                     ADCON0,GO               ;INICIO LA CONVERSIÓN
  20. CAD                     BTFSC           ADCON0,GO               ;¿TERMINÓ LA CONVERSIÓN?
  21.                         GOTO            CAD                             ;NO, VUELVO A CAD
  22.                         GOTO            CONVERSION

Una vez que termino de hacer lo que necesito con los datos requeridos, vuelvo a la etiqueta COMIENZO. Vale aclarar que los datos ADRESL y ADRESH los paso cada valor a una pocición de la RAM correspondiente y no actuo más sobre los registro ADRESL ADRESH
Título: Re: Ayuda con el conversor A/D del 16F876
Publicado por: Leon Pic en 05 de Diciembre de 2008, 12:43:36
Solucionado.

La etiqueta COMIENZO tiene que ir en la línea BSF STATUS,RP0 que antecede a la línea MOVLW   B'10000001'

En resumen, no respeté los pasos necesario para la segunda conversión. Error tonto que sabía que pasos hay que respetar pero sin querer me equivoqué.