ATMEGA i AC

Wcześniej bawiłem się AT2313 i przesiadłem się teraz na ATMEGA8. Poznaję dopiero ten mikrokontroler i chciałbym uruchomić przetwornik A/C. Nie wiem jak to zrobić. Szukałem w internecie jakichś przykładowych programów w assemblerze, jednak nic nie znalazłem. Czy ktoś pomógłby mi uruchomić ten przetwornik? Ewentualnie prosze o odesłanie mnie do jakichś ciekawych informacji w sieci na ten temat.

Reply to
Camil
Loading thread data ...

Odezwij sie wieczorem to ci przesle pare przykladow z wlasnych programow.

Reply to
T.M.F.
Reply to
invalid unparseable

Programy sa do sciagniecia z mojej strony, ale po krotce jak to wyglada... Ponizej prosty przyklad jak wykorzystac ADC w trybie free running mode, czyli po kazdej zakonczonej konwersji automatycznie rozpoczynana jest kolejna:

  1. Inicjalizacja ADC: LDI R16,(1<<REFS1)|(1<<REFS0)|(1<<ADLAR) ; Internal voltage reference
2,56V, left adjusted OUT ADMUX,R16

Tu nastepuje wybor napiecia odniesienia oraz kanalu ADC ktory samplujemy, nastepnie pozostaje nam inicajlizacja i rozpoczecie przetwarzania jak ponizej:

;ADC enable with prescaler 64 and interrupts (free running mode) LDI R16,(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADFR) OUT ADCSRA,R16

Od tego momentu (zakladajac, ze mamy wlaczone przerwania) po kazdym ukonczonym przetwarzaniu procesor bedzie wywolywal przerwanie ADC Conversion Complete Interrupt. Wektor tego przerwania musi wskazywac na procedure odczytujaca przetwornik:

PUSH R19 IN R19,ADCL ; Read ADC Conversion result IN R19,ADCH ; Only ADCH contains interesting value POP R19 RETI

Pokazana procedura oczywiscie nic sensownego nie robi, po prostu odczytuje rejest ADC i wraca. Za to pokazuje cos co jest bardzo istotne, a na czym sam sie nacialem. ZAWSZE trzeba odczytywac rejestry ADC tak jak to pokazalem, w przeciwnym wypadku nie zostanie zainicjowane ponowne przetwarzanie (jest to zreszta opisane w pdf). Oprocz powyzszego ADC mozemy wykorzystac takze w trybie jednokrotnego przetwarzania, czyli wyzwalamy i czekamy na rezultat, jest to jednak mniej efektywne. Poniewaz przyklad pochodzi z mojego programu gdzie interesowalo mnie tylko 8 najstarszych bitow, rezultat jest wyrownany do lewej (lef adjusted) i znajduje sie tylko w ADCH (ale mimo to trzeba pamietac o odczytaniu ADCL z powodow j.w.). W razie watpliwosci chetnie w miare mozliwosci i umiejetnosci wyjasnie to i owo:)

Reply to
T.M.F.

Dzieki wielkie wkrótce zabiore się za pierwsze testy :). Poszperałem jeszcze w sieci i znalazłem pare informacji tyle, że po angielsku. Podam ciekawy link może się jescze komuś przydać:

formatting link
raz dziękuję za pomoc i w razie dalszych problemów będę pisał.

Reply to
Camil

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.