AVR-batch

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

Test af udviklings-miljøet

Udviklingsmiljøet kræver at WinAVR er installeret, da det skal compilere og linke koden sammen til en HEX-fil. Desuden sørger det for forbindelsen til den microcontroller der skal programmeres.

For at kunne teste et udviklingsboard, så kan det være en fordel at smide noget test-kode i microcontrolleren, og koble lidt hardware på, for at se om den rent faktisk fungerer.

Videre arbejde i test-miljøet

Når man har fået testet at hardwaren kan fungere og man kan lægger programmer over i AVR-microcontrolleren, så skal man i gang med sine egne programmer.

Her vil man naturligvis tage en kopi af C-filen og navngive den efter hvilket projekt man skal lave. Her skal man redigere i batch-jobbene, så man får det rigtige filnavn ind i alle batch-job (på nær erase) - man skal også være opmærksom på at navnet står flere gange i nogle batch-job, det skal rettes alle steder.

Eksempel til ATTiny45

Der er en ZIP-fil med et kodeeksempel der løber gennem alle 5 udgange. Man kan teste ved at sætte 5 LED'er med tilhørende begrænsnings-modstande på udgangene.

Eksempel til ATTiny24A

Der er en ZIP-fil med et kodeeksempel der løber gennem alle 11 udgange. Man kan teste ved at sætte 11 LED'er med tilhørende begrænsnings-modstande på udgangene.

Generel struktur af batch-job

Der er et build-batch-job, som forsøger at oversætte C-koden til relokerbar maskin-kode, hvorefter det linkes sammen til en HEX-fil der kan brændes.

Når man har fået oversat til maskinkode, så er der en burn-fil, der kan foretage selve programmeringen af microcontrolleren.

Man kan slette koden i microcontrolleren med en erase-fil, hvis man ikke ønsker at andre skal kunne bruge microconterolleren med ens egen kode.

For at sikre hvordan microcontrolleren passer til ens hardware, så skal man sætte de rigtige fuses med set fuses filen.

Build-batch-job

Build er det batch-job der oversætter C-koden til maskinkode.

C-koden ligger placeret i underbiblioteket /src og hedder blink.c i eksemplet.

Hvis man ønsker at få batch-jobbet til at oversætte en anden C-fil, så skal man rette navnet i batch-filen - det står der 8 gange.

Oversættelsen foregår ved at oversætte koden først til assemblerkode, der kan gøre det læseligt hvordan compileren tolker C-koden til at blive til maskin-kode. Der dannes ligeledes relokerbar objekt-kode der ikke er læseligt. Ud fra den relokerbare objekt-kode linkes det sammen til en absolut maskinkode. Denne maskinkode oversættes til en HEX-fil der kan kommunikeres over til ISP-programmeren.

Hvis oversættelsen går godt ser det ud som følger:
Build-OK.PNG

Hvis oversættelsen fejler kan det se ud som følger:
Build-fejl.PNG

Burn-batch-job

Når man skal brænde maskin-koden over i microcontrolleren, så skal man have tilsluttet en Arduino med en ArduinoISP software brændt ned i for at det kan fungere, samt et AVR-programmer Shield på for på enkel vis at koble over til microcontroller udviklingsboardet.

Desuden skal man kontrollere at Arduinoen optræder som den rigtige COM-port - det kan man f.x. kontrollere i enhedshåndteringen under COM-porte. Tallet skal svare til den COM-port der er angivet inde i Burn-batch-jobbet.

Man kan desuden rette navnet på den HEX-fil der skal brændes over. Resten burde være standard.

Hvis brændingen går godt får man en skærmbillede som følger:
Burn.PNG

Erase-batch-job

Der er ikke så meget at sige til det batch-job, andet end at man igen skal kommunikere med den rigtige COM-port

set fuse-batch-job

Dette bacth-job kan være specielt farligt - man skal sikre sig at man har den rigtige type microcontroller skrevet ind i batch-jobbet til den aktuelle microcontroller man forsøger at arbejde med, ellers går det galt!!!

Her skal man igen kommunikere med den rigtige COM-port.

Man har også muligheden for at rette på de fuses der sættes i microcontrolleren.

Det er vigtigt at man får sat de fuses der svarer til den hardware man har koblet op omkring microcontrolleren.

Der er specielt en fuse man skal passe på med at rette - det er Reset benet. Hvis man ønsker at anvende det til f.x. input, så skal man have fjernet den eksterne reset (det gør man med et 0 det rette sted i fuses). Konsekvensen er at man så kun kan brænde microcontrolleren med high-voltage programming (12,5V) som arduinoen IKKE er i stand til.