Zdravím, mám problém s aplikací ADC. výsledek zaslaný na LED je zašuměný, Projevuje se to tak, že i LED které by svítit neměly svítí(je na nich cca 0,5-1V). Odrušovací kondíky (10uF a 100n) mám napájeny přímo na piny čipu(blíž už to fakt nešlo ) a na analogový vstup je připojen filtr 24uF. ADC je nastaven pro referenci z Aref kde je napojeno 5V z napájení pro čip. Samotný čip je vsazen do patice(nevím zda by nedokonalé kontakty mezi čipem a paticí mohly způsobit problém) a mám nastavenou předděličku 8x(u vyšších nastavení ADC nereaguje na změnu napětí). ADC běží ve volnoběžném režimu a čtení výsledku je zajištěno v rámci přerušení. Další problém je že ikdyž mám pevně nastaven vstup na pinu 0(tedy vlastně nijak nastaven
) tak když připojím vstupní napětí na jiný pin ADC “cosi vyplivne”. už nad tím pár dní sedím a vůbec s tím nemůžu hnout. Díky za každou radu
To je hodně podezřelé.
Ale bez schematu a kódu ti sotva někdo poradí.
Pravda, moje chyba. Ještě jedna co musím napravit, používám obvod ATmega16-16PU
Omlouvám se za nepřehledné a odbyté schéma.
ADC.c (368 Bytes)
kondenzátor 100n na AREF a GND
AVCC na +5V
edit: jaký smysl má to resetovací tlačítko, které by resetovat ani nemělo (ale bude kvůli zákmitům na tlačítku)
a k tomu programu… koukni na docs.google.com/viewer?url=http … lcd-test.c a čtení z ADC
administrator: přiloženy externí soubory
lcd-test.c (1.25 KB)
Ježiš marja špatné tlačítko už to vidím. Bylo to hold spíchlé bez přemýšlení v reálu je to realizované žabkou né pepínačem díky připomenutí… rady vyzkouším.
O něco málo lépe lepší, ale ne o dost.
Rozchozeno… na ledky sem posílal v rámci přerušení i obsah registru ADCSRA v rámci ladění a zapomněl sem to smazat… nicméně to samotné nepomohlo musel jsem ještě snížit děličku na 4x a teď už to šlape jak má
Datašít předepisuje pro adc frekvenci v rozsahu 50-200 kHz.
Ty máš 16/4 tj. 4 MHz. Převod asi moc přesný nebude.
Na AREF nepřipojuj žádné napětí, nastav referenci AVCC v kódu.
Podívej se na zapojení, kondy 100k jsou tam nutné.
Také obě země musí být propojené.
Vyjdi z klasického kódu s jednorázovým převodem.
[code]// při zvyšování napětí na ADC0 od 0 do 5V
// se postupně zapínají ledky na PD0 až PD7
//--------------------------------
void adc_init(void)
{
// ADC enable, prescaler = 128
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
// reference voltage = AVCC
// input = ADC0
ADMUX = (1<<REFS0 | 0);
}
//--------------------------------
uint16_t adc_value;
//===================================================
int main(void)
{
adc_init();
DDRD = 0xff;
while(1)
{
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC)); //čekej na konec převodu
adc_value = ADC;
PORTD = (1<<(adc_value / 128));
_delay_ms(250);
}
}[/code]
No chodí to ale na vyšší předěličky než 4x to opět nereaguje. Nevím zda to nesouvisí s tím, že čtu hodnoty v rámci přerušení. Zkusím klasickou metodu s čekací smyčkou a uvidím
myslim, ze doporuceno mezi AREF a GND 470n. jo a na 16MHz bych dal spis 33p jako blokovani.
ohledne jednorazoveho prevodu musis pocitat s tim, ze inicializace trva (alespon u mega32) cca 13ms jestli si dobre vzpominam. pokud chces rychlejsi prevod, tak musis pouzit cyklicke vycitani, ale tam se obcas setkas s tim ze vycteny bude predchozi vysledek.
Zatím jedu na volnoběhu. Ani nevím jak bych signle spouštěl při změně potenciometru jedině ve smičce s delay.
Zdravím, vlastním knihu Práce s mikrokontroléry Atmel AVR, ATmega16 od Davida Matouška, ze které jsem čerpal když jse dělal své první pokusy s AD převodníkem. V publikaci je schéma zapojení vývojové desky s procesorem ATmega16, ze které jsem přejal zapojení a hodnoty součástek související s AD převodníkem.
Na napájení převodníku je připojen LC filtr L1,C2,C4 hodnoty převzaty z publikace, a na vtupu Aref kond C3 1n, na který zvlášť upozorňuji neboť toto je maximální povolená hodnota jinak prý hrozí že se vevnitř něco rozkmitá. Tento kondenzátor tam musí být připojen i tehdy pokud je zvolena jako reference napájecí napětí, nebo vnitřní reference 2,56V.
Tohle zapojení používám již ve třech aplikacích kde je třeba měřit napětí a nemám problém. Dále by bylo ještě dobré aby se analogová a digitální zem spojovaly v jednom bodě.
Asi jsi tomu špatně rozuměl. V té knize je k AREF připojená externí reference s TL431.
To varování se týká právě tohoto obvodu.
Pokud použijeme referenci vnitřní nebo AVCC, tak se běžně používá 100nF na AREF.
Omlouvám se, dodeď jsem byl přesvědčený že větu ve které se píše o max. kapacitě jsem četl v kapitole o A/D převodníku a ne v kapitole popisující SDKATM16. Je to přesně tak jak to píšeš.
Zas je člověk o něco moudřejší
administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.
alien: dík moc za typ