Hallo, Ich möchte mit dem PIC 16F88 eine AD-Wandlung an einem Port vornehmen. Dabei soll der ermittelte Wert wenn er <= 3 ist einen Port auf high setzen und ansonsten und wenn er >= 3 ist auf low. Teile aus meinem Programm habe ich aus diesem Tutorial http://www.cc5x.de/ADC.htm übernommen. cc5x erstellt auch das HEX File aber beim Testen leuchtet die LED an PORTB.2 nicht. Ich denke daher meine ganze AD-Wandlung (bzw. das Zusammenfassen des High und Low) falsch sind. Kann mir jemand weiterhelfen? Hier der Code: #include "prozess.h" //Prozessor #include "ad.h" //PIN-Konfiguration #include "delay.c" // Speicherschutz12,13,4,5=aus,Debug11=aus,ProgrammFlash9=an,EEpromRead8=an , // NiedervoltProgr7=aus, NiederVoltReset6=an,EinschaltTimer3=an, // WachDogTimer2=aus,Oszillator0,1=XC #pragma config |= 0b.11.111101.11.00.10 //******* AD-Wandler-Fnktion *************************************************** uns16 ADC(char kanal) { uns16 Antwort; ADCON0 &= 0b.1100.0111; // 3 Bits, die KanalNummer angeben, reseten kanal= kanal << 3 ; // Kanalnummer auf richtige Position rotieren ADCON0 |= kanal; // und durch ODER-Funktion in Register übertragen Delay1ms(255); // Warten, damit interne Meßkondensator geladen wird. Delay1ms(255); GO=1; // Starten der Wandlung while(GO); // Solange warten bis Wandlung abgeschlossen ist Antwort.low8=ADRESL; // Ergebnisse in Variable speichern Antwort.high8=ADRESH; return Antwort; } //********************************************************************** *************** //******* Hauptprogramm *************************************************** void main(void) { TRISA = 0b.1111.1; // PortA alles Eingänge TRISB = 0b.0000.0000; // Port B sind alles Ausgänge uns16 a; // Variablen char n; char ade; char verg; char verg1; //++ Einstellungen des AD-Wandlers ++++++++++++++++++++++++++++ ADCON1=0; // Ganzer PortA als Analog Vdd Vss ADON=1; // ADC-Einschalten ADCS1=1 ; // Geschwingigkeit der ADC ADCS0=0 ; ADFM=1; // Rechts Ausrichtung //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ while(1) { n=1; a=ADC(n); // AD-Wandlung verg=a.high8*256; //Umrechnung des High und Low Byts verg1=verg+a.low8; ade=1024*verg1; if (ade<=3) PORTB.2=1; if (ade>=3) PORTB.2=0; } // Ende der Schleife } // Ende des Hauptprogramms´ //********************************************************************** ***************
hallo, du muss alle Pins der Port B als Digitale Ausgänge setzen, In Datenblatt gibt es das Register ANSEL. der musst du auf 0x00 setzen
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.