A/D prevodnik PIC18F4450

Zdravim vsechny,
mam takovy maly problem s A/D prevodnikem PIC18F4450. Jde o to, ze mam potenciometr zapojeny mezi zem a +5V a jeho stred je vyveden na AN0 pin. Po nakonfigurovani prislusnych portu a registru na zapnuti prave vstupu AN0 prevadi A/D prevodnik dobre, ale jen do hodnoty napeti na vstupu 2.5V. Jestli ze se napeti dale zvysuje (a tedy mel by se nastavit 10 bit do log 1, pozn. jde o 10bitovy prevodnik) se uz nic nedeje a vystup vlastne zustava v “0111111111”. Vypada to, jako by se to na polovicce napeti zastavilo a dale uz to zvysujici napeti ignorovalo. Muze mi nekdo prosim poradit?

Muj kod v Cecku:

TRISD = 0;

PORTD = 0xff;

TRISA = 0x01;

ADCON1 = 0b00001110;

ADCON0 = 0;

ADCON2 = 0b10111000;

do
{

ADCON0.ADON = 1;

ADCON0.GO_DONE = 1;

do
{
}while(ADCON0.GO_DONE!=0);

PORTD = ~ADRESL; // na portu D zobrazuju stridave dolni a horni byte

Delay_ms(1000);

PORTD = ~ADRESH;

Delay_ms(1000);

}while(1);

Jsem v tomhle zacatecnik, tak nevim, kde delam chybu. Diky za odpovedi.

v céčku se nevyznám a ještě vůbec ne v picech, ale nemáš zapnutou třebas interní referenci ?? ta právě většinou bývá na těch 2,56V zkus se podívat pořádně na nastavení toho převodníku

No s tou referenci me to taky napadlo, ale mam bity VCFG1 i VCFG0 nastavene na 0 0. Tak bych rekl, ze to je nastavene na maximalni rozsah.

bit 5 VCFG1: Voltage Reference Configuration bit (VREF- source)
1 = VREF- (AN2)
0 = VSS
bit 4 VCFG0: Voltage Reference Configuration bit (VREF+ source)
1 = VREF+ (AN3)
0 = VDD

Neviem, ci ma PIC taky mod, ale pripada mi to potom ako rozsah +/-2,5V. Hlavne ked sa to neprehuplo cez ten deviaty bit.

Taky nevim, jestli ma takovy mod PIC. V datasheetu jsem nic takoveho nenasel.

Tento PIC žádnou vnitřní referenci nemá, buď je vnitřně spojen s napájecím napětím nebo na dva piny.
Je taky možné že A/D převodník pracuje správně, a chyba bude v převodu pro výstup.

Taky si myslim, ze bude chyba asi v prevodu. Zkusim si jeste pohrat s temi udaji TAD.

Tak jsem to asi vyresil. Zkousel jsem trosku laborovat s nastavenim “Conversion Clock Select Bit” ktere jsem mel nastavene na “000” tj. na Fosc/2, jsem nastavil nove na Fosc/8 a uz to prevadi na celem rozsahu. Co ten conversion clock select bit znamena mi neni uplne jasne.

Citace z Datasheetu pro PIC16F877A, ale to bude podobné.

Jo diky, je to stejne jako u toho PIC16F877A.

nejspíš máš špatně nastavený registr ADCON2 a bit ADFM , kterým určuješ zarovnaní.
zkus použít toto
ADFM = 1; // Right justified
a prikaz
napeti = (ADRESH*256) + ADRESL; // AD prevod

No kdyz se podivas na ten kod uplne na zacatku, tak je tam ADFM = 1; tedy right justified. Jen mi nesel ten prevod tech dvou registru do cisla int. Ja na konec potreboval pouze hornich 8 bitu z 10 a tak jsem udelal ADFM = 0 tedy left justified a pak jsem to klasicky priradil do int. Diky vsem.

když už se tady bavíte o ADC pic16f877a mam dotaz na pic16f877. Můžu ADC nastavit jako referenční napětí npř ±5V i kdyz to přesahuje jeho napájecí napětí? dik (sorry že to píšu sem ale přijde mi zbytečné zakládat nové téma)

Nemůžeš, musí to být v rozmezí do napájecího napětí.

Pokud máš Fosc=48MHz, pak při časování Fosc/2 nebo Fosc/4 AD převodník už nestíhá, ve skutečnosti to vypadá tak, že některé bity se nestačí převést, to, že to byl zrovna MSB bit, byla jen náhoda, pak to vypadalo, jako by si měl nastavenou jen poloviční úroveň reference…jinak Fosc/8 není také doporučeno výrobcem (při Fosc=48MHz), ale AD převodník už stíhá, každopádně pokud nepotřebuješ vysokou rychlost, radši bych se držel doporučení výrobce a časování ještě snížil.

max VDD+0.3V