A/D Wandler stoppen und register auslesen

OP #5497973
Lesenswert?

Hallo,

Betrifft Pic 16F676

Ich will über einen Spannungsteiler am Port RC0/AN4 die Spannung eines 
AKKUS lesen und in einen Digitalen Wert zur späteren Verarbeitung aus 
dem
ADRESL *ADRESH Register auslesen.

Ich habe das Programm nur mit dem Debugger getestet und da fest gestellt 
das der A/D Wandler startet aber mit der commando zeile

while (ADCON0.GO_DONE==1);        //prüfen ob noch aktiv

nicht stoppt. Was ist falsch ??
Im Anschluss noch das Programm.

Gruß Karl-Heinz



// Define
#define LED1           PORTC.RC5    //LED low  liegt an Port RC5

// Globale Variablen

int analog_hexwert;

void main(void) {

     TRISC = 0x07;   //set C-Port 0-2 in 3-5 out
     PORTC = 0x00;   //set C-Port all bit to 0V
     ADCON0 = 0x80;  //set analog module right justified
     ADCON1 = 0x20;  //set clock select Fosc32
     ANSEL = 0x70;   //select ANS 4 to analog input

while(1)
      {
       ADCON0.ADON = 1;
       ADCON0.CHS2 = 1;
       ADCON0.GO_DONE = 1;          //messen ein
       while (ADCON0.GO_DONE==1);        //prüfen ob noch aktiv
       Delay_ms (550);
       analog_hexwert = ADRESL + (ADRESH * 256);
      }

if (analog_hexwert < 500)
   {
    LED1 =1;
   }
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren