Dlaczego wartości Pv i Vv są identyczne przy odczycie z ADC w AVR?

ADC w AVR - problem





Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: ADC w AVR - problem
Date: Fri, 26 May 2006 15:44:18 +0200


Dlaczego przy odczycie danych z ADC, zawsze w zmiennej Pv, mam tę samą
wartość co w Vv? Przecież zgodnie z notą katalogową przełączam wejście w
czasie, gdy bit ADEN jest wyzerowany. Odczytywanie pojedynczo pinów
mikrokontrolera przebiega prawidłowo, a odczyt dwóch za jednym razem jest
ok.

volatile unsigned char temp; // niepotrzebne dane
// >>>>>>>>>>> odczyt regulacji mocy >>>>>>>>>>>>>>>>

ADCSRA &= ~(1 << ADEN); // wyłączenie bitu enable
ADMUX &= ~(1 << MUX3) | ~(1 << MUX2) | ~(1 << MUX1)
| ~(1 << MUX0); // ustawianie wejścia, ADC0
ADCSRA |= (1 << ADEN); // włączenie bitu enable

ADCSRA |= (1 << ADSC); // początek konwersji
while ( ADCSRA & (1 << ADSC) ); // czeka na koniec konwersji
temp = ADCL;
Pv = ADCH; // odczyt regulatora mocy

// >>>>>>>>>>> odczyt napięcia akumulatora >>>>>>>>>>>>>>>>
ADCSRA &= ~(1 << ADEN); // wyłączenie bitu enable
ADMUX &= ~(1 << MUX3) | ~(1 << MUX2) | ~(1 << MUX1)
| ~(1 << MUX0); // ustawianie wejścia
ADMUX |= (1 << MUX0); // ustawia ADC1
ADCSRA |= (1 << ADEN); // włączenie bitu enable

ADCSRA |= (1 << ADSC); // początek konwersji
while ( ADCSRA & (1 << ADSC) ); // czeka na koniec konwersji
temp = ADCL;
Vv = ADCH; // odczyt napięcia akumulatora

Pzdr.
Krzysztof.



Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: Re: ADC w AVR - problem
Date: Fri, 26 May 2006 15:55:05 +0200


Odczytywanie pojedynczo pinów mikrokontrolera przebiega
prawidłowo, a odczyt dwóch za jednym razem jest ok.

Coś za szybko piszę.
Odczyt pojedyczno przebiega prawidłowo, natomiast odczyt
dwóch pinów za jednym razem (w jednej funkcji) jakby zamazuje
pierwszą odczytaną danę...

Pzdr.
Krzysztof.





Poprzedni Następny
Wiadomość
Spis treści
From: czerstwy <czebaka_at_nospam_o2.pl>
Subject: Re: ADC w AVR - problem
Date: Fri, 26 May 2006 22:49:55 +0200


Krzysztof napisał/a:
ADMUX &= ~(1 << MUX3) | ~(1 << MUX2) | ~(1 << MUX1)
| ~(1 << MUX0); // ustawianie wejścia, ADC0


jak dla mnie w obydwu wypadkach odczyt jest dokonywany z
GND w przypadku ATMEGA8

tu powinny być raczej

ADMUX &= ~(1 << MUX3) & ~(1 << MUX2) & ~(1 << MUX1)
& ~(1 << MUX0); // ustawianie wejścia, ADC0

lub

ADMUX &= ~((1 << MUX3) | (1 << MUX2) | (1 << MUX1)
| (1 << MUX0)); // ustawianie wejścia, ADC0

a ogólnie to wydaje mi sie ze lepiej zdefiniować sobie
#define MY_ADCMASK 0xf0
#define MY_ADC0 0x00
#define MY_ADC1 0x01

i uzywac

ADMUX = (ADMUX & MY_ADCMASK) | MY_ADC0;

ADMUX = (ADMUX & MY_ADCMASK) | MY_ADC1;

ewentualnie rozpisac w definach wszystkie bity i skladac za kazdym razem
potrzebna wartosc

pozdrawiam
czerstwy

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: Re: ADC w AVR - problem
Date: Fri, 26 May 2006 23:14:11 +0200


jak dla mnie w obydwu wypadkach odczyt jest dokonywany z
GND w przypadku ATMEGA8

