Begyndelsen Indlejret Elektronik – 2

Link: https://www.sparkfun.com/tutorials/93

Foredrag 2 – Sådan Får du Kode På en Microcontroller

Du kan få alle delene til denne forelæsning her. Vi anbefaler også kraftigt, at du får et multimeter med en ‘kontinuitet’ indstilling. En god kvalitet multimeter med denne indstilling gælder for ~$60, og så højt som $300 for en virkelig fantastisk. Vi kan lide vores $60 cheapo.

Vi undskylder forvirringen. Når disse tutorials er skrevet og fotograferet, vi brugte ATmega8. Vi har nu bære den nyere ATmega328. Du vil finde alle ATmega328 oplysninger på de følgende sider, men billederne vil vise en ATmega8.

Jeg antager, at du har fået din 5V forsyning testet og arbejder. Næste, vi er nødt til at indsætte ATmega i breadboard og tilslut strøm og jord.

ATmega8 (virker samme med ATmega168, og 328) ved den midterste række af breadboard

Du bliver nødt til at bøje lidt i benene af DIP (dual inline package) for at få ATmega at skræve breadboard center. Vær forsigtig! Du må ikke bøje benene for langt indad. Stifter af ATmega skal indsætte i det indre to mest rækker på breadboard. Jeg finder det bedst at indsætte den ene side og så lidt skub IC sidelæns, indtil den anden side af benene kan indsætte i den modsatte række på breadboard. Forvirrende, jeg kender.

Bemærk: 5V ‘jernbane’ er den vandrette række huller ved den røde linje. Du bør have en ledning, der forbinder din 5V effekt regulator kredsløb til et hul på 5V jernbane. Dette vil give energi til alle de huller ud for den røde linje med 5V. Dette er sandt om den blå linje. Alle de vandrette huller ved siden af den blå linje er forbundet med hinanden. Et af disse huller skal være forbundet til jord pin-kode på din spændingsregulator, og at jorden tilslutning af din væg vorte. Du kan tilslutte VCC benene på ATmega328 at alle huller langs 5V jernbane, og du tilslut GND ben på ATmega328 til noget hul langs den blå rail GND.

Oh, hey! Hvis ingen nogensinde fortalt dig, at der er en meget simpel måde at finde ud af, hvor pin 1 er på en IC. Producenten af noget, hverken i polariserede stik (tantal caps, elektrolytisk caps, Led, ICs, osv.), vil altid sætte en form for mærkning af enheden til at angive, hvordan enheden formodes at være orienteret. For ICs, der er en lille fordybning i den ene ende af IC. Den blå pil i billedet, der peger til denne smilehul. Den orange pil peger på pin 1, og den blå etiketter viser, hvordan pin-tal stige.

Pin-mærkning på et IC

regnet fra den smilehul, pin 1 er venstre og stiger ned i venstre side af IC. Pin-numre hoppe til højre række af benene og tæller op. Se billede fra ATmega328 databladet nedenfor.

Den ATmega328 bør være i breadboard, pin 7 (VCC) og pin-kode 20 (AVCC) skal være forbundet til din 5V jernbane og stifter 8 og 22 (JORD) må ikke være forbundet til GND på dit brød bestyrelsen. Hvis du tænder din power circuit på, ATmega328 kører nu, men det har intet at løbe!

Faktisk er det ikke helt sandt – der er en forbindelse, der skal gøres, før den ATmega328 begynder at køre kode. RESET pin-kode på ATmega328 skal være forbundet til VCC. Du kan enten tilsluttes RESET  pin-kode direkte til 5V eller du kan ‘binde det høje’ ved at forbinde RESET pin-VCC gennem en modstand. Dette vil give dig mulighed for at tilføje en momentan reset-knappen. Hvad er det? Reset-line på ATmega328 er præcis, hvad det lyder som – det reset mikro ligesom reset virker på din computer. Hvis man ser på ATmega328 dataark du vil se RESET-mærket er skrevet med en streg over det. Dette er nomenklatur, der angiver reset

pin-kode er aktiv lave. Hvad er “aktiv lav”? RESET pin-koden er et input. Et lavt niveau på denne pin-kode vil sætte micro ind i reset – dvs pin-koden er aktiveret med et lavt input, aka “active low”. Så medmindre du ønsker, at din ATmega328 at bo på reset, du bliver nødt til at trække denne pin-high.

Nu har du brug for en reset-knap. En momentan kontakt er en kontakt, der aktiveres (eller lukket), mens du trykker på den og åbne, når du slipper knappen. Disse kaldes ofte “diskussion skifter’, fordi de ‘click’, når du trykker på dem, der giver den person, der trykker på knappen ” taktil feedback.

Dette er hvad den skematiske del ser ud. Meddelelse pin 1 og 2 er forbundet med hinanden. 3 og 4 er forbundet med hinanden. Og når du trykker på ‘de-knappen, er det midlertidigt forbinder 1/2+3/4 sammen.

