A/D-Wandlung für PIC16F877A
Dienstag, 22. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  PIC Mikrocontroller Allgemein  |  AD-Wandler (Allgemein)  |  A/D-Wandlung für PIC16F877A « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: A/D-Wandlung für PIC16F877A  (Gelesen 2622 mal)
 
pavpav
Gast
« am: Januar 21, 2009, 00:28:38 »

Hallo,

Ich bin relativ neu hier und will eine AD-Wandlung mit PIC16F877A in C durchführen.
Zuerst habe ich RA0 (ADC-Eingang) ansprächen:

        PORTB &= 0xFB;     //Alle Pin's von PortB außer RB3 auf 1 (?)
   TRISB &= 0xFB;     //Alle Pin#s von PortB außer RB3 sind Eingänge (?)
   TRISA &= 0x01;     //RA0 ist Eingang (Ist es also ein ADC-Eingang ?!?!)
   while(1){
     if(RA0 == 1)  //Wenn an RA1 Spannung liegt...
      RB2 = 1; //dann, LED soll Leuchten(naturlich ein LED an RB2 angeschlossen Smiley)
   softdelay(100);  // Zeitverzögerung, hab angenomen, dass immer nach 100ms überpruft wird,
                         // ob Spannung an RA0 liegt, wenn NICHT RB2=0, wenn JA RB2=1 (??!!)
   }

Am Anfang leuchtet LED nicht. Ich schliesse VDD Pin von microC dem RA0, (Darf man eigentlich?) und erwarte, dass LED abgeschaltet wird, was aber nicht passiert!

Bitte um HILFE:
      _Was mach i falsch?
      _Was sind die nächste AD-Wandlungsschritte?

Ich bedanke mich im Voraus.
lg
Anfänger0
« Letzte Änderung: Januar 26, 2009, 12:06:22 von Anfänger0 » Gespeichert
wberger
Full Member
***
Offline Offline

Beiträge: 204


Profil anzeigen
« Antworten #1 am: Januar 21, 2009, 19:23:26 »

Es macht keinen Sinn, die Posts zweimal hier reinzustellen. Dadurch wirst du nicht mehr Antworten bekommen. Hier der andere Post:
http://www.fernando-heitor.de/component/option,com_smf/Itemid,121/topic,3894.0/
Gespeichert
wberger
Full Member
***
Offline Offline

Beiträge: 204


Profil anzeigen
« Antworten #2 am: Januar 26, 2009, 18:53:29 »

Es ist nicht wirklich sinnvoll den Beitrag im Inhalt komplett abzuändern. Dadurch erscheint er nicht als neu und niemand schaut ihn sich an. Bei Doppelposts löschen. Bei neuem Thema neuen Beitrag aufmachen. Editieren nur zur Fehlerkorrektur oder unter deutlichem Hinweis auf Edit.
Gespeichert
pavpav
Gast
« Antworten #3 am: Januar 26, 2009, 23:12:32 »

Eigentlich wollte ich sie löschen, könnte aber nicht, so habe i ganze nützlicher machen wollen.
 
Gespeichert
wberger
Full Member
***
Offline Offline

Beiträge: 204


Profil anzeigen
« Antworten #4 am: Januar 26, 2009, 23:13:03 »

Du benutzt die falsche logische Verknüpfung. Ein logisches UND ( &= ) resultiert nur in einer 1, wenn BEIDE Operanden 1 sind.
PortB &= 0xFB lässt alle Bits am PortB wie sie sind und ändert nur RB2 auf 0 (nicht RB3 wie im Kommentar).

Was willst du machen?
Alle Bits außer RB2 auf 1. RB2 belassen, wie er ist:   PORTB |= 0xFB    (logisch oder)
Alle Bits außer RB2 auf 1. RB2 belassen auf 0 setzen:  PORTB  = 0xFB

Bezüglich AD Wandlung habe ich dir in deinem anderen Thread den Hinweis auf die Hi-Tech PICC samples gegeben.

Gruß
  Wolfgang

P.S. Ist Deutsch nicht deine Muttersprache? Eventuell kannst du auch auf Englisch fragen.
Gespeichert
pavpav
Gast
« Antworten #5 am: Januar 26, 2009, 23:23:36 »

Ok, es (&=) ist mein type Fehler hier, sollte so sein TRISB = 1; od TRISB |= 0xFF ; (??) !!
Ich will eingentlich nur an RB2( -> Ausgang) Spannung haben, wenn i auf einem von mir definierten Eingang Spannungs liegt :
So will ich TRISA = 1; als Eingang definieren.
dann:  if (RA0 == 1) // lege ich Spannung von Plus-pol der Platiene auf AR0
         RB2 =1; // und erwarte ich Spannung auf RB2
was aber nicht der fall ist !
GRUß
« Letzte Änderung: Januar 27, 2009, 13:39:38 von Anfänger0 » Gespeichert
wberger
Full Member
***
Offline Offline

Beiträge: 204


Profil anzeigen
« Antworten #6 am: Januar 27, 2009, 18:54:45 »

RA0 ist nach Startup ein Analogeingang. Der Vergleich ==1 funktioniert hier nicht.

Möglichkeit 1: Per ADCON1 die Kanäle auf Digital schalten
Möglichkeit 2: Tatsächlichen Analogwert einlesen.

Gruß
  Wolfgang
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.036 Sekunden mit 18 Zugriffen.
 
Top! Top!