Autor Tema: Ayuda con el conversor A/D del 16F876  (Leído 16791 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #15 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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #16 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.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #17 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.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #18 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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #19 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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #20 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.

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #21 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.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #22 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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #23 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

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #24 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

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #25 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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #26 en: 27 de Diciembre de 2005, 09:58:00 »
Asi es postea tu código y recuerda usar los corchetes y code!!


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #27 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

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #28 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


Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #29 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


 

anything