piątek, 1 kwietnia 2011

Pułapki AVR: JTAG blokuje piny portu


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.


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:


AVR - MCUCSR bit JTD - Wyłączenie  JTAG


Nie zawsze JTAG wykorzystuje piny portu C. Na przykład w ATmega128 portem tym jest port F.



Zobacz pozostałe pułapki AVR

2 komentarze:

  1. Dodałbym notkę o możliwości programowego wyłączenia jtaga w rejestrze MCUCR.

    OdpowiedzUsuń
  2. W kompilatorze wystarczy dodać dwie linijki: (wg. datasheetu bit JTD musi być zapisany dwukrotnie w ciągu 4 cykli zegarowych)
    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.

    OdpowiedzUsuń