Forum: Mikrocontroller und Digitale Elektronik A/D Wandler stoppen und register auslesen


von K. H. Z. (zeidler)


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;
   }
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.