ADC Wandler PIC16F877A

Gast #1336372
Lesenswert?

Hallo

Beschäftige mich jetz mittlerweile seit einigen Tagen
mit dem Programmieren von uC. Heute der erste Erfolg
--> Die LEDs haben geleuchtet ;-)

nun mein 2. Projekt das ich auf meinen PIC16F877A
schreiben möchte.

An einem PIN A0 soll ein analoger Wert 0-5V eingelesen werden
und je nachdem Was bei der Wandlung raus kommt soll er
einen Pin an PortC high schalten.

Dazu mein Programm das nicht funktioniert.
1
void main (void)
2
{
3
  unsigned long int ADC_VALUE;
4

5
  TRISC = 0b00000000;
6
  TRISA = 0b11111111;
7
  ADCON1  = 0b10001110;
8
  ADCON0  = 0b11000001;
9
  
10
  while (1)
11
  {    
12

13
    ADIE  = 0;                          
14
    ADIF  = 0;                          
15
    ADRESL  =  0;             
16
    ADRESH  =  0;              
17

18
     GO = 1;
19
                                     
20
     while(!ADIF) continue;               
21

22
    ADC_VALUE  = ADRESL;            
23
    ADC_VALUE  += (ADRESH << 8);          
24

25
    if (ADC_VALUE > 500)
26
    {
27
      
28
      PORTC |= 0b00010000;
29
      PORTC &= 0b11110111;
30
    }
31
    else
32
    {
33
      PORTC |= 0b00001000;
34
      PORTC &= 0b11101111;
35
    }
36
  }
37

38
  
39
}
Denke das sollte funktioneren, tuts aber nicht.

Könnte sich das vl mal kurz jmd ansehen?
Habe selbst den verdacht das es was mit der clk zu tun
haben könnte. Bitte um Ratschläge

Achja es wird kein einziger PIN von PortC gesetzt das heißt des
Problem liegt weiter vorne.

Danke.
mfg PIC-Programmer ;-)
Gast #1336380
Lesenswert?

Hallo,

dein Problem dürfte daran liegen, dass du auf das AD-Interrupt-Flag 
wartest.
1
     GO = 1;
2
                                     
3
     while(!ADIF) continue;        //warte auf Interrupt            
4

5
    ADC_VALUE  = ADRESL;

Nur hast die Interrupts nicht freigegeben.

Eigentlich müsste es reichen das GO/Done-Bit zu pollen. Solange das Null 
ist, ist die AD-Wandlung noch nicht abgeschlossen.

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