[51] 89s52 jak zamarza to przemarza

Oct 15, 2006 10 Replies

Int0 i int1 zwieram do masy. Wywołuję tym przerwanie, które odwraca bit, który steruje ledą, żeby było widać co i jak.



  1. Tryb bez oszczędności - wszystko jest ok i zgodnie z przewidywaniami.
  2. Uśpienie - przerwanie budzi układ - jest okej, jak wyżej.
  3. Zamrożenie - nie jest okej, klawisze raz dają reakcję, raz nie dają, czasem trzeba mocno wciskać po kilka razy, coś jak by się zawieszało. Według specyfikacji z zamrożenia można wyjść za pomocą int0 i int1, a tu takie jaja. Napięcia okej, próbowałem na zboczach/poziomach, ale skoro działa na uśpieniu okej...

Jakieś sugestie? Albo czegoś nie wiem?


Janko Muzykant napisał(a):

A próbowałeś podciągnąć piny int0, int1 do plusa rezystorem? Może są jakieś nieścisłości w specyfikacji.

pozdrawiam Robert

Podciągnąłem i nic. Obgryzłem program do minimum, może ktoś spojrzy.

org 00h sjmp reset

org 03h ;obsługa przerwania int0 cpl p0.0 ;tu siedzi led reti

org 33h reset: clr it0 ;int0 aktywowane poziomem mov ie, #10000001b ;włączone przerwania z int0 petla: mov pcon, #00000010b ;zamrożenie procesora sjmp petla

Zamiana linii: mov pcon, #00000010b ;zamrożenie procesora na: mov pcon, #00000001b ;uśpienie procesora albo jej wywalenie sprawia, że układ zachowuje się logicznie.

PS. ie, pcon, it0 zadeklarowane ja należy ;)

U¿ytkownik "Janko Muzykant":

W pierwszym trybie przerwania nie dzialaja.

Heliogabal

Wedle Atmela w 89S52 działają te dwa z wejść int. No i działają tylko średnio chętnie.

U¿ytkownik "Janko Muzykant":

Aha, wlasnie doczytalem. To krok naprzod w stosunku do standardowej 8051.

A co do programu. Podlacz 2 przyciski. Jednym zrob zapalanie diody, a drugim wylaczanie. W ten sposob wyeliminujesz drganie stykow i ewentualne wlaczenie i wylaczenie przy jednym nacisnieciu. Byc moze w tym trybie potrzeba wiecej czasu na wybudzenie procesora, moze pomoze kondensator podczepiony rownolegle do przycisku.

Heliogabal

Wcześniej miałem pętlę opóźniającą w przerwaniu i różne warianty ''mrugania diodą''. Generalnie układ się ''zawiesza'' przy nerwowym gmeraniu przy klawiaturze. Spróbuję jeszcze z kondensatorem, ale znaczące opóźnienia nie będą mi pasowały w aplikacji docelowej, widać taki urok tego wynalazku z zamrażaniem, że do szybkich spraw się nie nadaje. No nic, do urządzeń ''standby'' 51 to nie to.

U¿ytkownik "Janko Muzykant":

Ale po co to opoznienie w przerwaniu ? Jesli wyzwalasz przerwanie poziomem to mozesz przez to je przegapic - przerwanie jest zglaszane dopoki poziom utrzymuje sie na linii. Po obsluzeniu przerwania, gdy stan linii nadal jest niski przerwanie zglaszane jest nadal.

Heliogabal

Sorry, nie w przerwaniu, tylko po jego obsłużeniu, pętla na styk klawiatury, zresztą było tam sporo różnych rzeczy, po których wykonaniu (kilkaset ms) urządzenie zamarzało. Klawisze na int0/1 miały właśnie owo urządzenie budzić. Takie samo rozwiązanie na resecie działało okej (metoda znana z dawna, kiedy była to jedyna możliwość budzenia po zamrożeniu). Tylko reset jest jeden i trzeba kombinować, a mnie potrzebne akurat dwa klawisze.

Zresztą jak by był jakiś błąd, to program wariował by także po uśpieniu, a działa okej.

Janko Muzykant snipped-for-privacy@wp.pl pisze:

Sprawd¼ amperomierzem, czy siê zawiesza czy zamarza?

Sprawdzałem no i różnie :( Czasem zostaje zamrożony (5uA), czasem idzie pełna (katalogowa) para (kilkanaście mA) (6MHz)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required