ATmega8 ADC problemik

Jul 05, 2009 8 Replies

ADC podaje mi zawy¿one warto¶ci pomiaru o oko³o 80 dziesiêtnie. Przy wewnêtznym REF2.56V jest to 0.2V Wygl±da mi na to jakby kilkadziesi±t kilo pull-up-a pinu sumowa³o mi siê z moim dzielnikiem.wej¶ciowym 10k do VCC, 2k do masy. I nie wiem co z tym zrobiæ. Pin ustawiony ADC0 jako INPUT DDRC0=0 PORTC0=0 bez pulla a z wyliczeñ mi wychodzi, ¿e moje 10k w zielniku ³±czy siê z 50k tymi w procku daj±c oko³o 8k wypadkowej i ADC mnie k³amie.



Czy o czym¶ zapomnia³em ?



ADC pracuje w trybie single conversion na tiku timera co 100ms


ldi r16,0b11000000 // 2.56V, ADLAR=0, INPUT=0 out ADMUX, r16 in r18,ADCL in r19,ADCH .... ...



in r19, ADCSRA // Ponowny start konwersji ori r19, (1<<ADSC) out ADCSRA, r19


Aha zapomnia³em :-) Jak mierze miernikiem na wej¶ciu ADC czyli w punkcie z dzielnika

5V--->10k/2k to mam napiêcie ju¿ przek³amane. Powinno byæ oko³o 0.83V , a dostajê 1.03V. Przetwornik tyle zlicza i miernik te¿ tyle pokazuje tak jakby dok³ada³ mi siê równolegle do 10k rezystor z pinu PC0. hmmm mo¿e czego¶ nie ustawi³em w tym ATmega8 ¿eby siê ten rezystor od³±czy³ ? Mam 3 urz±dzenia i wszystkie to samo.

W dniu 05.07.2009 03:30, Fredek pisze:

A pomierzyles te rezystory? One tez sa obarczone bledem i moze po prostu twoj dzielnik inaczej wyglada. Z drugiej strony jesli chcesz zrobic dokladne pomiary to raczej nie uda ci sie to na wewnetrznym Vref, zobacz w DS jaki on ma rozrzut.

Rezystory mierzy³em, s± idealne, a miernikiem mam tam napiêcie 1.03V, a powinno byæ mniej i tak te¿ wskazuje ADC. Jestem w zwi±zku z tym zdumiony co siê dzieje, bo z wyliczeñ wygl±da jakby poolup siê sumowa³.

To jest zdecydowanie sprawa pull upa na pinie. Trzy p³ytki identycznie ¼le pokazuj±. Teraz ustawi³em soboe PORTC0 na out i wystawi³em 0 i ADC wysy³a mi liczbê

0x002 vzyli zero jest zerem i warto¶ci± najni¿sz± w rejestrze

Wygl±da jakby nie dzia³a³o od³±czanie pullupa ????? czy co¶ ¼le robiê ?

Fredek pisze:

Masz błąd w linii 138.

PS. Wróżka jest na wakacjach, więc będziesz musiał jednak pokazać kod.

Ju¿ wiem co to powodowa³o. Nie wiem tylko czemu. Ustawia³em piny w bootloaderze po czym skaka³em pod adres pocz±tku pamiêci programu. Bootloader 2kB maksymalnie du¿y. Stosy srosy te¿ tam ustawiam i po tym skoku rjmp na pocz±tek po wykonaniu kodu z bootloadera jako¶ mi zapomina³ ustawienie pinów, jakby je resetowa³ ? Ale to na bank to, bo zadeklarowa³em je ponownie i przesz³o po 3 dniach bezsensownych zmagañ :-)

Jak napisa³em znam skutek ale nie powód :-) Mo¿e sie procek jako¶ resetuje w chwili przeskoku z chronionego bootloadera fusami do niechronionej przestrzeni pozosta³ej od 0x0 do 6kB Gdzie¶ siedzi problem. Teraz skopiowa³em pozosta³e kilkana¶cie linijek ca³ej inicjacji pinów do kodu g³ównego, na wszelki wypadek, bo nie znam powodu takiego zachowania. Reset jest ustawiony fusem na bootloader i ogólnie wszystko dzia³a³o.

Dobra wstyd siê przyznaæ :-) Ju¿ dzia³a :-) Jak wykry³em, ¿e to musi byæ rezystor podci±gaj±cy pinu to poprawi³em kod ale wgra³em soft rs-em zamiast wymieniæ bootloader hehe kilka razy wgrywa³em jak opêtany nie to co trzeba :-)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required