Gast
#608747
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´ //********************************************************************** ***************