Hallo Leute!
Meine Frage bezieht sich auf den A/D-Converter. Ich würde gerne eine Analoge Spannung digitalisieren. Und da hab ich zu Übungszwecken ganz einfach nen Spannungsteiler aufgebaut. Der geht von 0,5V - 5V. Na und dann hab ich den Code (in C) geschrieben. Hab auf die Parameter geachtet und na ja, das ganze läuft einmal. Aber blöderweise funktioniert VREF- nicht. Also ich kann schon den Analogwert digitalisieren, aber halt nicht von 0-1023. Da müsst ich halt VREF- auf ca. 0,5V legen. Das tu ich auch. Nehm nen Spannungsteiler mit etwas weniger als 0,5V (man ist ja vorsichtig) und häng ihn an den VREG- PIN. Nur Blöderweise ist die Spannung wenn ich am Pin messe 0V. Wenn ich den Draht wieder wegnehme, hab ich an meinem Spannungsteiler wieder meine ca. 0,5V. Jetzt frag ich mich halt, wieso am PIN 0V anliegen, obwohl ich eh 0,5V anlege. Ich versteh das nämlich nicht ganz.
Also ich schicke noch den Programmcode mit
So ich hoffe da weiß wer Rat. Ich weiß nämlich nicht mal obs am Code liegt oder nicht.Code:/** I N C L U D E S **********************************************************/ #include <p18cxxx.h> #include <adc.h> #include <pwm.h> #include <timers.h> #include <stdlib.h> #include "delays.h" // für die Warteschleife /** Configuration ********************************************************/ #pragma config FOSC = INTOSC_XT //Ich verwende interne Clock (HS für 20MHz, allerdings sind 22pF Kondis nötig) #pragma config PWRT = ON #pragma config BOR = OFF #pragma config WDT = OFF //Watchdog Timer #pragma config LVP = OFF //Low Voltage ICSP //#pragma config PBADEN = OFF /** D E C L A R A T I O N S **************************************************/ #pragma code void main(void) { int result; unsigned int pwmwert=0; LATB = 0; // Port B wird 0 gesetzt TRISB = 0; //Port B wird als Ausgang gesetzt PORTC = 0; //PORT C wird 0 gesetzt TRISC = 0; //PORT C wird als Ausgang gesetzt TRISA = 1; //PORT A wird als Eingang gesetzt OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1); OpenPWM1(255); while(1) { OpenADC(ADC_FOSC_RC & ADC_RIGHT_JUST, ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_EXT, 15); Delay10TCYx(5); ConvertADC(); while( BusyADC() ); result = ReadADC(); CloseADC(); pwmwert=result; SetDCPWM1(pwmwert); SetOutputPWM1(SINGLE_OUT,PWM_MODE_1); }//end while ClosePWM1(); CloseTimer2(); }//end main







Zitieren

Lesezeichen