Autor Tema: Conversor AD , tan fácil y a la vez tan difícil  (Leído 4938 veces)

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

Desconectado Nuhuanda

  • PIC10
  • *
  • Mensajes: 7
Conversor AD , tan fácil y a la vez tan difícil
« en: 31 de Octubre de 2005, 06:13:00 »
Hola. He estado leyendo en el foto, pero no he encontrado solución a  mi problema. Le agradecería a alguien que me echase un cabo, ya que estoy super estancado. Bueno, os cuento:

Utilizo el pic184550, y quiero leer una entrada analógica, para luego sacarla por el PORTB, en forma digital. Parecía todo muy simple, pero ... se ve que no tengo ni idea.

Estoy programando en ASM. Se programar en C, pero no se programar en C para pics, ya que no me conozco las funciones.

El codigo que utilizo es el siguiente:


---------------------------------------------------------------------------------------------------------
LIST    P=18F4550              ;SELECCIONA EL PROCESADOR

#INCLUDE "P18F4550.INC"   ;CONTIENE LA DEFINICIÓN DE VARIABLES DEL PIC
 
ORG 0000       ;(INTERRUPCIÓN DE RESET)
GOTO INICIO      ;COMIENZO DEL PROGRAMA


INICIO
 
  CALL   INITADC      ;LLAMA A LA SUBRUTINA QUE INICIALICA EL ADC
  CLRF   TRISB      ;CONFIGURA EL PUERTO B COMO TODO SALIDAS
  CLRF   W      ;BORRA EL ACUMULADOR
  MOVWF   PORTB      ;BORRA EL PUERTO B (TODAS LAS SALIDAS A 0)

BUCLE                  
  CLRF   W      ;BORRA EL ACUMULADOR
  CALL   GETADC      ;OBTIENE LOS DATOS DEL CONVERSOR
  MOVWF   PORTB      ;ESCRIBE LOS 8 BITS DE MÁS PESO EN PORTB
  GOTO   BUCLE      ;REPITE LA OPERACIÓN
   
GETADC
  BCF      ADCON0, CHS0
  BCF      ADCON0, CHS1
  BCF      ADCON0, CHS2
  BCF      ADCON0, CHS3   ;CANAL 0 SELECCIONADO PARA LEER
  BSF      ADCON0, GO
   
  ADCLOOP
     BTFSC   ADCON0, GO      ;ESPERA A QUE FINALICE LA CONVERSIÓN
     GOTO   ADCLOOP         

  BCF  PIR1, ADIF      ;BORRA LA BANDERA DE CONVERSIÓN COMPLETADA
  MOVF   ADRESH,W   ;DEVUELVE LOS 6 BITS DE MAS PESO DEL RESULTADO

  RETURN

INITADC
   
  CLRF   TRISA      ;CONFIGURA PORTA A TODO ENTRADAS (LAS PONE A 1)
  COMF   TRISA      ;TRISA = 0011 1111
   
   
  MOVLW   B"00000111"      ;
  MOVWF   ADCON1         ;(VSS = 0, VDD = 5)
 
  ;CONFIGURACIÓN DE CANALES
   
  MOVLW   B"00000111"
  MOVWF   ADCON0      

  MOVLW   B"00111010"      
  MOVWF   ADCON2      ;JUSTIFICA A LA IZQUIERDA, 20 TAD, FOSC/32

  BCF   PIR1, ADIF   ;BORRA LA BANDERA DE FIN DE CONVERSIÓN

  BCF   PIE1, ADIE   ;DESACTIVA LA INTERRUPCIÓN DEL ADC

  RETURN


END
   

---------------------------------------------------------------------------------------------------------

Me gustaría saber si estoy cometiendo algún error de programación. Este pic tiene unos registros que son los LAT. También he provado a utilizarlos, pero sin ningún cambio. No se si el fallo lo estoy cometiendo a la hora de pasar el programa al pic. Utilizo un cuarzo de 4MHz, Tengo que usar alguna cofiguración especial??En principio, lo único que hago es desactivar el Watchdog. Tendría que hacer algo más?

Pues eso, la entrada se la estoy metiendo directamente de una fuente de tensión a AN0, y la voy variando. Pero los pines del puerto B ni se inmutan.

Si han llegado hasta aquí... muchas gracias de antemano, solo por aguantarme.. Sonrisa

