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
- posted
12 years ago