Hejsa,
I forbindelse med et projekt arbejder jeg med en PIC 18F452, og skal lave noget A/D konvertering. Jeg har slet ikke noget erfaring med sådan en konvertering. Jeg har lavet en test opstilling, hvor jeg sender DC spænding til AN0 mellem 0-5 V. Men jeg får noget upræcise resultater. Selvom de målte og de aflæste digitale værdier passer ikke helt sammen får jeg nogenlunde fornuftige resultater spændinge under 1,25 V. Jeg programmererer i C (Hi-tech C); et udsnit af mit test program:
#include #include
void putch(unsigned char byte); void puttekst(const char *tekst); void init(void);
void putch(unsigned char byte) { while(!TXIF); /* set when register is empty */ TXREG = byte; /* output one byte */ TXIF=0; }
/* Output a string via the serial port */ void puttekst(const char *tekst) { while(tekst && *tekst) putch(*tekst++); }
void init(void) { TRISC=0x80; // RC7/TX indgang, resten er udgang TXEN=1; // enable serial port transmissions SPEN=1; //Serial Port Enable bit, serial kommunikation er aktiveret TXIE=0; // not interrupt driven
TRISA=0x2F; // RA0 input, resten output TRISE=0x07;
ADCON0=0b00000001; // ADON =1, kanal 0 ADIE=0; /* not interrupt driven */
ADCON1=0b10000000; // Højre justeret, 6 mest betydende bits in ADRESH er nul, delay(); // vent 12.86 us acqusition time. }
void main(void) { unsigned int resultat; unsigned int adc_h; unsigned int adc_l; unsigned char volts; unsigned char decivolts; unsigned char msg[50];
init();
do { GODONE=1; //konvertering start while(GODONE)continue; //vent indtil konverteringen er færdig ADIF=0; // interrupt flag nulstilles
adc_h = ADRESH; adc_l = ADRESL;
resultat = (adc_h