Autor Tema: DSPIC33FJ128GP802 ADC y DAC  (Leído 4813 veces)

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

Desconectado gfa

  • PIC10
  • *
  • Mensajes: 8
DSPIC33FJ128GP802 ADC y DAC
« en: 10 de Octubre de 2015, 09:31:30 »
Hola buen día a todos, soy un nuevo usuario de este foro. Muchas veces vi que tienen soluciones muy buenas. Los felicito a los creadores del mismo y a todas las personas que comparten su conocimiento.
En fin, la duda que tengo es la siguiente, tengo un dspic (el de la descripción) y quisiera hacer andar el dac (Conversor Digital Analógico). La idea es lo que tome la entrada analógica (AN0) lo mande por el dac (derecho).
El lenguaje que estoy usando es el CCS. El programa compila, pero cuando voy a medir en el dspic, la salida del dac me da una continua de 1.77v. No se que estaría haciendo mal en el programa. Les adjunto el programa:

#include <33FJ128GP802.h>
#device ADC = 12
#use delay (CLOCK=20000000) //cristal es 20MHz

#FUSES NOWRTB,NOBSS,NORBS,NOWRTSS,NOSSS,NORSS
#FUSES NOWRT,NOPROTECT,NOIESO,NOPR,NOOSCIO
#FUSES NOIOL1WAY,NOCKSFSM,NOWINDIS,NOWDT
#FUSES NOPUT,NOALTI2C1,NOJTAG,NODEBUG

void main()
{
   float entrada;
   setup_adc_ports(sAN0);//Pin 2
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_dac(DAC_RIGHT_ON);

   while(TRUE)
   {
      set_adc_channel(0);//cambia el canal
      delay_us(10);//tiempo para q el canal se cambie
      entrada=read_adc();//lectura del adc
      dac_write(DAC_RIGHT,entrada);//escritura del dac
   
   }
}

Si alguien me puede ayudar, estaria muy agradecido. Muchas gracias por visitar este tema y gracias por su tiempo en ponerse a leer.

« Última modificación: 10 de Octubre de 2015, 11:48:59 por gfa »
GFA_Producciones
Muchas gracias por su colaboración

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #1 en: 10 de Octubre de 2015, 09:59:26 »
hola gfa.

lo primero, cual es la tensión que deberia darte? que le estas metiendo al adc? una continua o la vas variando y siempre te sale el mismo valor de 1.77 V

por otra parte yo no uso CCS, pero yo configuraría los pines como entradas y salidas, antes que los adc.

no tienes configurados los pines de ninguna manera.

no se si por ejemplo la funcion "setup_adc_ports" lo hace por ti, pero revisalo en el manual de CCS por si acaso.

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado gfa

  • PIC10
  • *
  • Mensajes: 8
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #2 en: 10 de Octubre de 2015, 11:46:35 »
Hola  juaperser1, muchas gracias por contestar. Para cualquier valor siempre me da el mismo problema, osea le ponga una señal o no, siempre me da el valor de 1.77v. Probé con los set_tris_b para configurar la salida del dac, todo el puerto B como salida, pero no he tenido solución. Para mi el problema es la escritura, escribe mal los valores. Probe directamente dándole un valor sin leer el ADC y tampoco pude. Ademas no uso la DMA del dspic.
No se usar c30, para hacer lo mismo. Espero poder aprender!!!  :shock: :o
GFA_Producciones
Muchas gracias por su colaboración

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #3 en: 10 de Octubre de 2015, 12:33:13 »
Bueno, vamos a olvidarnos del adc de momento, y centrarnos en el dac que es lo que parece no funcionar:

Código: [Seleccionar]
void main(void)
{
int8 i;

//encendemos el DAC como salida y ponemos los limites la alimentacion del micro:
setup_dac(DAC_OUTPUT | DAC_VSS_VDD);


//esto te debería crear una "escalera" si lo pones en el osciloscopio podras verlo
while(1)
  {
   for(i=0; i< 32; i++)
       dac_write(i);

   delay_us(10);
  }

}


