Supaprastintas AVR JTAGICE adapteris

AVRJTAG Adapterio gamyba

Kurį laiką šitas aparatas buvo suraizgytas ant maketo. Tad nusprendžiau jį užbaigti. Tai AVR JtagICE kitaip vadinamas AVR miniICE klonu, kurio veikimas praktiškai nesiskiria nuo originalaus AVR Jtag adapterio.

AVR_JTAG_clone.jpg

Trumpai tariant JTAG yra naudojamas programų derinimui realioje aplinkoje, kai programos parametri matomi ne kaip simuliatoriaus rezultatas, bet tiesiai iš testuojamo mikrovaldiklio. Tokiu būdu galima matyti realų mikrokontrolerio veikimą, bei jį valdyti.

JTAG adapterio savybės:

  • Realaus laiko programinio derinimo palaikymas;

  • Galimybė atnaujinti adapterio programinę įrangą per AVR Studio aplinką;

  • Maitinimas nuo 2.6 iki 6V imamas nuo testuojamos plokštės;

  • Adapteris jungiamas per COM prievadą;

  • Diodas mirksi kai Jtag aktyvus;

Žvelgiant iš AVR Studio pusės, Jtag palaiko šiuos mikrovaldiklius:

  • ATmega128, ATmega128L, AT90CAN128

  • ATmega16, ATmega16L

  • ATmega162, ATmega162L, ATmega162V

  • ATmega165, ATmega165V

  • ATmega169, ATmega169L, ATmega169V

  • ATmega32, ATmega32L

  • ATmega323, ATmega323L

  • ATmega64, ATmega64L

AVR Jtag schema yra tikrai paprasta nereikalaujanti ypatingų sugebėjimų:

AVRjtag_SCH.png

Plokštės vaizdas:

AVR_JTAG_PCB_copper.jpg

Schema paprasta tačiau visas veiksmas slypi adapterio programoje. Tačiau ir čia nereikia didelių pastangų. Kadangi adapteris yra suderinamas su Atmel palaikomu AVR JtagICE adapteriu, tereikia įrašyti originalų sukompiliuotą kodą per bootloaderį.

Kadangi adapteris įsirašo programą per bootloaderį, tai pirmiausia į mikrvaldiklį reikia patalpinti bootloaderį, kuris galėtų susikalbėti su AVR Studio. Na bootloaderį įrašome naudodami ISP programatorių ir PonyProg.

Tada nustatome Atmega16 fuse bitus kad būtų vykdomas bootloaderis po reset signalo:

JtagICE_fuses.jpg

Kai adapteris paruoštas programiniam atnaujinimui, prijungiame jį prie kompiuterio COM porto ir paleidžiame naujausią AVR Studio su visais atnaujinimais. Tuomet pasirenkame meniu punktą

avrjtag_avrstudio0.png

Tools->AVR Prog. Tada ties “Hex File”susirandame upgrade.ebn bylą, kuri yra AVR Studio direktorijoje (pagal nutylėjimą ji yra “C:Program FilesAtmelAVR ToolsJTAGICEUpgrade.ebn ”):

avrjtag_avrstudio1.png

Ir spaudžiame Program. Kai programavimas baigtas paprastai yra išmetama klaida, kurios nepaisykite.

Dabar belieka prie adapterio vėl prijungti ISP programatorių kad atstatyti fuse bitus normaliam programos vykdymui:

JtagICE_fuses.jpg

Adapteris baigtas. Jeigu viską atlikote korektiškais, tai turėtų veikti iš karto.

Projekto EagleCAD bylos yra čia.

AVR Jtag adapterio veikimas

Sekanti dalis skirta adapterio paleidimui. AVR JTAG naudotis yra taip pat paprasta kaip ir AVR Studio simuliatoriumi. Pirmiausia reikia turėti AVR plokštę su vienu iš anksčiau minėtų Atmega mikrovaldiklių. Mano atveju naudojamas Atmega128L bandomoji plokštė. Plokštėje turi būti numatyta JTAG jungtis:

AVR_JTAG_clone_to_atmega128.jpg

Prieš jungiant Bandymo plokštę prie JTAG adapterio įsitikinkite kad yra pažymėtas JTAGEN fuse bitas:

Atmega128_for_Jtag.JPG

Kitu atveju AVR Studio išmes klaidą:

Jtag_Valid_ID.JPG

Kai aparatūra paruošta, galim sukurti bandomąjį projektą ir vykdyti jį naudojant JTAG debugerį. Tam sukuriame AVRGCC projektą AVR Studio aplinkoje, toliau pasirenkame derinimo platformą (JTAG ICE) ir mikrovaldikį (Atmega128):

debug_plstform.JPG

Programa paprasta- mygtuko nuskaitymas ir diodo įjungimas:

// Port IO Example

#include <avr/io.h>

// Input Port pin SWITCH_IP

#define PORT_SWITCH_IP PORTB

#define DDR_SWITCH_IP DDRB

#define PIN_SWITCH_IP PINB

#define BIT_SWITCH_IP 5

// Output Port pin LED_O

#define PORT_LED_O PORTB

#define DDR_LED_O DDRB

#define BIT_LED_O 6

int main(void)

{

// Set LED_O as output pin

DDR_LED_O |= (1<<BIT_LED_O);

// Set SWITCH_IP as input pin

DDR_SWITCH_IP &= ~(1<<BIT_SWITCH_IP);

// Enable pull-up on SWITCH_IP

PORT_SWITCH_IP |= (1<<BIT_SWITCH_IP);

// Repeat indefinitely

for(;;)

{

// See if switch is pressed

if((PIN_SWITCH_IP&(1<<BIT_SWITCH_IP)) == 0)

{

// Enable LED

PORT_LED_O |= (1<<BIT_LED_O);

}

else

{

// Disable LED

PORT_LED_O &= ~(1<<BIT_LED_O);

}

}

}

Programą sukompiliuojame ir paleidžiame simuliatorių/debugerį naudodami run komandą. Toliau programa gali būti vykdoma pažingsniui, automatinis žingsniavimas ar vykdymas realios programos iki breakpoint. Kitaip sakant darbas praktiškai nesiskiria nuo darbo su vidiniu AVR Studio simuliatoriumi:

debugging.PNG

Sekmės konstruojant.

Skelbta Elektronika Pažymėti: , ,

Parašykite komentarą