Poprzedni temat «» Następny temat
Wykrycie rodzaju resetu w AT89S8253
Autor Wiadomość
mr_x 



Wiek: 31
Dołączył: 12 Gru 2010
Posty: 366
Skąd: /bin/bash
Wysłany: 2014-01-20, 09:02   Wykrycie rodzaju resetu w AT89S8253

Czy jest jakiś sposób na to, aby wykryć, w jaki sposób AT89S8253 był resetowany? Chodzi mi o różnicę w resecie po włączeniu zasilania oraz po zwykłym resecie przez podanie jedynki na wejście RESET. Myślałem o fladze POF w rejestrze PCON, ale zawsze jest ona ustawiana, niezależnie, czy to włączenie zasilania, czy późniejszy reset, czy nawet reset wymuszony działaniem układu watchdog (gdy wymuszony jest impuls na wejściu RESET).

Potrzebne mi jest to w pewnym projekcie, gdzie peryferia do niego podłączone wysyłają pewien kod po włączeniu zasilania, a później już reset mikrokontrolera i tego kodu nie ma. Gdybym potrafił określić rodzaj resetu, sterowałbym odpowiednio programem tak, aby przy zwykłym resecie program nie czekał na kod z dołączonego układu.

Jeśli się nie da, to trudno, ale tak byłoby bardziej "elegancko".
 
     
tom5555 



Wiek: 39
Dołączył: 23 Sty 2008
Posty: 576
Skąd: Zabrze
Wysłany: 2014-01-20, 17:02   

Jeżeli jest wolny jakiś pin, a najlepiej wewnętrzny komparator) to ja zrobił bym to w taki sposób:
Równolegle z zasilaniem układu podłączyłbym układ czasowy RC. Po włączeniu zasilania kondensator ładował by się przez rezystor. Wolny pin mikroprocesora sprawdzał by poziom naładowania kondensatora. Po resecie procesor sprawdzał by stan tego pinu. Po włączeniu zasilania kondensator nie zdąży się dostatecznie naładować, procesor wykryje stan niski na nóżce połączonej z układem RC i rozpocznie sprawdzanie kodu wysłanego przez "peryferia". W tym czasie kondensator powinien się w pełni naładować. Jeżeli nastąpi reset procesora, kondensator będzie naładowany, na odpowiednim pinie będzie stan wysoki, a procesor rozpocznie pracę bez odczytywania kodów.
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2014-01-20, 17:34   

Możesz zrobić reset programowo, przez odpowiednią instrukcję, a właściwie przez skok pod odpowiedni adres. Ale to wymaga odpowiednio napisanej procedury startowej.
Reset od WatchDoga można wykryć jak pamiętam ustawia on odpowiedni bit.
 
 
     
mr_x 



Wiek: 31
Dołączył: 12 Gru 2010
Posty: 366
Skąd: /bin/bash
Wysłany: 2014-01-20, 20:41   

AT89S8253 nie posiada komparatora, a nie mogę już bardziej rozbudowywać układu, bo mam gotową płytkę i wolę by została jak jest. A co do watchdoga, to tak jest, jak piszesz, kayron, ale gdy nie jest generowany razem z nim sygnał na wejściu RESET, a dla mnie to niezbędne. Reset programowy też za bardzo nie wchodzi w grę, muszę mieć możliwość resetowania przyciskiem.

Tymczasowo poradziłem sobie inaczej. Przez pół sekundy po uruchomieniu programu czekam na kod z urządzenia, gdy go nie otrzymam, wykrywam go wysyłając polecenie odpytania. Gdy i to nie da odpowiedzi, traktuję ten fakt jako brak urządzenia. Mierzyłem stoperem i po włączeniu kod pojawia się po około 400ms, więc zapas pół sekundy wystarcza, a nie jest jednocześnie za długi.

W kolejnej wersji dodam coś podobnego, co opisał tom5555, ale na chwilę obecną modyfikacja hardware nie jest zalecana, jedynie mogę grzebać w kodzie.

Dzięki za podpowiedzi, będę o nich pamiętać.
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2014-01-20, 22:16   

Są specjalizowane układy RESETU, może coś takiego by ci pomogło ?
Przykładowy taki układ:
http://www.tme.eu/pl/deta...nalog-devices/#
Bo są oczywiście różne z różnymi funkcjami, mniej lub bardziej wypasione.
Przypadkiem nawet ten układ co podałem może spełnić twoje wymogi, bo Reset może być generowany, od przycisku, watchdoga, lub wykrycia spadku napięcia na linii zasilającej.
Natomiast żaden, znany mi mikroprocesor nie potrafi na swojej linii RESET, generować sprzętowo tego sygnału. Do tego trzeba poświęcić jakiś PIN I/O i robić to programowo.
 
 
     
mr_x 



Wiek: 31
Dołączył: 12 Gru 2010
Posty: 366
Skąd: /bin/bash
Wysłany: 2014-01-20, 23:19   

Jak nie? Tu masz fragment z datasheet:

DISRTO - Enable/disable the WDT-driven Reset Out (WDT drives the RST pin). When DISRTO = 0, the RST pin is driven high after WDT times out and the entire board is reset. When DISRTO = 1, the RST pin remains only as an input and the WDT resets only the microcontroller internally after WDT times out.

Sprawdzałem też stan linii RESET i faktycznie po odpowiednim skonfigurowaniu watchdoga po jego zadziałaniu pojawia się krótki dodatni impuls.
 
     
r-mik
Nowy na forum


Dołączył: 10 Wrz 2011
Posty: 48
Skąd: Warszawa
Wysłany: 2014-01-21, 09:35   

W przyszłości pomyśl o wymianie na AVR. Są odpowiedniki pin w pin. W AVR masz rejestr w którym jest informacja o przyczynie resetu.
 
     
kayron 
PLC FATEK, automatyka na życzenie



Wiek: 37
Dołączył: 21 Wrz 2008
Posty: 1857
Skąd: Poland
Wysłany: 2014-01-21, 20:50   

O.. widać dużo już zapomniałem o 51, ale cóż nie widziałem tego proca na oczy już lata.

Możesz spróbować jeszcze poeksperymentować z Bitem WRTINH w rejestrze EECON.
Ten bit jest powiązany z układem Power-up and Brown-out Detection Sequence. czyli wykrywa niejako reset w wyniku zaniku zasilania i jego powrotu.
Może odpowiednio napisana procedura na samym początku programu, będzie na tej podstawie, oszacować źródło Resetu.
 
 
     
m75 
Nowy na forum


Wiek: 42
Dołączył: 21 Sie 2012
Posty: 47
Skąd: Olkusz
Wysłany: 2014-01-22, 10:01   

Witam.
W niektórych systemach opartych na Zilogu Z180 po restarcie urządzenia szukało się ciągu znaków w pamięci RAM i na tej podstawie uznawano, że urządzenie wł. pierwszy raz, RAM jest pusty i wymaga załadowania programu itp.
Pozdrawiam.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,03 sekundy. Zapytań do SQL: 11