RTV forum PL | NewsGroups PL

Problemy z ponowną inicjacją ADC w Atmega32 - odczyt wartości z potencjometru

[avr-gcc] ADC i m32 problem

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Problemy z ponowną inicjacją ADC w Atmega32 - odczyt wartości z potencjometru

Saper/nolin11
Guest

Sat Dec 15, 2007 8:33 pm   



Witm,

Mam problem z powtórną inicjacją konwersji ,po resecie przy pierwszym
przerwaniu od ADC wszystko jest dobrze ale za kolejnym już nic się nie
zmienia mimo że zmieniam na wejściu napięcie (potencjometr między
vcc<->gnd).

<code>
SFIOR &= ~(1<<ADTS2 | 1<<ADTS1 | 1<<ADTS0);
ADCSRA = 1<<ADEN | 1<<ADPS0 | 1<<ADIE;

sei();
lcd_cls();
for (;Wink {
lcd_setPos(1,0);
lcd_str_P((prog_char*)PSTR(">"));

ADMUX = 0x01; // ADC1 , Vref=AREF , AREF i AVCC podłączone do Vcc
ADCSRA |= 1<<ADSC | 1<<ADEN; // ADC_ON & ADC_START

while(ADCSRA & (1<<ADSC)) ;

lcd_setPos(1,9);
lcd_hex_byte(ADCSRA); // 0x89 => ADEN=1, ADSC=0, ADATE=0, ADIF=0,
ADIE=1, ADPS2=ADPS1=0, ADPS0=1 (div=2)
lcd_str_P((prog_char*)PSTR(" "));
lcd_hex_byte(ADMUX); // 0x01 => Vref z AREF_PIN, pomiar ADC1
lcd_str_P((prog_char*)PSTR(" "));
lcd_hex_byte(SFIOR); // 0x00
lcd_str_P((prog_char*)PSTR(" "));
lcd_hex_byte(SREG); // 0x82 => I=1

lcd_setPos(2,0);
lcd_dec(tmp16);

lcd_setPos(1,2);
lcd_hex_byte(ADCH);
lcd_hex_byte(ADCL);

lcd_setPos(1,0);
lcd_str_P((prog_char*)PSTR("x"));
delay1ms(1000);
}
}

SIGNAL (SIG_ADC) {
PORT(D) = ~PORT(D);
tmp16 = (ADCH<<Cool | ADCL;
ADCH = ADCL = 0;
}

</code>
W komentarzu przy wyświetlaniu rejestrów napisałem wartości jakie mam.
Dioda podłączona do portu D mryga co ~1s czyli przerwanie się wykonuje ale
jak pokręcę potencjometrem to nie zmienia się tmp16 Neutral ale jak zresetuje uP
to mam zmienione już. Czemu mi nie działa to? Może zapomian czegoś zrobić
albo robię za dużo?


--
Saper/nolin11
gg:4476700
mailto:nolin11_USUN_TO@interia.pl
Delphi & PHP & MySQL & AVR-GCC - Rulllezzz!

Robert Zemła
Guest

Sat Dec 15, 2007 9:59 pm   



Użytkownik "Saper/nolin11" <nolin11_USUN_TO@interia.pl> napisał w wiadomości
news:fk1a63$q0e$1@news.dialog.net.pl...
Quote:
...

SIGNAL (SIG_ADC) {
PORT(D) = ~PORT(D);
tmp16 = (ADCH<<Cool | ADCL;
ADCH = ADCL = 0;
}
....


Powinienes najpierw odczytywac ADCL a potem ADCH i chyba tu tkwi blad.
pozdrawiam

Saper/nolin11
Guest

Sat Dec 15, 2007 10:03 pm   



Robert Zemła wrote:
Quote:
Użytkownik "Saper/nolin11" <nolin11_USUN_TO@interia.pl> napisał w
wiadomości news:fk1a63$q0e$1@news.dialog.net.pl...
...

SIGNAL (SIG_ADC) {
PORT(D) = ~PORT(D);
tmp16 = (ADCH<<Cool | ADCL;
ADCH = ADCL = 0;
}
...

Powinienes najpierw odczytywac ADCL a potem ADCH i chyba tu tkwi blad.
pozdrawiam

Niestety Neutral wciąż zamarza mi wartość I pomiaru... Mimo kręcenia PRkiem nic
się nie zmienia Sad do resetu.


--
Saper/nolin11
gg:4476700
mailto:nolin11_USUN_TO@interia.pl
Delphi & PHP & MySQL & AVR-GCC - Rulllezzz!

Grzegorz Kurczyk
Guest

Sat Dec 15, 2007 10:38 pm   



Użytkownik Robert Zemła napisał:
Quote:
Użytkownik "Saper/nolin11" <nolin11_USUN_TO@interia.pl> napisał w wiadomości
news:fk1a63$q0e$1@news.dialog.net.pl...
...

SIGNAL (SIG_ADC) {
PORT(D) = ~PORT(D);
tmp16 = (ADCH<<Cool | ADCL;
ADCH = ADCL = 0;
}
...

Powinienes najpierw odczytywac ADCL a potem ADCH i chyba tu tkwi blad.
pozdrawiam



A nie prościej napisać

tmp16 = ADC;

Pozdrawiam
Grzegorz

MoonWolf
Guest

Mon Dec 17, 2007 7:50 am   



Saper/nolin11 denied rebel lies:

Quote:
mam. Dioda podłączona do portu D mryga co ~1s czyli przerwanie się
wykonuje ale jak pokręcę potencjometrem to nie zmienia się tmp16 Neutral
ale jak zresetuje uP to mam zmienione już. Czemu mi nie działa to?
Może zapomian czegoś zrobić albo robię za dużo?

A tmp16 jest zadeklarowane jako volatile?

--
<:> Roger, MoonWolf Out <:>|This is the voice of silence no more
(:Smile (:Smile|
(Smile JID:moonwolf@jabberpl.org(Smile| http://karakkhaz.prv.pl

Saper/nolin11
Guest

Tue Dec 18, 2007 6:39 pm   



MoonWolf wrote:
Quote:
Saper/nolin11 denied rebel lies:

mam. Dioda podłączona do portu D mryga co ~1s czyli przerwanie się
wykonuje ale jak pokręcę potencjometrem to nie zmienia się tmp16 Neutral
ale jak zresetuje uP to mam zmienione już. Czemu mi nie działa to?
Może zapomian czegoś zrobić albo robię za dużo?

A tmp16 jest zadeklarowane jako volatile?

nie jest, ale to nie daje mi żadnego efektu...
Pierwszy odczyt jest ok, a drugiego już nie ma....

Uhhhh... problem rozwiązany Neutral, nie ustawiałem bitu ADATE znany z atmega8
jako ADFR i działa.

No właśnie opis mówi o auto-triggering i odnosi go do SFIOR- bitów: ADTS0-2
i tutaj jest free running mode czyli konwersja biegnie cały czas -
przynajmniej ja to tak rozumim :|

No ale już wiem gdzie jest "be" więc EOT.
Przepraszam za kłopot.



--
Saper/nolin11
gg:4476700
mailto:nolin11_USUN_TO@interia.pl
Delphi & PHP & MySQL & AVR-GCC - Rulllezzz!

elektroda NewsGroups Forum Index - Elektronika Polska - Problemy z ponowną inicjacją ADC w Atmega32 - odczyt wartości z potencjometru

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map