Autor Tema: Ayuda conversor A/D  (Leído 11392 veces)

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

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Ayuda conversor A/D
« Respuesta #30 en: 07 de Noviembre de 2007, 18:36:02 »
Buenas! He probado tu codigo Palitroquez pero sigue sin realizar lo que pretendia. De todas formas estos dias he estado mirando el dataheet del pic y ya conozco mejor el modulo A/D, aunque tu tutorial fue el inicio de todo,jeje. Bueno pues he repasado líne a linea (mediante el disassembly listing del mplab) para saber como se comportaba el pic y por que no me devolvia los valores que qeriia. Tambien he repasado las funciones del manuald e referencia de c y no encontraba ningun error, asi que decidi darmle mi toque introduciendo algunas lineas de codigo de la mejor forma que se, es decir a traves del lenguaje ensamblador. Despues de varias pruebas y muchos fallos y en el borde de la desesperacion consegui que funcionara. Aqui os adjunto el codigo por si alguien le sirve
Codigo 8 bit
Pero la cosa no queda aqui ya que salto una piedra para toparme con otra mas grande. Empiezo a programar el pic's school y... ejj error  en la direccion 0h, mi gozo en un pozo, a partir de aqui os hago otro llamamiento para ver si em podeis ayudar a que funcione ya que tampoco estoy muy seguro de que vaya a funcionar en el entrenador. Os adjunto tambien un manual del entrenador pra que veais sobre que trabajo. Muchas gracias, espero vuestras respuestas. Manul pic's school

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Ayuda conversor A/D
« Respuesta #31 en: 07 de Noviembre de 2007, 18:46:59 »
debe ser que algo te falta huntergti, porque he simulado en mplab y en proteus exitosamente (sin mencionar que el programa original fué montado en protoboard). Sospecho que debe ser al momento de cargar los estimulos.

respecto a los adjunto que pusiste, te ruego que lo pongas en otro servidor, pués toda la vida el megachimbo ese me dice:


Desafortunadamente, todo el ancho de banda disponible está reservado a nuestros usuarios premium. En consecuencia, las descargas gratuítas no estarán disponibles en las siguientes 60 minutos.


un saludo y espero que puedas solucionar el problema.  8)
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Ayuda conversor A/D
« Respuesta #32 en: 08 de Noviembre de 2007, 16:42:57 »
Puesto que no me deja adjuntar el codigo te lo dejo aqui escrito. el proteus no se me da bien manejarlo. El manual es muy grande si quieres que te lo pase dame tu correo. Lo que me interesa ahora es que mi codigo me funcione en el entrenador. Muchas gracias, un saludo
#include <18f4550.h> 
#DEVICE ADC=8
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN
#use delay(clock=48000000)

void main() {
 
  int value;
   set_tris_a(0xFF);
#ASM
   movlw   0b10001111;
   movwf   0xfc0;
   movlw   0b00000011;
   movwf   0xfc2;
   movlw   0b00001110;
   movwf   0xfc1;
#ENDASM
  while(TRUE){
     delay_us(30);
  value=read_adc();
#ASM
   movff   0xfc3,0x06
#ENDASM

     output_b(value);
#ASM
   movlw   0b00000011;
   movwf   0xfc2;
#ENDASM
  }
}

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Ayuda conversor A/D
« Respuesta #33 en: 09 de Noviembre de 2007, 15:03:25 »
Hola huntergti

anoche revisé tu programa, aquí van mis comentarios:

- está bien si quieres usar asm incrustado en c, (es la libertad que ofrece el compilador) pero no es necesario en el ejemplo. Según veo tus requerimientos son los siguientes:

    // justif. derecha, Tadq=2Tad, clock conversión osc RC
    // Vref- = Vss, Vref+ = Vdd, AN0 analog resto digital
    // selección AN0

-justificación a la derecha nop, es justificación a la izquierda para 8 bits, es decir, ADFM=0 y se hace con la directiva #DEVICE ADC=8

- las Vref y configuración del canal lo hace:  setup_adc_ports( AN0 || VSS_VDD );
- el reloj de conversión lo hace: setup_adc( ADC_CLOCK_INTERNAL );
- la selección del canal lo hace:  set_adc_channel( 0 );

como podras notar es lo mismo que el ejemplo que colgué mas arriba, ahora veamos su listado en asm