Mi e-mail es: nuhuanda1@hotmail.com

Otra cosa... si quisiera aprender cómo se hace esto mismo, pero en C, dónde podría hacerlo? agradecería alguna dirección, o algún libro que me pueda comprar.

Desconectado xerex

  • PIC16
  • ***
  • Mensajes: 138
    • Mi servidor, mi casa.
RE: Conversor AD , tan fácil y a la vez tan difícil
« Respuesta #1 en: 31 de Octubre de 2005, 14:20:00 »
Hola compañero, no es para ayudarte mucho ya que no piloto asm de los pic, pero creo que es tan sencillo como leer el registro del ADC y ponerlo en el puerto B, como mucho solo necesitaras un registro del bloque de registros del pic como auxiliar nada mas y tener configurado el puerto B como salida.

Otra nota mas, se que parece una tonteria, pero si sabes C para PC o para un AVR, sabes C para PICs. Te recomiendo el "Manual de usuario del compilador PCW de CSS" escrito por Andres Canovas Lopez y reeditado en formato PDF por Victor Dorado. lo tienes en la web y es gratuito, con el podras aprender las funciones necesarias para aprobechar los PIC a tope.

Un saludo.

P.D.: si alguien sabe la direccion exacta de este manual que por favor se la pongan a nuestro compañero, que yo no me la se.
Es falso eso de que el saber no ocupa lugar....


No se donde poner tanto libro.... :P

Desconectado Nuhuanda

  • PIC10
  • *
  • Mensajes: 7
RE: Conversor AD , tan fácil y a la vez tan difícil
« Respuesta #2 en: 31 de Octubre de 2005, 16:36:00 »
Muchas gracias por el cable. Por poco que sea, es grata la ayuda.
Voy a ver si le hecho un vistazo al pdf del que me hablas.
Sonrisa

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
RE: Conversor AD , tan fácil y a la vez tan difícil
« Respuesta #3 en: 03 de Noviembre de 2005, 07:52:00 »
YO TRABAJO EN LENGUAJE ASEMBLER, SI AUN TIENESE EL PROBLEMA CON EL CONVERSOR ANALOGO AVISAME, YA QUE RESIENTEMENTE TRABAJE CON EL. EL ASEMBLER QUE USO ES EL TIPICO DE MPLAB Y LO MANEJO CON EL 18F452.

Desconectado Nuhuanda

  • PIC10
  • *
  • Mensajes: 7
RE: Conversor AD , tan fácil y a la vez tan difícil
« Respuesta #4 en: 03 de Noviembre de 2005, 15:42:00 »
Si me puedes echar una mano... mejor que mejor... porque todavía no se en qué estoy fallando. Como no sea problema de hardware.... quizás esté poniendo resisntencias donde no van... o algo así. Voy a ver si hago una fotillo del circuito que tengo en protoboard y la subo.

Quizás pueda ser también fallo en la configuración del winpic.

He estado comiendome la cabeza estos 2 últimos días con el lenguaje C. Me he instalado 200 mil programas para compilar en C. No todos soportan mi pic, que es el 18f4550. Al final me quedo con 2, el Mplab C18 y el SourceBoost. De los cuales hoy por la mañana conseguí que me compilase un codigo simple el mplab.... menos mal.....

Tengo que programar en C, porque después de estoy quiero hacer una comunicación vía USB. Y en ensamblador va a ser un coñazo. Así que si puedo, lo haré en C. De todas maneras el problema del conversor todavía no lo he resuelto. El programa es bien sencillo, como puedes ver arriva. Le he puesto los tiempos exagerados , para asegurarme de que le da tiempo de hacer la conversión entre muestra y muestra. A ver si mañana saco las fotos... .thank you very very  much

Desconectado PAOLA09

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 332
RE: Conversor AD , tan fácil y a la vez tan difícil
« Respuesta #5 en: 08 de Noviembre de 2005, 10:16:00 »
HOLA PERDONA QUE NO TE RESPONDIERA ANTES NO HABIA TENIDO TIEMPO DE REVISAR, CUANDO TENGAS LOS ESQUEMAS ME AVISAS PARA HECHARLE UN VISTAZO A VER QUE SUCEDE.

