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
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
So ich hoffe da weiß wer Rat. Ich weiß nämlich nicht mal obs am Code liegt oder nicht.
Lesezeichen