tu powinny być raczej
(...)
ADMUX &= ~((1 << MUX3) | (1 << MUX2) | (1 << MUX1)
| (1 << MUX0)); // ustawianie wejścia, ADC0

Many thanks for your excellent job !!!
Za pierwszym razem poszło :-))

Nie mam pojęcia dlaczego mój zapis
ADMUX &= ~(1 << MUX3) | ~(1 << MUX2) | ~(1 << MUX1) | ~(1 << MUX0);
powodował jakiś błąd, tym bardziej, że w AVR Studio bity były poprawnie
wybierane...

Pzdr.
Krzysztof.




Poprzedni Następny
Wiadomość
Spis treści
From: czerstwy <czebaka_at_nospam_o2.pl>
Subject: Re: ADC w AVR - problem
Date: Sat, 27 May 2006 17:25:17 +0200


Krzysztof napisał/a:
jak dla mnie w obydwu wypadkach odczyt jest dokonywany z
GND w przypadku ATMEGA8

tu powinny być raczej
(...)
ADMUX &= ~((1 << MUX3) | (1 << MUX2) | (1 << MUX1)
| (1 << MUX0)); // ustawianie wejścia, ADC0

Many thanks for your excellent job !!!
Za pierwszym razem poszło :-))

Nie mam pojęcia dlaczego mój zapis
ADMUX &= ~(1 << MUX3) | ~(1 << MUX2) | ~(1 << MUX1) | ~(1 << MUX0);
powodował jakiś błąd, tym bardziej, że w AVR Studio bity były poprawnie
wybierane...

~((1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (1 << MUX0)) = 0xF0

~(1 << MUX3) | ~(1 << MUX2) | ~(1 << MUX1) | ~(1 << MUX0) = 0xFF

to dwie zupełnie inne liczby wychodzą, nie wiem jak AVRStudio mogło to
interpretować tak samo

pozdrawiam
czerstwy

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: Re: ADC w AVR - problem
Date: Sun, 28 May 2006 00:47:24 +0200


to dwie zupełnie inne liczby wychodzą, nie wiem jak AVRStudio mogło to
interpretować tak samo

Już wychwyciłem przyczynę. Sposób w jaki ja pisałem, nie powodował
kasowania bitów ADMUX3..0, i nie umożliwiał wpisywania nowych (przeważnie
mniejszych wartości), stąd wyjaśnie się przyczyna dlaczego zawsze
odczytywałem daną z ostatniego wywoływanego kanału - a testowałem
to maksymalnie dla trzech.
Teraz przetestowałem to ponownie w AVR Studio i faktycznie na jaw
wyszedł wspomniany wyżej problem.

Jeszcze raz dzięki za pomoc. Dwa popołudnia szukałem, dlaczego to tak
dziwnie się zachowuje.

Pozdrawiam
Krzysztof.



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotrek Sz." <zumek.SKASUJ_at_nospam_gazeta.pl>
Subject: Re: ADC w AVR - problem
Date: Sat, 27 May 2006 20:51:57 +0000 (UTC)


Krzysztof <krzysztof.gedroyc_at_nospam_wp.pl> napisał(a):

Dlaczego przy odczycie danych z ADC, zawsze w zmiennej Pv, mam tę samą
wartość co w Vv? Przecież zgodnie z notą katalogową przełączam wejście w
czasie, gdy bit ADEN jest wyzerowany. Odczytywanie pojedynczo pinów
mikrokontrolera przebiega prawidłowo, a odczyt dwóch za jednym razem jest
ok.

volatile unsigned char temp; // niepotrzebne dane
// >>>>>>>>>>> odczyt regulacji mocy >>>>>>>>>>>>>>>>

..
ADMUX &= ~(1 << MUX3) | ~(1 << MUX2) | ~(1 << MUX1)
| ~(1 << MUX0); // ustawianie wejścia, ADC0

Ten zapis powinien wyglądać tak:

ADMUX &= ~((1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (1 << MUX0));

Twój zapis dał taki efekt:

ADMUX &= 0xf7 | 0xfb | 0xfd | 0xfe ;

co w sumie dało :

ADMUX &= 0xff;

czyli psinco ;) i nie podobra co by sie AVRStudio na taki nume nabrało :(

Piotrek


--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/