UN DETALLE QUE A VECES AFECTA LA CONVERSION ES AGREGAR UN CAPACITOR PUEDE SER DE 1uF EN LA ENTRADA DEL CONVERSOR, ADEMAS HAY QUE TENER MUY EN CUENTA EL TIEMPO DE ESPERA ENTRE CONVERSION Y CONVERSION.

SI QUIERES TE ENVIO LA PARTE QUE TENGO DEL CONVERSOR ESTA EN ASEMBLE PERO NO CREO QUE SEA MUY DIFICIL QUE LO PASES A EL LENGUAJE DE C.

TAMBIEN HAY OTRO FACTOR QUE PUEDE DAR PROBLEMAS LA MAYORIA DE LOS PICS PRESENTA UN PUNTO EN DONDE LA CONVERSION FALLA ES DECIR QUE AL RECIBIR LOS DATOS ESTES INCREMENTANDO Y DE REPENTE PRESENTES UNA CAIDA, PERO NO HAY PROBLEMA PORQUE RETORNA NUEVAMENTE SU FUNCIONAMIENTO ESTE LAPSO ES PEQUEÑO.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Conversor AD , tan fácil y a la vez tan difícil
« Respuesta #6 en: 22 de Noviembre de 2005, 05:57:00 »
Escrito originalmente por Nuhuanda

Codigo:

   MOVLW   B"00000111"
   MOVWF   ADCON0





Aquí estas seteando el bit GO, no es necesario y hasta es algo que NO DEBES HACER.


Escrito originalmente por Nuhuanda

Me gustaría saber si estoy cometiendo algún error de programación. Este pic tiene unos registros que son los LAT. También he provado a utilizarlos, pero sin ningún cambio. No se si el fallo lo estoy cometiendo a la hora de pasar el programa al pic. Utilizo un cuarzo de 4MHz, Tengo que usar alguna cofiguración especial??En principio, lo único que hago es desactivar el Watchdog. Tendría que hacer algo más?

Pues eso, la entrada se la estoy metiendo directamente de una fuente de tensión a AN0, y la voy variando. Pero los pines del puerto B ni se inmutan.

Si han llegado hasta aquí... muchas gracias de antemano, solo por aguantarme.. Sonrisa

Mi e-mail es: nuhuanda1@hotmail.com

Otra cosa... si quisiera aprender cómo se hace esto mismo, pero en C, dónde podría hacerlo? agradecería alguna dirección, o algún libro que me pueda comprar.



Como regla general, si quieres sacar un dato por un puerto , utiliza los registros LAT

Si quieres leer un dato, utiliza los registros PORT.

Puedes fijarte si los weak-pullups del PORTB estan habilitados? Si es así, ten cuidado en que la corriente estará muy limitada y puede que los pines esten en 1, pero no se enciendan los leds.

En cuanto al manual de C, te aconsejo empieces con los datasheet del C18.  Es el mejor compilador de C que conozco para los pic

- 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 Nuhuanda

  • PIC10
  • *
  • Mensajes: 7
RE: Conversor AD , tan fácil y a la vez tan difícil
« Respuesta #7 en: 23 de Noviembre de 2005, 07:42:00 »
Hola. Te agradezco mucho tus comentarios. Lo que había puesto de que iba a sacar fotos del montaje, lo he tenido que aplazar, ya que ahora mismo no tengo ningún montaje realizado.

El programa que puse anteriormente, lo tengo ya descartado, ya que me he pasado a la programación en c. Lo que tenía hecho en 200 mil líneas, en c lo haces en 4. Sonrisa.

En efecto, comencé por el compilador C18 de microchip, pero debido a que también tengo que implemetar una función para comunicación USB-PC, decidí pasarme al  PCW, y programarlo en CCS, porque uno de los miembros de este foro, en concreto Jaime Fernández-Caro Belmonte, ya hizo un programa que realiza esta comunicación. Debo decir que sin la ayuda de esta persona, no hubiera sido capaz de sacar la comunicación yo solo, ya que lo veo cosa más que de un ingeniero técnico industrial, de un informático.

De todas maneras me podrías decir en qué me limita tener los weak-pullups del PORTB habilitados o no? Yo solamente quiero utilizar el PortB para simular en los leds que me está haciendo bien la conversión, es decir, que cuando le meta 5 voltios todos los leds estén encendidos, y cuando le menta 2.5 voltios, se enciendas sus correspondientes en codigo binario.