ImageImageImageImage
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Problema con dspic30F ADC se queda colgado

Postea todo lo relacionado con el mundo de los microcontroladores aquí

Moderator: Junta Directiva

Post Reply
User avatar
fusion
Usuario Avanzado
Usuario Avanzado
Posts: 389
Joined: Tue Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Location: Madrid
Contact:

Problema con dspic30F ADC se queda colgado

Post by fusion » Thu Apr 11, 2013 11:24 am

Este es el reloj:

Code: Select all

#ifdef DEBUGGER 
	// Configuration settings
	_FOSC(CSW_FSCM_OFF & FRC_PLL4 ); // Fosc=4x7.3728MHz, Fcy=7.3728MHz  CRISTAL INTERNO!!!
	unsigned long int Fcy=4*7372800/4;//Si pones PLL4 multiplicar por 4, si PLL8 multiplicar por 8
#else
	_FOSC(CSW_FSCM_ON &  ECIO_PLL8 ); // Fosc=8x7.3728MHz, Fcy=14.7456MHz CRISTAL EXTERNO!!!
	unsigned long int Fcy=8*7372800/4;//Si pones PLL4 multiplicar por 4, si PLL8 multiplicar por 8
#endif
Este es el setup del puerto analógico:

Code: Select all

	ADCON3bits.ADCS = 30; // ADCS = 2*Tad/Tcy - 1  Tad=1us (>668ns) Tcy=68ns -> 2*1000n/68n-1= 28.41
	ADCON2bits.VCFG = 0;//Voltage reference= AVdd y AVss 
	ADPCFG=0xFF3F;  //puerto AN6(Vbat) y AN7 analógicos, resto digitales
	ADCON1bits.ADON = 1;   // Turn ADC ON
Y he aquí la función de lectura al adc:

Code: Select all

unsigned int read_analog_channel(int channel)
{
	ADCHS = channel;          // Select the requested channel
	ADCON1bits.SAMP = 1;      // Start sampling
	__delay32(15);            // 1us delay @ 15 MIPS
	ADCON1bits.SAMP = 0;      // Start Converting
	while (!ADCON1bits.DONE); // Should take 12 * Tad = 3.2us  AQUI SE QUEDA COLGADO!!
	return ADCBUF0;
}
Pues bien, el pic se queda colgado en el while.
Si en la configuración le pongo:
ADCON3bits.ADCS = 192;
en vez de 30, entonces no se cuelga, pero me sale barba mientras el pic convierte.
ADCS = 2*Tad/Tcy - 1 en mi caso en modo debugger Fcy=7.3728MHz luego Tcy=135ns, entonces con ADCS=192 me sale Tad=13us

ADEMAS si pongo ese Tad tan alto el resultado que me dá es 0xFF después de echarlo a la derecha un par de bits:
typedef unsigned char byte;
x=(byte) (read_analog_channel(6)>>2);

User avatar
fusion
Usuario Avanzado
Usuario Avanzado
Posts: 389
Joined: Tue Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Location: Madrid
Contact:

Re: Problema con dspic30F ADC se queda colgado

Post by fusion » Thu Apr 03, 2014 12:59 pm

Me respondo a mí mismo: en la placa developer no se puede hacer correr al pic demasiado porque los cables de alimentación son demasiado largos, como mucho a 7mhz ó usar reloj interno

User avatar
fusion
Usuario Avanzado
Usuario Avanzado
Posts: 389
Joined: Tue Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Location: Madrid
Contact:

Re: Problema con dspic30F ADC se queda colgado

Post by fusion » Wed Sep 24, 2014 1:32 pm

He visto que el multiplexor es muy lento, he tenido que cambiar el control de batería baja para hacerlo externo a pinde lectura digital :(

dragonet80
Usuario Desarrollador
Usuario Desarrollador
Posts: 1323
Joined: Wed Oct 03, 2007 12:15 am
Location: Ibiza

Re: Problema con dspic30F ADC se queda colgado

Post by dragonet80 » Wed Sep 24, 2014 7:44 pm

Si te gustan los dsPIC quizá te interese probar los dsPIC33EP. Funcionan a 3,3V en vez de a 5V, però le dan unas cuantas patadas en todos los sentidos.

User avatar
fusion
Usuario Avanzado
Usuario Avanzado
Posts: 389
Joined: Tue Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Location: Madrid
Contact:

Re: Problema con dspic30F ADC se queda colgado

Post by fusion » Thu Sep 25, 2014 9:15 am

He probado uno que controla los PWM con una resolución de 1ns 8O , lo uso para controlar un piezo ultrasónico a frecuencias de megahercios

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest