mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Wandler PIC16F877A


Autor: pic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
void main (void)
{
  unsigned long int ADC_VALUE;

  TRISC = 0b00000000;
  TRISA = 0b11111111;
  ADCON1  = 0b10001110;
  ADCON0  = 0b11000001;
  
  while (1)
  {    

    ADIE  = 0;                          
    ADIF  = 0;                          
    ADRESL  =  0;             
    ADRESH  =  0;              

     GO = 1;
                                     
     while(!ADIF) continue;               

    ADC_VALUE  = ADRESL;            
    ADC_VALUE  += (ADRESH << 8);          

    if (ADC_VALUE > 500)
    {
      
      PORTC |= 0b00010000;
      PORTC &= 0b11110111;
    }
    else
    {
      PORTC |= 0b00001000;
      PORTC &= 0b11101111;
    }
  }

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

Autor: Anubis1974 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

    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.

Autor: pic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja stimmt müsste auch reichen.

Aber wird nicht trotzdem der Interrupt auch gesetzt nach
der Wandlung ?!!?

mfg

Autor: pic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs jetzt probiert.

Funktioniert immer noch nicht!
Muss ich am OSC-Pin auch etwas anschließen?

mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.