dsPIC ADC heeeelp please

Šerých Jakub Serych@panska.cz
Sobota Prosinec 1 22:56:42 CET 2007


Dobry den,
muzete mi prosim nekdo pomoci s AD prevodnikem u dsPICu 30F3012? Cele
odpoledne si nad tim rvu vlasy a porad to nemuzu rozchodit.
Budto tam mam nejakou ptakovinu, kterou proste nevidim, nebo je ten brouk
vadny (ale v MPLABovem simulatoru to taky dela nejake psi kusy, tak nevim).
Nize prikladam kus kodu (omlouvam se za ceske komentare). Problem je, ze to
zustane v te smycce while(!ADCON1bits.DONE), jako by prevodnik stale nebyl s
prevodem hotov. Perioda instrukci Tcy je cca 66 ns, takze Tad, ktere ma byt
minimalne 333 ns bohate vyhovuje. 
Koukal jsem i na errata a nic podezreleho tam nenachazim.
Da se nejak odhalit, zda urcita serie svabu nemela treba nejakou vyrobni vadu
(ten PIC je z free samplu od Microchipu)? 

Diky za pripadnou pomoc

Jakub Serych
 

// A/D převodník

ADPCFG = 0x00F7; // port RB3 = analog, ostatní digitální
ADCHS = 0x0003; //  RB3/AN3 je použit jako jediný vstup
ADCON1 = 0x00E0; // automatický převod 31 Tad po samplovani
ADCSSL = 0; // žádné scanování vstupů
ADCON2 = 0; // MUXA, 16bit, 1/interupt, nescanuje, Vref
ADCON3 = 0x1F13; // sampling 31 Tad, Tad = 10 * Tcy 

ADCON1bits.ADON = 1; // zapnuti ADC 

//Potřebné nastavení je provedeno, můžeme jít na hlavní smyčku programu

	while(1) 					//Nekonečný cyklus
	{
		while(!IFS0bits.T1IF); //Čekáme na periodu časovače (cca 100
ms)
		IFS0bits.T1IF = 0; 		//Vymažeme příznak časovače 
		ADCON1bits.SAMP = 1; // samplovat a pak automaticky převést
		LATBbits.LATB6 ^= 1; //Změna stavu LED1 při každém převodu
		LATBbits.LATB7 = 1;  // Rozsvícení LED2
		while(!ADCON1bits.DONE) // Převedeno - jenže právě tady to
zůstane stát
		{
		}
		LATBbits.LATB7 = 0; // Zhasnutí LED2 - svítí a svítí a svítí,
takže sem se to neproklube
		U1TXREG =ADCBUF0; //odeslání 1 Bytu převodu UARTem
	}

} //Konec main()



Další informace o konferenci Hw-list