-
1. Data: 2011-04-24 20:43:16
Temat: ATmega8L + AD7745 - nie budzi się :-(
Od: wkwj <w...@g...pl>
Witam,
jako "międzymordzie" pomiędzy PC a AD7745 używam ATmega8L (plus link
optyczny ale to już osobna sprawa). AD7745 jest konfigurowany
z PC i pracuje sobie w trybie Single Conversion czyli po każdej
konwersji na jego wyjściu RDY pojawia się zbocze opadające sygnalizujące
że dane z ostatniego przetwarzania są do odczytania.
Sygnał RDY jest podłączony do we. INT0 ATmegi, przerwanie INT0 wyzwalane
poziomem niskim. Układ działa tak: ATmega dostaje rozkaz z PC, wyzwala
pomiar AD7745 i czeka na przerwanie (docelowo w stanie SLEEP), potem
budzi sie przerwaniem, odczytuje dane z AD7745 i wysyła je do PC.
Wszystko działa OK, pomiary i komunikacja sa prawidłowe ale tylko jeżeli
nie używam żadnego trybu uspienia w ATmega albo używam Idle - procek
poprawnie "zasypia" w momencie rozpoczęcia pomiaru przez AD7745 i potem
budzi się poprzez przerwanie INT0 gdzy konwerscja CDC się zakończy.
Problem zaczyna się gdy chcę użyć "głębszego" uśpienia PowerDown (a
zalezy mi na nim bo chce zminimalizować zakłócenia EMI "chwytane" przez
AD7745 z pracującego ATmega). Z datashitu ATmega wynika, że z trybu
uśpienia PowerDown budzi go przerwanie zewnętrzne INT0 wyzwalane
poziomem, przy czym poziom niski musi trwać dłużej niż czas "pobudki"
procka. Ale przecież AD7745 wystawia na RDY poziom 0 zaraz po
zakończeniu przetwarzania i poziom ten trwa aż do odczytania danych lub
wyzwolenia nowego pomiaru czyli "dostatecznie" długo...
No to czemu mi się ATmega nie budzi z tego PowerDown a budzi sie
poprawnie z Idle ? Czy gdzies coś przeoczyłem w datashicie ?
Pozdrawiam,
wkwj
-
2. Data: 2011-04-24 20:56:07
Temat: Re: ATmega8L + AD7745 - nie budzi się :-(
Od: Waldemar Krzok <w...@z...fu-berlin.de>
wkwj wrote:
> Witam,
> jako "międzymordzie" pomiędzy PC a AD7745 używam ATmega8L (plus link
> optyczny ale to już osobna sprawa). AD7745 jest konfigurowany
> z PC i pracuje sobie w trybie Single Conversion czyli po każdej
> konwersji na jego wyjściu RDY pojawia się zbocze opadające sygnalizujące
> że dane z ostatniego przetwarzania są do odczytania.
> Sygnał RDY jest podłączony do we. INT0 ATmegi, przerwanie INT0 wyzwalane
> poziomem niskim. Układ działa tak: ATmega dostaje rozkaz z PC, wyzwala
> pomiar AD7745 i czeka na przerwanie (docelowo w stanie SLEEP), potem
> budzi sie przerwaniem, odczytuje dane z AD7745 i wysyła je do PC.
> Wszystko działa OK, pomiary i komunikacja sa prawidłowe ale tylko jeżeli
> nie używam żadnego trybu uspienia w ATmega albo używam Idle - procek
> poprawnie "zasypia" w momencie rozpoczęcia pomiaru przez AD7745 i potem
> budzi się poprzez przerwanie INT0 gdzy konwerscja CDC się zakończy.
> Problem zaczyna się gdy chcę użyć "głębszego" uśpienia PowerDown (a
> zalezy mi na nim bo chce zminimalizować zakłócenia EMI "chwytane" przez
> AD7745 z pracującego ATmega). Z datashitu ATmega wynika, że z trybu
> uśpienia PowerDown budzi go przerwanie zewnętrzne INT0 wyzwalane
> poziomem, przy czym poziom niski musi trwać dłużej niż czas "pobudki"
> procka. Ale przecież AD7745 wystawia na RDY poziom 0 zaraz po
> zakończeniu przetwarzania i poziom ten trwa aż do odczytania danych lub
> wyzwolenia nowego pomiaru czyli "dostatecznie" długo...
> No to czemu mi się ATmega nie budzi z tego PowerDown a budzi sie
> poprawnie z Idle ? Czy gdzies coś przeoczyłem w datashicie ?
Nie mam shita pod łapą, ale sprawdź, czy na pewno są to te same wektory
przerwań, czy nie leci to przez reset. Tak na wszelki wypadek. Po drugie
sprawdzałeś oscyloskopem, czy na pewno reset trwa wystarczająco długo. Po
trzecie: coś mi się wydaje, że int0 musi wrócić do 1 by procek wystartował.
Może się wydaje, ale sprawdzić możesz :-).
Waldek
--
My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.
-
3. Data: 2011-04-25 00:57:29
Temat: Re: ATmega8L + AD7745 - nie budzi się :-(
Od: shg <s...@g...com>
On Apr 24, 10:56 pm, Waldemar Krzok <w...@z...fu-berlin.de>
wrote:
> Nie mam shita pod łapą, ale sprawdź, czy na pewno są to te same wektory
> przerwań, czy nie leci to przez reset.
Te same.
> Po drugie
> sprawdzałeś oscyloskopem, czy na pewno reset trwa wystarczająco długo. Po
> trzecie: coś mi się wydaje, że int0 musi wrócić do 1 by procek wystartował.
Nie musi, ale w procedurze obsługi przerwania trzeba je wyłączyć
(wyłączyć to konkretne przerwanie, nie cli(), albo przełączyć na
wyzwalanie zboczem), w przeciwnym wypadku będzie wywoływana ciągle.
Oczywiście pozostaje jeszcze kwestia czasu trwania tego stanu
niskiego, tu już można kombinować tylko fusami, albo sprzętowo.
-
4. Data: 2011-04-25 09:32:14
Temat: Re: ATmega8L + AD7745 - nie budzi się :-(
Od: wkwj <w...@g...pl>
> Nie musi, ale w procedurze obsługi przerwania trzeba je wyłączyć
> (wyłączyć to konkretne przerwanie, nie cli(), albo przełączyć na
> wyzwalanie zboczem), w przeciwnym wypadku będzie wywoływana ciągle.
> Oczywiście pozostaje jeszcze kwestia czasu trwania tego stanu
> niskiego, tu już można kombinować tylko fusami, albo sprzętowo.
Oczywiście że zaraz po pojawieniu sie przewania go wyłączam (juz o takie
błędy mnie nie podejrzewajcie :-). Najdziwniejsze jest to że w trybie
uspienia Idle przy przerwaniu wyzwalanym poziomem wszystko działa super
- czyli stan niski generowany przez AD7745 trwa wystarczająco długo aby
obudzić procesor. A po zmianie na uspienie w trybie PowerDown przestaje
działać, choc przeciez to nie wpływa na działanie Ad7745.
-
5. Data: 2011-04-25 13:11:58
Temat: Re: ATmega8L + AD7745 - nie budzi się :-(
Od: Michoo <m...@v...pl>
W dniu 25.04.2011 11:32, wkwj pisze:
>A po zmianie na uspienie w trybie PowerDown przestaje
> działać, choc przeciez to nie wpływa na działanie Ad7745.
A jak masz zrobione połączenie między układami? Nie ma problemu w
sytuacji gdy ATmega zaczyna się budzić - pojawia się na chwilę stan
nieustalony, który jest traktowany jako sygnał "odebrano dane" i stan
niski znika?
(Sprawdziłbym, czy atmega się budzi jeżeli się "ręcznie" zrobi jej niski
stan i jeżeli tak to bym na próbę podciągnął odpowiednie piny tak aby
cały czas stan był tam stabilny.)
--
Pozdrawiam
Michoo