Bemærk, at denne knap har fem ben. Hvis din knap har fem ben, bare ignorer den midterste ben – det er ikke forbundet til noget, og kan klippes ud.

for At teste denne knap, piske ud trofaste multimeter, og indstil det til kontinuitet indstilling. Dette er den indstilling, om pænere, mid-grade multimetre, som er afgørende for fejlfinding og eksperimentere. Tryk på sonder sammen – du skal høre en tone, der angiver, at der er kontinuitet eller en (næsten) nul modstand sti mellem sonder. Sæt knappen i breadboard og probe de to ben på én side af knappen. Hvis du tog benene på 1/2 eller 3/4 bør du hører en tone. Disse pins er permanent tilsluttet inde skifte. Hvis du har valgt pins 1/3 eller 2/4, du vil ikke høre en støj – men ramte knappen. Ved at trykke på den knap, du vil gøre en elektrisk forbindelse mellem alle fire ben – og du skal høre den tone! Dette betyder, at du har elektrisk kontinuitet.

skematisk viser pin 1 og 2 af de reset switch, der er sluttet sammen (forbundet til jord) og ben 3/4 forbindes (sluttet til !RESET) . I praksis er der, du skal bare skifte til at arbejde. Leg med dit multimeter og finde to ben, der ikke giver støj, når knappen er ikke rørt ved, og ikke lave støj, når knappen er trykket ned. Brug disse to ben.

skematisk vist ovenfor er, hvad vi går efter. De 10K modstand ‘trækker’ reset pin høj under normal aktivitet. Ved at trække på reset pin high, ATmega328 kører normalt. Når du trykker på reset switch (S2), reset pin ser en kontinuerlig forbindelse til jorden. Da modstanden gennem deprimeret skifte er næsten nul, vinder den (i forhold til den modstand, de 10K modstand!) og reset pin-koden er trukket lav, RESET er aktiveret, og ATmega328 går ind i reset. Slip knappen, og reset pin-koden er trukket højt igen, og ATmega328 kommer ud af reset. Fiks!

ATmega328 benet

Se den smilehul fra ATmega328 datablad? Ser man på toppen af IC (ben ned), med smilehul til toppen, pin-numre øge startende fra 1 i øverste venstre hjørne. Dette er, hvordan hver IC-pin-koden er nummererede. Dog orientering mærkning varierer en smule mellem producenter og mellem emballagetyper. Se for en ikke-kongruent markering som et smilehul, lille prik, hvid-pil, hak hjørne – noget der gør, at området af chip forskellige fra andre dele af chip sandsynligvis angiver, at pin-1. Når du er i tvivl, check databladet.

Reset kabel ud til en ATmega8 (samme gælder for ATmega168, og ATmega328)

Lær at bruge den kontinuitet indstilling på dit multimeter. Det vil være afgørende for fejlfinding ned af vejen!

Hver microcontroller producent har en anden metode til at få kode i flash-hukommelsen på mikro. I de sidste par år har der været fokus på ISP eller “in system programming”. ISP giver dig mulighed for at programmere IC, uden at skulle afbryde microcontroller fra programmet. Dette er ikke trivielt! Historien var meget mere smertefuldt. Atmel har designet en forholdsvis ligetil metode, der kræver kontrol af et par knappenåle (6 i alt). På grund af denne enkle interface, hardware programmør, der er nødvendige for at tilslutte din computer til dette ISP interface er meget lige frem (billige!) så godt.

Den røde stribe angiver placeringen af Pin-kode 1

Huske, hvordan vi identificeret pin1 på IC fra smilehul? Godt stik også brug for en polarisering, så at vi ikke vende orientering af stikket, og steger ting. Desværre den måde, stik er nummererede, er den modsatte af ICs. I billedet af ISP-stikket, skal du se den røde stribe, der angiver pin-1. IC tæller sekventielt ned i den ene side. Stik på den anden side øger pin-numre, frem og tilbage, som du arbejder din vej ned stik.

programmering kæde ser noget som dette:

  1. Der er et frit C ++ compiler kaldet AVR-GCC. Brugeren skriver kode i C, og derefter beregner, at koden i HEX-filer

  2. AVR-GCC kan installeres på Windows-platformen med en let WinAVR installere programmet

  3. brugeren får denne HEX kode på en AVR-enheden via ISP-pins

  4. Både en seriel port, programmør og en parallel port programmere har været designet til at forbinde computer port til AVR-ISP-pins

  5. computeren kører en kommandolinje-program til at overføre HEX fil fra computeren, at den serielle eller parallelle port, og ud til AVR-ISP-pins

  6. micro kører maskinen kode (*.HEX-filer) når drevet eller reset

