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