Un fallo que tienes es que no puedes pasarle un floar al dac

o sea esto no puedes hacerlo

Código: [Seleccionar]
dac_write(DAC_RIGHT,entrada);//escritura del dac
es decir la variable entrada es un float, y si revisamos el manual de ccs tenemos que:

Syntax: dac_write (value)
Parameters: Value: 8-bit integer value to be written to the DAC module

no puedes darle un valor mayor que no sea un entero, es decir un int que en ccs es un entero de 8 bit, si no me estoy equivocando


compruebalo a ver que tal, y comentas

un saludo
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado gfa

  • PIC10
  • *
  • Mensajes: 8
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #4 en: 11 de Octubre de 2015, 14:36:13 »
Hola juaperser1, gracias por volver a contestar. Lo probe lo q me dijiste sigue con una continua de 1.77v. Ni idea q sera. Ya vere q pasa y como lo soluciono.Gracias de todas formas. Abrazos
GFA_Producciones
Muchas gracias por su colaboración

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #5 en: 11 de Octubre de 2015, 16:51:58 »
Edita registro a registro, yo no me fio nada del compilador CCS

Todo tiene sus "formas" y "secretos" para poder iniciar las cosas.

Desconectado gfa

  • PIC10
  • *
  • Mensajes: 8
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #6 en: 11 de Octubre de 2015, 19:33:01 »
Hola KILLERJC muchas gracias por contestar, no se bien q pasa con los registros, probé varias combinaciones de los valores de los registros pero no se inicializa el dac. El unico valor q "anda" es 0x00808000.
Muchas gracias por tu aporte


Lo único q puede averiguar es q no pasa de la cuarta vez q escribe al dac. Despues se tilda el dspic. Asi algo esta trabajando mal.
GFA_Producciones
Muchas gracias por su colaboración

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #7 en: 11 de Octubre de 2015, 19:49:58 »
Código: [Seleccionar]
#include <33FJ128GP802.h>

#FUSES NOWRTB,NOBSS,NORBS,NOWRTSS,NOSSS,NORSS
#FUSES NOWRT,NOPROTECT,NOIESO,NOPR,NOOSCIO
#FUSES NOIOL1WAY,NOCKSFSM,NOWINDIS,NOWDT
#FUSES NOPUT,NOALTI2C1,NOJTAG,NODEBUG

#use delay(clock=20000000)


void main()
{
   int8 i=30;
   setup_dac(DAC_OUTPUT | DAC_VSS_VDD);
   dac_write(i);
   while(1)
  {
       
  }
}

prueba este codigo variando simplemente la i a ver si varia de 1,77V, si no funciona, prueba variando los parametros de setup_dac(), metete en el .h de tu micro y mira a ver que parametros le puedes meter.

revisa los fuses de que no te hayas confundido y no este funcionando a 20MHz.

si sigue sin funcionar, empezaría a pensar en fallo de hardware

que hardware estas usando, es diseñado por ti o comprado?

un saludo.
« Última modificación: 11 de Octubre de 2015, 20:00:40 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado gfa

  • PIC10
  • *
  • Mensajes: 8
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #8 en: 11 de Octubre de 2015, 22:18:32 »
Hola juaperser1, muchas gracias por volver a contestar. Te cuento probé variando i y no logre nada. Entre en 33FJ128GP802.h para ver los parámetros, la configuración para este dspic es:

#include <33FJ128GP802.h>

#FUSES NOWRTB,NOBSS,NORBS,NOWRTSS,NOSSS,NORSS
#FUSES NOWRT,NOPROTECT,NOIESO,NOPR,NOOSCIO
#FUSES NOIOL1WAY,NOCKSFSM,NOWINDIS,NOWDT
#FUSES NOPUT,NOALTI2C1,NOJTAG,NODEBUG

#use delay(clock=20000000)