Hvad er en C ++ compiler? Dette er et program, som input et program skrevet i C-sproget-og udgange en HEX fil. Vi foretrækker at programmere i C, fordi det er lettere for os end samling og mere fleksibel end BASIC.

Hvad er en HEX fil? Dette er en fil, der indeholder forskellige hexidecimal tegn. Disse hex ‘koder’ repræsenterer maskinen instruktioner, at ATmega328 forstå. Denne fil er hvad der bliver sendt ned til programmøren, og den programmør belastninger disse maskinen instruktioner på ATmega328.

Før vi kan få vanvittigt at hente og installere WinAVR på den computer, som du vil gøre din kode udvikling på. Hvis dette link går ud af dato, en google-søgning, bør tage dig direkte til det. Windows installer skal være forholdsvis ligetil – følg alle standarder. WinAVR indeholder en version af GCC-kompileren og forskellige andre værktøjer, herunder avrdude og Programmør Notesblok. avrdude er en simpel kommandolinje-program, der tager en HEX fil og sender den til den serielle eller parallelle port til programmering på en Atmel microcontroller.

Arbejde baglæns op på denne liste, og jeg vil give dig et eksempel, ‘Hello World’ HEX fil, der skal bevise, at alt fungerer korrekt på din micro. Med en micro controller board, er det første trick er altid at få en LYSDIODE til at blinke. Dette er den ‘Hello World’ af indlejrede systemer. Gæt hvad blink_1MHz.hex?

Med blink hex fil i hånden, kan du nu brug for at få det på micro. Du bliver nødt til at slutte AVR-PG1 (eller AVR-PRODUKTGRUPPE 2) til ATmega328. Den nemmeste måde at gøre dette på er med 9 ledninger, der kører fra din breadboard til 10-bens stikket på ISP-stikket på AVR-PG1/PRODUKTGRUPPE 2.

Jamming ledninger i ISP-stikket, er ikke en god løsning på lang sigt, men af hensyn til at få LED til at blinke, det vil gøre. Jeg har skåret korte ledninger og strippet begge ender. En afisolerede ende er indsat i den ene ende af den sorte programmering stik, i den anden ende indsættes i breadboard.

AVR-PRODUKTGRUPPE 2 parallelle programmør kabel i ATmega328. Jeg har også sat op, to 0.1 uF caps. Disse afkobling hætter er placeret tæt på den VCC og GND ben på ATmega328 til at hjælpe med at reducere støj i IC. Du tror måske du har en straight DC 5V, men ikke rigtig – disse 0.1 uF caps hjælpe med at reducere krusning på 5V linje. Ja, ATmega328 vil sandsynligvis køre uden dem, men de er gode at have installeret.

AVR ISP Bemærk: Du har virkelig til at smage alle 4 GND ben. Du kan ikke ledning blot en af de GND ben på ISP-stik.

Derudover har vi brug for en LED til at styre. Dette kan være bundet til nogen GPIO-pin-koden. PC0 ser ud som et godt sted.

modstanden/LED-for ikke ligegyldigt – bare husk (fra Tutorial 1), at du skal have modstand! Den GPIO pin er faktisk ligegyldigt. blink_1MHz.hex vil skifte alle pins på alle porte så du kan tilslutte den modstand til enhver pin-kode. Efterhånden som du tilføjer mere perifere hardware, vil du ønsker at dedikere nogle ben for alternativ anvendelse (såsom TX og RX ben for seriel kommunikation).

Du får tættere! Tid til at programmere chippen!

Når WinAVR er installeret, bør du have et par nye ikoner på skrivebordet. Programmører Notesblok er en dejlig kode editor og highlighter.

Hvad er en kode-editor/highlighter? Når du programmerer, skal du bruge en tekst-editor på din computer, så du kan skabe (type) kode. Når du har oprettet denne “code” på din computer (inde i koden redaktør) du vil videregive denne kode til compileren (du vil klikke på en knap, der kører compiler med C-fil, som du har skrevet) og compileren vil skabe en HEX fil (hvis der er nogen problemer eller fejl i din kode). Den highlighter? Når du opretter kode, er det ofte rart at have forskellige dele af dit program farvekodede, så du kan fortælle det til en fælles ting, som for( ) og #define. Dette hjælper med at fremhæve en masse, når programmering.

Benytte en hvilken som helst tekst værktøj, du kan lide. Notesblok vil arbejde, men er temmelig rudimentær. Jeg kan også godt lide JFE fra min PIC dage. Begge har en ‘værktøjer’ indstilling, som er stor, men JFE er bedre i min udtalelse, fordi det indeholder C-funktioner, som du kan dobbeltklikke på, og naviger til. Hvis der er en måde at gøre et lignende trick i Programmør Notesblok 2, så lad mig det vide! Fordi Programmører Notesblok v2 (aka PN2) kommer med WinAVR installation, vi får brug for det!

