Ratunku! Mój PIC się resetuje!

Nasze polecane książki, kursy, strony internetowe, fora itp. pomocne przy przyswajaniu wiedzy związanej z PIC i pisaniem programów dla nich.
Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1117
Rejestracja: czwartek 03 wrz 2015, 22:02

Ratunku! Mój PIC się resetuje!

Postautor: Antystatyczny » sobota 24 paź 2015, 18:52

W życiu każdego pasjonata nadchodzi taka chwila, w której nawet proste zaświecenia diody świeżo nabytym mikrokontrolerem okazuje się nie lada problematyczne. Dioda się nie zaświeca albo zaświeca się i po chwili gaśnie, a czasami cyklicznie przygasa, a może dioda reaguje nawet na zbliżenie ręki? ;)

Przyczyn może być co najmniej kilka, a ja się skupie na tych w sumie prostych, ale niekoniecznie oczywistych.

1. Brak rezystora 10k przy pinie MCLR. Fundujemy sobie resety układu, bo napięcie na tym pinie radośnie sobie pływa. Pin MCLR można wyłączyć w bitach konfiguracyjnych, ale od tego momentu nie będzie można programować układu niskonapięciowym programatorem.

2. Brak filtracji napięcia zasilającego układ. Przede wszystkim należy zapoznać się z datasheet wykorzystywanego przez nas układu. Dowiemy się, czy producent przyszykował nam jakies niespodzianki typu filtracja napięcia Vcore itp... Poza tym obowiązują ogólne zasady projektowania obwodów. Kondensatory filtrujące jak najbliżej pinów układu, jeśli producent zaleca użycie dławików, to mają być dławiki... Tutaj działania są silnie uzależnione od producenta i typu układu.

3. Włączony watchdog. Timer ten można odpowiednio skonfigurować lub wyłączyć w bitach konfiguracyjnych lub zwyczajnie obsłużyć przy pomocy CLRWDT(); lub ClrWdt();

4. Aktywna (w bitach konfiguracyjnych) opcja programowania niskonapięciowego. Tutaj odniosę się do konkretnego układu, a mianowicie PIC18F2550/4550. jeden z pinów układu oznaczony jest literami PGM. Pin ten służy do wymuszenia wejścia w tryb programowania niskonapięciowego. Wymuszenie następuje poprzez podanie stanu wysokiego na ten pin. Niestety łatwo to przeoczyć i kłopot murowany :)
Co zrobić?
a. wyłączyć LVP w bitach konfiguracyjnych.
b. jeśli potrzebujemy LVP, należy sprowadzić jego pin do stanu niskiego przy pomocy rezystora. W programie należy zadbać, by pin ten był ustawiony jako wyjście (to wyłączy ewentualny pull up), a wyjściowy stan tego pinu ma być stanem niskim.

5. Błędnie ustawiony priorytet źródła przerwania. No cóż... Należy po kolei prześledzić, które z naszych przerwań mają priorytet niski, a które wysoki, a następnie zerknąć obsługę tychże przerwań :) Pomyłka w priorytetach często skutkuje "pójściem softu w maliny"

Pozdrawiam!
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Wróć do „Źródła wiedzy na temat PIC”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość