pic16f876a AD konverterenek problemaja
Moczik Gabor
progzmaster at freemail.hu
Tue Jun 15 12:09:33 CEST 2004
Janos Zako wrote:
> nem várod meg, míg feltöltödik vagy kisütodik a belso kondi.
> ott az adatlapban a képlet, hogy mekkora órajelnél, belso ellenállásnál
> mennyit kell várni
Annyit hagy tegyek hozza, hogy nekem igen gyors ciklikus a/d konverzio
kellett 4 csatornan. Az elmeleti sebesseget ugy lehet a legjobban
megkozeliteni, hogy megszakitast hasznalsz, es a keplet alapjan kiszamolod,
hogy a te esetedben mennyi az acuisition time. Ha a meghajto ellenallassal
nem mesz el 10k-ig, hanem pl. OPA-val hajtod a maga par ohm kimeneti
ellenallasaval, a homerseklet tartomanyt nem akarod 40 fokig, etc...
En igy 10..12us-ig le tudtam menni.
Szoftver oldalrol nekem az valt be, hogy a TMR0-t dedikaltam az a/d idoziteshez.
C-ben en igy csinaltam:
Az ad_state egy byte valtozo, az AD_xxx status konstansok, az
AD_ACQ_PRELOAD meg egy szam, amit a TMR0-ba kell tolteni, hogy annyit
kesleltessen amennyi acquisition time-ot akarsz.
void interrupt isr()
{
if (T0IF && T0IE) {
T0IF=0;
// (re)start A/D conversion, after aquisition time elapsed
if (ad_state==AD_ACQUISITION) {
ad_state=AD_CONVERTING;
ADGO=1;
// disable TMR0 interrupt. Re-enabled only if A/D conv is
// completed.
T0IE=0;
}
}
// 'A/D conversion completed' IRQ
if (ADIF) {
ADIF=0;
// ADRESH=8bit sampled data
// which channel is completed?
switch (ADCON0) {
...
}
// start acquisition delay
ad_state=AD_ACQUISITION;
TMR0=AD_ACQ_PRELOAD;
T0IF=0;
T0IE=1;
}
}
--
((( Móczik Gábor )))--((( hu <- DOT <- freemail <- AT <- progzmaster )))
((( ICQ=171823363 )))--((( Autos levlista: progzmaster.homelinux.org )))
More information about the Elektro
mailing list