eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAVR - przerwania zewnętrzne, usypianie i budzenieRe: AVR - przerwania zewnętrzne, usypianie i budzenie
  • Data: 2013-02-23 08:59:43
    Temat: Re: AVR - przerwania zewnętrzne, usypianie i budzenie
    Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2013-02-22 21:00, Michoo pisze:

    > Ale czemu atmega miała się zresetować?

    W powodu watchdoga?
    Może inaczej. Czy przypadkiem mikrokontrolerowi nie zdarza się czasem
    (choćby niezmiernie rzadko) zawiesić się, tak po prostu zaprzestać
    pracy? Jeśli tak, to chodzi mi właśnie o ochronę przed taką sytuacją.


    Bo rozumiem, że czasem jakiś niuans w samym kodzie (np. pętla, która w
    określonych okolicznościach zacznie się wykonywać w nieskończoność) może
    spowodować zawias, ale to na razie pomijam.


    > Oznacza to:
    > a) błąd w programie. należy go wyeliminować
    > b) błąd w module albo zakłócenie w komunikacji. stan systemu jest
    > prawdopodobnie niespójny. Twardy reset jest w takiej sytuacji
    > najbezpieczniejszym wyjściem.

    Dla jasności: nigdy takiej sytuacji nie miałem. Nie zdarzyło mi się,
    żeby moduł albo uC się zawiesił. Wszystkie przypadki, kiedy coś działało
    nieprawidłowo okazywały się efektem jakiegoś drobnego błędu w programie.

    A co do twardego resetu, to modem D15 nie ma nawet odpowiedniego pinu.
    Jedynym rozwiązaniem z tego co widzę jest odcięcie zasilania, a to mogę
    zrobić ręcznie.


    > Ja bym w takim wypadku zrobił sprawdził na ile stan wygląda "dobrze" i w
    > rzie czego zrobił power-cycle. Skoro był reboot to znaczy, ze coś się
    > poważnie spieprzyło. Nic ci nie gwarantuje, że moduł będzie po czymś
    > takim pracował poprawnie.

    Proces inicjacji modułu GSM oczywiście przeprowadza elementarną
    diagnostykę, nawet jeśli zastanie go w stanie włączonym. Jeśli coś jest
    nie tak, zgłasza kod błędu migając diodą. Trochę "diagnostyki" jest też
    po podniesieniu słuchawki - pytanie o status, sprawdzenie poziomu
    sygnału itp. Słowem raczej można się połapać, gdy coś nie działa.


    > foo:
    > Czekasz na
    > +:CPAS: 00
    > a dostajesz
    > +:CPAS: 01 (albo jeszcze lepiej 05, bo wybudzenie się nie powiodło)
    > watchdag robi reset, goto foo.

    Tak swoją drogą co zwraca "+CPAS: 001" gdy modem jest niedostępny albo
    "+CPAS: 005" gdy znajduje się w stanie uśpienia, skoro przecież jest
    niedostępny albo znajduje się w stanie uśpienia? ;)
    Tutaj chyba chodzi o jakieś bardzo specyficzne sytuacje?
    W funkcji sprawdzającej o stan modemu umieściłem po prostu licznik.
    Funkcja zwraca odpowiednią wartość, gdy program nie otrzyma odpowiedzi
    przed upływem 500 ms. Jeszcze tego nie zagospodarowałem, ale myślałem o
    zwykłym komunikacie błędu.


    > A jeżeli zgłosił 1,2,5?

    Jeszcze niezagospodarowane, ale to kwestia dodania kolejnego "case"
    wewnątrz instrukcji switch(). Jak już mówiłem funkcja odpowiedzialna za
    obsługę CPAS czeka po prostu aż przyjdzie stała część komunikatu (+CPAS:
    00) a potem czeka na pojawienie się ostatniej cyferki, pobiera ją,
    konwertuje z ASCII na liczbę i zwraca programowi.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: