się :-(

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

Reply to
wkwj
Loading thread data ...

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

Reply to
Waldemar Krzok

Te same.

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.

Reply to
shg

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.

Reply to
wkwj

W dniu 25.04.2011 11:32, wkwj pisze:

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.)

Reply to
Michoo

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.