void main()
{
   int8 i=3000;
   setup_dac(DAC_RIGHT_ON);
   
   while(1)
  {
       dac_write(DAC_DEFAULT,i); 
  }
}

Con dac_write(DAC_DEFAULT,i) logre q no se tilde el dspic. También probé ambos canales derecho e izquierdo.

Ahora juaperser1 te cuento de mi hardware, solo es el protoboard con del dspic ahi nada mas. No uso ni siquiera cristal. Y me anda el lcd 2x16 y el ADC perfectamente.

GFA_Producciones
Muchas gracias por su colaboración

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #9 en: 11 de Octubre de 2015, 23:03:30 »
Lo raro es que dac_write no dice donde guardarlo. Si en el canal izquierdo o derecho. Ademas es temporizado y no funciona como los demas DAC mas pequeños de los PIC


Intenta escribir un valor en el registro:

 DAC1DFL

que es el Default, y si no le envias nada al DAC, este va a seguir con ese valor.
El problema que el DAC libera datos en intervalos, tenes una FIFO de 4 lugares y cada X tiempo cambia la salida, si no se carga la FIFO con datos termina usando el Default. si queres algo fijo al menos por ahora proba asi. Si funciona bueno ya es algo.

Desconectado gfa

  • PIC10
  • *
  • Mensajes: 8
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #10 en: 14 de Octubre de 2015, 13:31:10 »
Hola juaperser1 y KILLERJC ya solucione el problema. Al parecer el dac debe andar con cristal.

Declare el cristal en los fuses y le puse cristal al circuito y funciona!!!!

Milagroso!

Muchas gracias por ayudarme
GFA_Producciones
Muchas gracias por su colaboración

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2979
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #11 en: 14 de Octubre de 2015, 14:15:36 »
Me alegro que lo hayas solucionado, sera un periferico que tira de frecuencia externa obligatoriamente como el usb

Un saludo y enorabuena
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado renzovarela

  • PIC10
  • *
  • Mensajes: 1
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #12 en: 26 de Octubre de 2015, 00:08:20 »
Hola juaperser1 y KILLERJC ya solucione el problema. Al parecer el dac debe andar con cristal.

Declare el cristal en los fuses y le puse cristal al circuito y funciona!!!!

Milagroso!

Muchas gracias por ayudarme

Hola que tal GFA, te puedo preguntar como declaraste el crystal en los fuses?, yo tambien estoy trabajando con un dsPIC y me da la impresion que no he declarado el crystal en los fuses, dado que empece a programar de un programa base que me dieron.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #13 en: 26 de Octubre de 2015, 05:05:52 »
Tenes 2 formas,

Si usas CCS o XC8 te podes fijar dentro del .h de tu dsPIC ahi estan todos los fuses declarados, busca uno que use un cristal externo que corresponda la frecuencia que queres + PLL si queres , etc. Eso ultimo va a depender de vos

Si usas XC8 podes generar el codigo de los fuses con el mismo MPLAB

Desconectado gfa

  • PIC10
  • *
  • Mensajes: 8
Re:DSPIC33FJ128GP802 ADC y DAC
« Respuesta #14 en: 28 de Mayo de 2016, 10:39:52 »

Hola que tal GFA, te puedo preguntar como declaraste el crystal en los fuses?, yo tambien estoy trabajando con un dsPIC y me da la impresion que no he declarado el crystal en los fuses, dado que empece a programar de un programa base que me dieron.

Hola lo que hice es fijarme en la parte de la ayuda del ccs y configure con dos cristales uno principal y otro secundario. Las conexiones la vas a ver en la hoja de datos.  Pero para resumir van dos cristales en la pata 9 y 10 uno y el otro en 11 y  12. Pero eso me ando un rato. No se si lo queme al dac o no se que hice, pero ahora no funciona. Asi que bien mejore te aviso! Suerte
GFA_Producciones
Muchas gracias por su colaboración


 

anything