dobry den ako mam nastavit registre (DDRA, PORTA, ADMUX, ADCSRA) ked chcem s PA0 co najpresnejsi prevod? budem merat odpor.
a este ako dlho to bude trvat (milisekundy)?
diki
Fórum › Mikrokontroléry
AD prevodnik
DDRA.0 chces jako vstup, na PORTB.0 nechces mit zaplej pull-up, ADMUX nastavis tak aby se to bralo z PA0, pak nastavis jeste deleni taktu aby se zlepsila presnost tj. asi /128, zapnes preruseni, nastavis jak chces mit zarovnan vysledek, nastavis free runing mod, zapnes ADC, a spustis konverzi... nic slozityho :D
vse je popsany v datasheetu tveho AVR
EDIT: jeste sem zapomel ze musis nastavit referenci - nejlepe nejakou precizni externi referenci - tj nastavit ze to ma brat z AREF.
Interni reference neni obvykle moc presna..
diki... ale to prerusenie nebude mozne pretoze mi spadne komunikacia cez usb (V-USB).
takze DDRA=0;
PORTA=0;
ked meriam odpor tak neni jedno odkial berem referenciu? nech je natie hocijake odpor sa nemeni iba prud a ten priamoumerne od odporu takze by to malo ukazovat odpor spravne stale, nie?
takze staci nastavit ADMUX a ADCSRA a uz to bude konvertovat?
diki
nuz se da udelat i bez preruseni..
presnou referenci potrebujes protoze pak nameris ze mas treba 453/1024 dilku .. ale kolik je vlastne jeden dilek?
no kdyz bys mel dost predne napajeni treba 5V tak by se to dalo vzit jako 5/1024 ...
klidne muzes dat free running mod bez preruseni a jednou za cas nacist proste ADC .. neni potreba to mit nejak presne samplovany
takze nastavil som to takto:
DDRA=0;
PORTA=0;
ADMUX=0;
ADCSRA=0xC0;
cakal som 5 milisekund
nacital som udaje:
ADCSRA==0x90
ADCL==ff;
ADCH==3;(tj 1023)
o 3 sekundy sa cely cyklus opakoval
zapojenie atmelu: na VCC som pripojil AREF a AVCC. PA0 som pripojil na VCC potom na GND ale stale som mal 1023 na vystupe (pri zapojeni na GND som cakal 0)... dokonca po odpojeni AREF od VCC mi to robilo to iste (stale som mal 1023 v ADCL a ADCH)
co som zle nastavil?
diki
To jobes :
ja s prerusenim pouzil toto nastaveni:
DDRA = 254; // jen jeden vstup - mene to pak zere pokud by se nezaply pull-upy
PORTA = 254; // log 1 na vystupy + nezapinat pullup na PA0
ADMUX = 0x40; // 01000000 REFS0:1 = 1 (reference z Vcc) ; ADLAR = 0 (lepsi pro C); ADMUX = 0
ADCSRA = 0xEE; // 11101110 ADEN=1, ADCS=, ADATE=1 (auto trigger), ADIE=1(pouzivam preruseni - pro tebe 0), ADPS = 64 (8MHz takt -> pak je trochu presnejsi vysledek)
pro tebe by melo stacit neco jako ADMUX = 0x00 (nebo pro experimenty pouzit tu interni referenci ADMUX=0xC0 )
a dale ADCSRA = 0xE6
proste aby to neustale merilo aktualni hodnotu .. ty pak jen jednou za cas nactes z ADC...
jo ten autotrigger se da jeste donastavit pomoci SFIOR ale v defaultni hodnote je to prave kontinualni mereni (free running)
btw: je to pro ATMEGA16
EDIT: jeste sem si tvuj prispevek precetl znovu a uz vim cim to je.. si nameril 1024 hned poprve protoze si mel pripojene PA0 na VCC, jenze si nedal ten autotrigger takze ta hodnota uz tam proste zustala ... kdyztak nastaveni jak sem poslal :D
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Převodník měn — založil Bzikkk
Převodník číselných soustav — založil Hitchs
Převodník z USB na RS232 — založil Hula
Jak používat A/D převodník — založil Riddick
Moderátoři diskuze