ADC problem med PIC16F88
Postat: 9 november 2010, 14:34:08
Försöker använda AN6 st13 på en 16F88 som analog ingång . Med multimeter mäter jag stabilt 1.72 V på denna pinne. Programmet nedan skriver dock ut värden mellan 0 och 170 lite slumpmässigt. Teoretiskt borde det ju bli cirka 360. Om jag kopplar 0 V till AN6 skrivs dock resultat värdet 0 ut konsekvent. AN6 är kopplad till en icke inverterande op koppling med motstånd 1k och 6.1k så ADC borde se en impedans mindre än 10k. Rutinen för att läsa ADC har använts i andra sammanhang och har då fungerat som den ska. Har gått igenom min kod och hittar ingen miss vid konfigureringen av ADCn. Så jag uppleveratt jag fastnat här.
Kod: Markera allt
#include <htc.h>
#include <stdio.h>
#include "usart.h"
#define _XTAL_FREQ 4000000L
#define TRUE 1
#define FALSE 0
__CONFIG(INTIO & WDTDIS & PWRTDIS & BORDIS & UNPROTECT & LVPDIS);
void Init_PIC()
{
OSCCON =0b01100000; //Klockfrekvens för PIC 4 MHz
ANSEL =0b01000000; //Config AN6 som analog ingång
ADCON0 =0b01110001; //FOSC/8 ADC ON CH6
ADCON1 =0b10000000; //Right adjusted result ADCS2=0
TRISB =0b10000100; //RB2 ingång för RS232 och RB7 för analog funktion för AN6
init_comms(); //Initera serial AUSART kommunikation
}
unsigned short Read_Adc(unsigned char channel)
{
ADCON0 &= 0b01000001; //clear channel bits
ADCON0 |= (channel<<3); //set channel
__delay_us(50);
GODONE=1; // initiate conversion on the selected channel
while(GODONE)continue;
return (ADRESL | (ADRESH<<8));
}
void main(void)
{
unsigned short adcraw; //Spara värde från ADC här
Init_PIC(); //Initiera PIC 16F88
printf("Hello ADC test\n\r");
do
{
__delay_ms(900);
adcraw=Read_Adc(6); //läs kanal 6 AN6
printf("Temp=%d\n\r",adcraw); //skriv erhållet värde till PC serieport
} while(TRUE);
}