Autor: Dondu
Artykuł jest fragmentem cyklu: Pułapki mikrokontrolerów AVR
Bardzo często początkujący nie wiedzą dlaczego niektóre piny świeżo zakupionego mikrokontrolera AVR nie działają prawidłowo:
Wojtech
Dlaczego na porcie A led świeci a na C nie chce? Atmega16.
Dlaczego na porcie A led świeci a na C nie chce? Atmega16.
Przyczyną może być włączona funkcja intrfejscu JTAG, która wykorzystuje część pinów portu. Wojtech pytał o port C w mikrokontrolerze ATmega16. Zobaczmy więc, co kryje się w tym porcie:
Aby więc odzyskać normalną funkcjonalność pinów, musisz wyłączyć funkcjonalność JTAG w Twoim mikrokontrolerze. Za włączenie interfejsu JTAG odpowiada fusebit JTAGEN.
JTAG możesz także wyłączyć programowo ustawiając bit JTD w rejestrze MCUCSR:
Nie zawsze JTAG wykorzystuje piny portu C. Na przykład w ATmega128 portem tym jest port F.
Zobacz pozostałe pułapki AVR
- Pułapki AVR: Spis treści
Dodałbym notkę o możliwości programowego wyłączenia jtaga w rejestrze MCUCR.
OdpowiedzUsuńW kompilatorze wystarczy dodać dwie linijki: (wg. datasheetu bit JTD musi być zapisany dwukrotnie w ciągu 4 cykli zegarowych)
OdpowiedzUsuńMCUCSR |= (1<<JTD);
MCUCSR |= (1<<JTD);
co pozwala na obsługę portu C jako I/O.
Jest to jednak trywialne podejście, gdyż w każdym kodzie trzeba dodać owe dwie linijki.