PIC16F690 špatný AD převod v Cčku: hodnota 0 při 0,8V na RA2

Ahoj, mám problém, mám napsaný program v C,který měří napětí na pinu RA2 a zobrazí hodnotu na LCD 16x2. Jakž takž funguje, ale ukazuje mi to 0V a přitom mám na pinu nějákých 0,8V a celkově to napětí neodpovídá. Na displeji mi to ukazuje i hodnotu z AD převodníku, která je 0 až 212. A na při 0 z převodníku tam je na pinu těch 0.8V
Prosím, kde mám botu, děkuji.

[code]#include <htc.h>
#include “lcd.h”
#include <stdio.h>
#define _XTAL_FREQ 8000000

void AD_init()
{
TRISC= 0b00000000;
TRISA= 0b00000100;
ANSEL= 0b00000100; // nastavení pinu RA2 jako analog (1)
ADCON0=0b00001000; // (0<<CHS0)|(1<<CHS1)|(0<<CHS2)|(0<<CHS3)|(1<<ADON);
ADCON1=0b01010000; //(1<<ADCS2)|(0<<ADCS1)|(1<<ADCS0);
}

unsigned int prevod2()
{
unsigned int hodnota;
ADON = 1; // zapnutí převodníku
GODONE = 1; //zapnutí převodu

while(GODONE);
	hodnota = ADRESH;	

return hodnota;	

}

void main(void)
{
TRISB = 0; // PORTB all outputs
TRISC = 0;

int ad_hodnota = 0;
float prevod = 0;
char text[20],text1[20];
int desitky = 0,desetiny = 0;

while(1)
{
	AD_init();
	ad_hodnota = prevod2();
	prevod = (ad_hodnota * 5.0)/212.0;

	desitky = prevod;
	desetiny = (prevod * 10) - (desitky * 10);

	sprintf(text,"Napeti %d.%dV",desitky,desetiny);
	sprintf(text1,"AD hodnota: %d",ad_hodnota);

	lcd_init();
	lcd_goto(0);
    lcd_puts(text);
	lcd_goto(64);
    lcd_puts(text1);
}

}[/code]

:arrow_right: administrator: přejmenováno z "PIC16F690 špatně funguje AD převod v Cčku"

cau .proc porad nastavujes ten ADC ? nejdriv dostan z prevodniku normalni odpovidajici hodnotu .potom to muzes prepocitavat na volty

To ti neřeknu proč :smiley: poněvač to sám nevím, hodil jsem to před while a funguje to jak hodinky.
Díky moc!!!

ono by to fungovalo ale musela by tam bejt pauza

AD_init(); delay_ms(1); ad_hodnota = prevod2();

nevym jak dlouho trva celej while ale mereni+zobrazeni staci udelat po cca 10-50ms…