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
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.
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.
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)
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.