tanto adcon0 como adcon1 estan corregidos, falta cambiar el tiempo de adquisición a 2Tad (que no se como hacerlo en c entonces hay que irse a asm)

el programa queda:

Código: C
  1. #include <18f4550.h>  
  2. #fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN
  3. #use delay(clock=48000000)
  4. #byte ADCON2 = 0xFC0
  5.  
  6. void main() {
  7.   int value;
  8.   set_tris_b(0);
  9.   setup_adc_ports( AN0 || VSS_VDD );
  10.   setup_adc( ADC_CLOCK_INTERNAL );
  11.   set_adc_channel( 0 );
  12.   #asm
  13.     BSF ADCON2, 3  //ACQT0
  14.   #endasm
  15.   while(TRUE){
  16.      delay_us(30);
  17.       value = Read_ADC();
  18.       output_b(value);
  19.           value=0;
  20.   }
  21. }

hay una cosa que hay que aclarar, a lo mejor ya lo sabes, pero por si las moscas :)
al justificar a la izquierda desplazas 8 posiciones los 10 bits del CAD, entonces tomas los 8 MSB y el cálculo es como se saca para un CAD de 8 bits, es decir, para este programa 5/255*value

ejemplo, en los estimulos usé

A0
AA
3FF

estos son resultados de 10 bits

A0*5/1023 = 0,782V
AA*5/1023 = 0,83V
3FF*5/1023 = 5V

el resultado en mplab-sim para value = Read_ADC()

0x28 *5/255 = 0,784V
2A *5/255 = 0,823V
FF *5/255 = 5V

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Ayuda conversor A/D
« Respuesta #34 en: 12 de Noviembre de 2007, 15:11:33 »
Muchas gracias Palitroquez, la aclaracion del final era la que me hacia falta porque yo pensaba que addrssh y addressl debian de sacar el mismo estimulo que entraba, es decir si entraba AA debia de sacar AA. La formula esa donde la has sacado, me suena de haberla visto en algun sitio pero no lo encuentro. Una duda más, mi intencion es que lo que lo que mida el conversor pasarlo a un programa que aumenta el peso, evidentemente antes de sumar el resultado tendre que aplicar la formula no?? Para que me entiendas, imaginate que tengo en la EEPROM 128 y entra una persona que crea un estimulo de 50h por lo que adressl y addressh no me devolveran 50h sino otro valor, para convertirlo en 50h tendre que aplicar la formula no?? En caso de que sea asi no seria mas facil aplicar mi codigo?
Por cierto he intentado probar tu codigo en el pic's school pero vuelve a saltar con el maldito error 0h. El caso es que he preparado el icprog como pone el manual, si me das permiso te envio a tu correo el manual por si me puedes echar un cable. Gracias una vez mas

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Ayuda conversor A/D
« Respuesta #35 en: 13 de Noviembre de 2007, 12:22:59 »
Hola

la formula la puedes ver en la wikipic: ADC (además que explica en detalle el funcionamiento del módulo)

... Una duda más, mi intencion es que lo que lo que mida el conversor pasarlo a un programa que aumenta el peso, evidentemente antes de sumar el resultado tendre que aplicar la formula no?? Para que me entiendas, imaginate que tengo en la EEPROM 128 y entra una persona que crea un estimulo de 50h por lo que adressl y addressh no me devolveran 50h sino otro valor, para convertirlo en 50h tendre que aplicar la formula no??...

claro, necesitas aplicar la formula para llevar el número de pasos del resultado al sistema decimal que es el que usamos nosotros. Hay varias formas: la mencionada anteriormente y también usando tablas.



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Ayuda conversor A/D
« Respuesta #36 en: 27 de Noviembre de 2007, 15:30:00 »
Buenas a todos!! Después de todo este tiempo he conseguido ensamblar todo el código en mi proyecto y aunque es milagroso me funciona. Ante todo muchas gracias a todos por vuestra ayuda, pero aún me quedan pequeños detalles que debo depurar y alguna que otra duda. Una de esas dudas es la siguiente, puesto que al cad no le doy un uso muy elevado decidi utilizar mi código (que al final nadie me dijo si está bien) pero cuando le envíó un estímulo no me toma en primer estimulo a la primera, me explico, creo un estimulo con estas señales BB, FF, AA, por ejemplo. El caso que cuando realiza la primera medicion empieza por FF, la sigueinte medicion es AA y la tercera toma el BB. eso por que puede ser? Espero sus valiosas respuestas, muchas gracias

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Ayuda conversor A/D
« Respuesta #37 en: 27 de Noviembre de 2007, 17:40:40 »
Hola huntergti

