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