Gast
#485530
Hallo, ich habe ein Problem mit der Berechnung der Werte des A/D-Wandlers. Momentan bin ich dabei ein Beispielprogramm in MPLAB mit dem C30 Compiler zu schreiben. Dabei verwende ich MPLAB Sim als Simulator. Nun mein Problem. Ich lese am ADCBUF0 einen Wert über den Stimulus ein. Dieser Wert wird mir auch im entsprechenden Register im Watch Window angezeigt. Diesen Wert möchte ich dann weiterverarbeiten und über den UART ausgeben. Leider habe ich inzwischen keine Idee mehr, wie ich den eingelesenen Wert berechne, so dass ich später im SIM UART1 den richtigen Wert angezeigt bekomme. Bsp.: Ich lese über die Datei ADC.txt im ADCBUF0 eine 5 (dezimal) ein. Dann zeigt mir das Watch Windoe für den ADCBUF0 als HEX 0x0005 und DEC 5 an. Wenn ich diesen Wert in das U1TXREG schiebe gibt mir das UART Sim richtigerweise den entsprechenden ASCII Wert für 05 aus. Wie führe ich jetzt die Berechnung durch, dass ich in das U1TXREG entsprechend meinen 5V Spannung, die ich ausgegeben habe eine 0x0035 schiebe und damit im UART Sim eine 5 angezeigt bekomme? Das simpelste ist natürlich, dass ich dem Wert 0x0005 mit 0x0030 addiere nur kann ich mir nicht vorstellen, dass das funktioniert, wenn ich später mit einem dsPIC 30F4012 eine Spannung messen möchte. Vor allem 5V ist momentan das Bsp. Wie mache ich das bspw. für 1,5V? Hat jemand noch ein Beispiel zur Verwendung der uart.h? Hier mein bisheriger Programmcode. #include <p30fxxxx.h> #include <delay.h> _FOSC(CSW_FSCM_OFF & HS); _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & PWRT_OFF); _FGS(CODE_PROT_OFF); int main (void); void lars (void); int main (void) { // Setze alle Ports als Ausgang TRISB = 0; TRISC = 0; TRISD = 0; TRISE = 0; TRISF = 0; TRISBbits.TRISB2 = 1; ADPCFG = 0xFFFF; ADPCFGbits.PCFG2 = 0; ADCON2bits.VCFG = 3; ADCON3bits.ADRC = 1; ADCON3bits.ADCS = 0; ADCON2bits.CHPS = 0; ADCON1bits.SIMSAM = 0; ADCSSL = 0x0000; ADCHS = 0x0002; ADCON1bits.SSRC = 7; ADCON3bits.SAMC = 1; ADCON1bits.FORM = 0; ADCON2bits.SMPI = 0; ADCON1bits.ADON = 1; U1BRG = 0x0081; U1MODEbits.PDSEL = 0; U1MODEbits.STSEL = 1; while(1) { //lars(); int ADC; ADCON1bits.SAMP = 1; Delay_1S_Cnt; ADCON1bits.SAMP = 0; while(!ADCON1bits.DONE); ADC = ADCBUF0; U1MODEbits.UARTEN = 1; U1STAbits.UTXEN = 1; U1TXREG = ADC; U1MODEbits.UARTEN = 0; } return 0; } Danke für die hoffentlich zahlreiche Hilfe. Gruß Lars