me alegra que lo hayas hecho andar, la primera vez no importa como funciona, así dá animos de seguir adelante, después vendran las preguntas de porque funciona  :D

...pero cuando le envíó un estímulo no me toma en primer estimulo a la primera, me explico, creo un estimulo con estas señales BB, FF, AA, por ejemplo. El caso que cuando realiza la primera medicion empieza por FF, la sigueinte medicion es AA y la tercera toma el BB. eso por que puede ser? Espero sus valiosas respuestas, muchas gracias

cuando termina la conversión, el mplab-sim deberá enviar al ADRES(H:L) lo que tengas en el archivo de las muestras. en el ejemplo que mencionas si tienes BB,FF,AA entonces el resultado de la conversión irá en ese orden.


...puesto que al cad no le doy un uso muy elevado decidi utilizar mi código (que al final nadie me dijo si está bien) ...

no se a que código te refieres, por lo que he visto has mostrado uno y ya estan las posibles correciones.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Ayuda conversor A/D
« Respuesta #38 en: 28 de Noviembre de 2007, 13:50:51 »
Perdón por mi torpeza, ahora si dejo el código definitivo (transformado a ensamblador). Probad eso que digo, que si el orden de estimulos es BB, FF, AA me sale primero FF siguiente AA y por ultimo BB. Si os pasa lo mismo decidmelo, que no cual es el motivo porque al fin y al cabo funciona. Gracias por tus respuestas Palitroquez.

; ZONA DE DATOS *********************************************************************

   LIST P=18F4550      ;directive to define processor
   #include <P18F4550.INC>   ;processor specific variable definitions
   CONFIG FOSC = XTPLL_XT, PLLDIV = 1,CPUDIV = OSC1_PLL2,USBDIV = 2,PWRT = ON,BOR = SOFT, VREGEN = OFF
   CONFIG   WDT = OFF ,WDTPS = 1,MCLRE = ON,PBADEN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF

   peso          equ      0x06


   ORG    0
   goto   Inicio         ; Programa principal

Inicio:   

   CLRF      TBLPTRU
   BCF       RCON,7
   CLRF      FSR0H
   CLRF      FSR0
   MOVF      ADCON1,W
   ANDLW     0XC0
   IORLW     0X0F
   MOVWF     ADCON1
   MOVLW     0X07
   MOVWF     CMCON
   MOVLW     0XFF
   MOVWF     TRISA   
   movlw   0b10001111;
   movwf   0xfc0;
   MOVLW     0X03
   movwf   0xfc2;
   movlw   0b00001110;
   MOVLW     0X0E
   movwf   0xfc1;

continua:

   call   Retardo_50micros
   BSF       0XFC2,1
repite:
   BTFSC     0XFC2,1
   BRA       repite
   MOVFF     0XFC4,0X06
   movff   0xfc3,0x06

   CLRF      0XF93
   MOVFF     06,0XF8A
   movlw   0b00000011;
   movwf   0xfc2;

   goto   continua

   INCLUDE   <RETARDOS.INC>

END



Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Ayuda conversor A/D
« Respuesta #39 en: 02 de Diciembre de 2007, 13:43:53 »
Alguien lo ha probado?Me gustaria que me dierais una respuesta por favor, gracias :-)

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Ayuda conversor A/D
« Respuesta #40 en: 12 de Diciembre de 2007, 17:29:40 »
Perdon por ser tan pesado, pero vuelvo a repetir lo de arriba, alguien ha podido probarlo? le pasa lo mismo que a mi? en que puedo estar equivocado? Agradeceria mucho una respuesta ya que como todos sabeis cuando uno cree q un programa esta bien le cuesta mucho ver el defecto. Espero ansioso vuestras respuestas. Gracias

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Ayuda conversor A/D
« Respuesta #41 en: 13 de Diciembre de 2007, 12:28:42 »
Hola huntergti. No te había respondido por motivo de otras ocupaciones, pruebo el código que dejaste y te aviso.

PD: he notado que falta la rutina de RETARDOS.INC aunque no seria inconveniente ya que usas 50 uS de retardo.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek


 

anything