AVR-GCC er meget kraftfuld, meget komplekse og vanskelige at bruge i første omgang. Jeg er vant til at vedtage en *.c-filen til en PIC compiler (CC5x) og få en HEX fil ud igen. Ingen dikkedarer, ingen rod. Tror du mig, smerten ved at få AVR-GCC op og kører, er det værd. AVR-GCC er en virkelig dejlig compiler, og det er gratis. Jeg har inkluderet en bestand Makefile – og blink_1MHz.c fil blink_1MHz.zip til at få dig i gang. Jeg er på ingen måde et Linux-eller gøre type person. Alt hvad du behøver at vide er, at når du skriver ‘gøre’ ved kommandoprompten, kompileren kommer til at kigge efter en fil, der hedder ‘Makefile’ (no file extension!) og bruge den fil til at direkte, hvordan at kompilere C-fil.

Disse er de eneste to filer, du skal bruge for at få blink til at kompilere. Åbne op blink_1MHz.c programmør notesblok, og klik på Tools->Make All. Dette er det samme som at skrive ‘make all’ fra kommandoprompten fra, hvad der nogensinde mappe du har gemt disse to filer. For eksempel

C:\Code\Blink>make all

skal kompilere din kode så godt. Det er bare lidt nemmere at gøre dette gennem Programmør Notesblok interface snarere end at skifte frem og tilbage til vinduet kommandoprompt. Når du har gennemført en kompileret C-fil i en HEX fil, du nu har brug for at få at hex fil på AVR-enheden. Det er endelig tid til at drive op i dit system! Den billige AVR-programmører, der kræver, at målet (det er din breadboard) til at levere strøm til programmør (det er AVR-PG1 eller PRODUKTGRUPPE 2). Power up din brød bord – du skal se, strøm-LED ‘ en lyser. Fra nu af, vil jeg antage, at du bruger AVR-PRODUKTGRUPPE 2 parallelle port programmør.

Der er kun to steder i makefile, at du skal være bekymret for på dette tidspunkt. Disse to spots er placeret under programmering muligheder afsnit. Makefilen er enorm, men rul ned til Programmering Optioner (avrdude) afsnit. Nu er sat en ” # ” forrest af linjer, du ønsker at kommentere.

Hvis du bruger AVR-PG1 (seriel port programmør) du redigerer en side som denne:

#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = ponyser

# com1 = serial port. Use lpt1 to connect to parallel port.
#AVRDUDE_PORT = lpt1
AVRDUDE_PORT = COM1

Hvis du bruger AVR-PRODUKTGRUPPE 2 (parallel port programmør) du redigerer en side som denne:

AVRDUDE_PROGRAMMER = stk200
#AVRDUDE_PROGRAMMER = ponyser

# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = lpt1
#AVRDUDE_PORT = COM1

selvfølgelig port numre afhænger af din specifikke computer, men når du får ting til at virke, vil du blive sat for livet. Forudsat, at du har redigeret og gemt din makefile, skal du gå tilbage til PN2. Med din breadboard drevet, klik på “Værktøjer” ->Program. Dette vil sende kommandoen ‘make-program’ til kommandoprompten. Hvis alt er sat korrekt op, skal du have indlæst blink_1MHz.hex på dit mål ATmega328 og dine LED skal være op med at blinke.

Hvis du får en fejl :

can’t open device “giveio”

Så læs denne side. Dybest set er du nødt til at kopiere den giveio.sys fil fra C:\WinAVR/bin til C:\Windows mappe, og skriv derefter install_giveio.bat ved kommandoprompten.

Typiske Problemer:

Hvis du stadig ikke er i stand til at programmere AVR-enheden – dette er, hvor 99% af første gang-brugere ender. Grave i og fejlfinding.

ISP forbindelserne korrekt? Det er nemt at få ISP-stik baglæns. Tag et kig på billederne ovenfor.

Er der en løs ledning? Træk multimeter og kontrollere, at du har fået 5V bliver leveret til VCC og GND ben på ATmega328. Gør ledningerne går ind i ISP-stikket har en god solid forbindelse?

har du din ATmega328 forbundet til både strøm og jord?

Er din 5V forsyning 5V output?

har du den rigtige COM-port eller en LPT-port, der er valgt i din makefile?

Der er et væld af ting at tjekke. Det er svært! Jeg kender. Men når du får tingene sat korrekt op, og at LED ‘ en blinker – det vil føles fantastisk!

Ok – jeg har tænkt mig at antage, at du fik koden korrekt indlæst på AVR-enheden, og at LED ‘ en blinker. Tillykke! Du er nu godt på vej til en hel verden af smerte! Når du får en ting at arbejde, er det svært at stoppe! GPS, kanals dataopsamling, RF, PCB layout – det hele er bare et par humle væk.

Du kan få alle delene til denne forelæsning her.