Artikel top billede

(Foto: Computerworld)

Leg med microcontroller

Der hersker ingen tvivl længere – der er elektronik i næsten alle produkter nu om stunder. Biler er fyldt med dem, vaskemaskiner har nok et par kilogram, og mon ikke at brødristeren ikke også har lidt elektronik i sig? Modsat tidligere tiders elektronik indeholder nutidens produkter ofte både hardware og software. Her kigger vi nærmere på, hvordan du selv kan lege med en microcontroller.

Af Kenneth Geisshirt, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Som du allerede ved, består en computer af en række komponenter. Der er både hukommelse (ram), lager (typisk harddisken) og en cpu. En moderne cpu er et stor klods. Størrelsen af en cpu tælles ofte i transistorer, og Intel Core2 (Allendale) kan snildt have over 160 millioner transistorer.

Sådanne cpu'er bruger rigtig meget strøm og kræver aktiv køling (blæser). Den slags computer finder du ikke i din vaskemaskine – her er der brug for en meget lille computer, som er billig at producere og har et meget lille strømforbrug.

Løsningen er en microcontroller – en slags miniaturecomputer. En microcontroller unit (mcu) er en meget begrænset computer, både hvad angår hukommelse (tit under 16kB) og processorkraft. Antal transistorer er lille, og clockfrevensen lav (under 30MHz). Samtidig kommer en microcontroller pakket med hukommelse og I/O-porte. I/O-portene kan styre ydre enheder, for eksempel en motor, eller læse data fra omgivelserne i form af en indbygget A/D (analog/digital) converter.

Programmerne til en microcontroller gemmes meget ofte i en EEPROM således, at det er muligt at skifte det ud (opgradering af firmware).

Naturligvis udvikler microcontroller-markedet sig i takt med resten af elektronik-markedet. Det betyder, at microcontrolleren i dag er kraftigere end for fem år siden. Har du erfaring med gamle hjemmecomputere fra 1980'erne, vil du med sikkerhed genkende navnene på nogle af microcontrollerene i dag. For eksempel bruges Z80 (ZX-81, Spectrum) som en microncontroller-indpakning.

Det indkøbte legetøj

For at lære mere om elektronik og microcontrollers har jeg indkøbt et udviklingskit fra Thames & Kosmos. Det koster 150 USD hos websitet Think Geek. Det indeholder microcontrolleren Atmel ATtiny2313 (se infoboks ”Mpu” for flere detaljer), som er en 8-bit controller, et board, ledninger, motor, lydsensor, lysdioder med mere.

Der er en god lang instruktionsbog med (144 sider med omkring 100 eksperimenter). Boardet er af den type, hvor du bygger omstillinger uden at skulle lodde. Det gør det til et rigtig lille elektronik-laboratorium. Alle programmer og data overføres trådløst over en IR-port, og der følger en IR-port med til en pc.

Eftersom den medfølgende IR-port ender i et RS-232 (serial) interface, følger der også en USB/RS-232 adaptor. Mange computere i dag har ikke et RS-232 interface, men kun usb-porte (min bærbar er præcis sådan en computer).

Udpakning og samling

På æsken står der, at det er for børn fra 12 år. For at tjekke dette har jeg allieret mig med min søn, Svante, som er 8 år.

Som det første skal alle komponenterne pakkes ud og boardet samles med en række metalbeslag (til montering af ledninger og komponenter) samt en række faste komponenter som motor, potentiometer og mikrofon.

Beslagene skal klikkes på, og det er meget let. En 8-årig kan uden problemer klare den opgave. Monteringen af motor, potentiometer, mikrofon og højttaler er lidt mere besværlig, og her bør en voksen person træde til. Det er endvidere også her, at du får brug for en skruetrækker, men det er heldigvis den eneste gang.

Det er muligt at tilslutte en strømforsyning, men der følger ikke en med. Heldigvis kan det hele også drives af et 9V batteri, og til mine tests nøjedes jeg med det.

Første opstilling

Den første opstilling er obligatorisk (eller i det mindste kraftigt anbefalet) og kræver ikke tilslutning af en computer. Grunden til det er, at der i EEPROM'en allerede er lagt et program, som kan bruges sammen med den første opstilling. Det er en af de fine egenskaber ved en EEPROM, den mister ikke sine data, selvom du ikke har tændt for den i meget lang tid.

Min søn stod for samling af den første opstilling. I den medfølgende brugsanvisning er alle opstillinger vist på tre måder. Den første er den som et rigtigt elektronik-diagram, hvilket naturligvis er den rigtige måde. Men det er svært at opsætte sådan et diagram til en opstilling. Heldigvis er den anden måde en fin tegning af, hvordan board med ledninger og komponenter ser ud, når opstillingen er samlet. Til sidst er der også et fotografi af opstillingen. Ud fra tegningen af opstillingen kan en 8-årig uden problemer samle en opstilling på meget kort tid. Det hjælper nok, at danske børn er vokset op med LEGO-æsker og Ikea-møbler.

Når opstillingen tændes, vil lysdioderne danne et løbelys, og der kommer et beep, når løbelyset begynder forfra. Med en lille kontakt er det muligt at stoppe løbelyset.

Windows XP

Med pakken følger der en cd-rom med et helt udviklingsmiljø. Det er et Windows-program, som kan køres direkte fra cd-rom'en. Der er ingen Vista-understøttelse, så du bliver nødt til at finde en XP (eller tidligere) installation frem. I min familie har vi heldigvis én fælles Windows XP maskine, som vi kan bruge, når Windows er nødvendigt (normalt er vi en Linux-familie).

Godt nok kan programmet køres direkte fra cd-rom'en, men du er nødt til at installere en driver til USB/RS-232 adaptoren. Lad ikke Windows selv stå for installationen – det er klart lettest at angive, at driveren er placeret på cd-rom'en.

Driveren virker fint – men en genstart skader bestemt ikke. Når driveren er på plads, skal du vælge, hvilken com-port driveren skal stille til rådighed for applikationerne. Du vælger com-port i XP's systemværktøjer under enhedshåndtering. Find USB/RS-232 adaptoren i oversigten, og ændr com-port.

Du skal være opmærksom på, at udviklingsmiljøet kun kan se de første seks com-porte, så selvom du kan vælge mellem 256 forskellige com-porte, kan det klart anbefales at vælge com1 eller com2. Installation af driveren kræver en lidt erfaren computerbruger. Om man er det, når man er 12 år, kommer helt an på personen – jeg kender mange ”voksne”, som ville være gået i stå. Og der er sikkert mange unge mennesker, som ikke ved, hvad en com-port er.

Når programmet på cd-rom'en starter op, skal du vælge com-port som det første. Det er vigtigt, at board med microcontrolleren monteret er tændt, og at IR-porten er tilsluttet din computer, samt at den peger direkte som IR-modtageren på microcontrolleren. Er alt i hak, vil programmet melde, at microcontrolleren er online og klar til brug.

Programmets funktioner er delt logisk op i en række faneblade. Det er muligt at styre I/O-portene på microcontrolleren direkte fra programmet, uden at du skal sende et lille styreprogram over til microcontrolleren. Det er også muligt at foretage målinger af spænding på andre porte på microcontrolleren. Endvidere er der også et oscilloskop. På den måde er det muligt at bygge små måleapparater og aflæse værdierne med din computer. Dette kunne måske inspirere en folkeskole- eller gymnasielærer til at bygge apparatur til fysik/kemi-lokalet i stedet for at indkøbe dyre specialapparaturer.

Sidste faneblad er – for mig – det mest interessante. Det er nemlig her, at du kan skrive små styreprogrammer til microcontrolleren og sende dem over til boardet. Programmeringen sker ved, at du klikker på den konstruktion, som du ønsker at tilføje til dit styreprogram, som hele tiden vises på den venstre side af vinduet.

Også med Linux

Linux kan også bruges, hvis du er en smule smart. Det kræver, at du bruger Wine til at afvikle programmet på cd-rom'en fra Thames & Kosmos. Ubuntu Linux 9.04 kan let installere Wine version 1.0.1, idet denne version af Wine er den officielt understøttede version. Kommandoen apt-get install wine gør arbejdet.

Selve programmet på cd-rom'en kører fint, men du skal lige selv sætte com-porten op. Det gør du ved at udføre følgende kommando i folderen .wine/dosdevices: ln -s /dev/ttyUSB0 com1. Det giver Wine com1 som et symbolsk link til den rigtige device-fil, nemlig /dev/ttyUSB0.

Du skal være klar over, at det ikke er understøttet fra leverandørens side, at du bruger Linux og Wine til at afvikle deres udviklingsmiljø, og der er derfor heller ingen support. Men det virker fint.

Programmering

Thames & Kosmos har valgt at gøre udviklingen af styreprogrammer til microcontrolleren så let som muligt. Derfor har de udviklet et særlig BASIC-lignende programmeringssprog.

Kender du bare en smule til en eller anden cpu's instruktionssæt, kan du hurtigt gennemskue, hvilke instruktioner som ligger bag de BASIC-lignende konstruktioner. Med andre ord er der tale om en minimal compiler, men det gør intet.

Det er et meget fint, lille programmeringssprog, og det er muligt at læse og forstå de mange programmer, som følger med på cd-rom'en (og som også er trykt i instruktionsbogen til de mange eksperimenter).

Som allerede omtalt, er der fire registre i microcontrolleren. I sproget betegnes de som A, B, C og D. Du kan tænke på dem som variable, og du behøver ikke at erklære dem. Eftersom hvert register er 8bit, kan de antage værdier mellem 0 og 255.

Generelt inddeles funktionerne i programmeringssproget i en række grupper. Første gruppe involverer de to registre A og B i forskellige regneoperationer. For eksempel; læg 1 til A, gang A og B, og gem resultatet i A.

Den anden gruppe er tildelinger. for eksempel kan du sætte A til at have samme værdi som B (A = B). Det er også muligt at sætte registrene til enhver værdi mellem 0 og 255. Det er ikke muligt at lægge 2 til A – du skal enten lægge 1 til to gange (A = A+1, A = A+1) eller bruge et andet register (B=2, A=A+B).

Det er også muligt at tildele konstanter til andet end registre. I/O-portene er jo enten indgange eller udgange, og deres retning (direction) vælges ved at sætte registreret Pdir til et bitmønster svarende til hver port. Ønskes for eksempel I/O-portene D0 og D3 at være udgange, skal Pdir sættes til 5 (bit-mønstreret er 000101, som er 5 i ti-talssystemet). Registreret Delay bruges til at give en pause. Værdien, som tildeles Delay, angiver pausen i millisekunder, og det er derfor kun muligt at have pauser i op til 256ms.

Det er også muligt med forgreninger. I mange sprog finder du en if ... else ... konstruktion, men det er ikke muligt her. Der er derimod en meget enkel if konstruktion, nemlig if A relop B goto, hvor relop kan være >, = eller <. Med andre ord, dine forgreninger koges ned til, om der skal hoppes eller ej.

Hoppet (goto) er til en etikette (label), og dem indsætter du i koden med Lx: navn, hvor x er et tal (eller et enkelt bogstav), og navn er det, som du bruger i dine goto'er.

Underprogrammer (procedurer, funktioner, subroutines) er der en begrænset mulighed for, idet den klassiske gosub med tilhørende return også findes i dette enkle programmeringssprog.

Et trafiklys

I den medfølgende instruktionsbog er der mange interessante opstillinger. Mange af dem er ganske børnevenlige. Efter den obligatoriske opstilling blev et trafiklys valgt. Min søn kunne uden problemer sætte alle komponenter op rigtigt.

Opstillingen består af fem lysdioder, omkring 20 ledninger samt en kontakt. Når kontakten trykkes ned, skifter lysdioder, så bilerne enten må køre eller ej (og omvendt for forgængere).

Styreprogrammet finder du i infoboksen ”Trafiklys”. Det er et ganske enkelt styreprogram med to underprogrammer. Det ene underprogram (L3: Seconds) kan vente i et antal sekunder – register D angiver hvor mange sekunder.

Det andet underprogram (L2: Pushbutton) tjekker periodisk (250ms), om kontakten er blevet trykket ned. Det gør det ved at tjekke, om der er en spænding på microcontrollerens ene input-ben.

I fagsprog vil denne måde at tjekke, om en kontakt (eller noget andet) trykkes ned på kaldes for polling. Det er den ene af to måder at behandle ydre enheder (kontakten er her en ydre enhed).

Den anden måde er at lade de ydre enheder afbryde (interrupt) microcontrollerens hovedløkke. Styreprogrammer baseret på afbrydelser er skaleret bedre, når der kommer flere ydre enheder, men de kræver, at der er elektronik til håndtering af afbrydelserne.

Potteplanterne

Indrømmet, potteplanter og nørder er ikke altid to ting, som går rigtig godt i spænd. Nørder kan godt leve uden potteplanter, men potteplanter kan ikke leve uden vand. Heldigvis har instruktionsbogen en løsning på det – der er en opstilling, som kan måle jordens fugtighed. Eller rettere, det er et voltmeter, men jo mere fugtigt, jo lettere kan strømmen løbe.

Det er igen en meget enkel opstilling, som tog under fem minutter at sætte op. I stedet for den viste fugtmåler, skal du blot bruge to lange ledninger, som placeret i potteplantens jord. Det er muligt med programmet fra cd-rom'en at aflæse spændingen på porten Ain på microcontrolleren. Der er et faneblad, som viser spændingen i volt mod tiden (og du kan vælge forskellige aflæsningsintervaller).

Afslutning

Det er et utroligt sjovt og lærerigt microcontroller-kit, som denne artikel handler om. Det kan varmt anbefales for alle, som har en interesse for, hvordan elektronik og computere virker. Den anbefalede alder på 12 år virker på ingen måde urealistisk. Allerede en 8-årig kan finde det sjovt at være med, selvom hun eller han ikke forstår det hele. Konceptet med, at der er kort fra idé til at se noget fysisk (blinkende lysdioder eller beeplyde), vil helt sikkert falde i børns smag, eftersom de ikke kan holde koncentrationen fast i lige så lang tid som os voksne.

Der er klart muligheder for en folkeskolelærer i det kit. Der er både det rent tekniske element: eleverne kan lære, hvordan en computer virker. Men der er også muligheden at opbygge små måleapparater selv for en relativ billig penge – 1000-1200 kroner er forhåbentlig noget, enhver større folkeskole kan finde i budgettet. En fugtmåler, som kører weekenden over – det må da kunne bruges til et eller andet i Natur/teknik-timerne.

AT Tiny 2313

Mit MCU-kit er baseret på Atmel AT Tiny 2313 (AVR 8-bit familien), som er en 8-bit microcontroller. Den har en klokfrevens på 20MHz og har 128 bytes RAM. EEPROM'en til lagring af programmer er på 128 bytes. Der er fire registrere, som du kan bruge som programmør. Der er en 8-bit A/D converter (0 til 5 V) og seks I/O-porte (D0-D5). Endvidere er der en PWM (pulse width modulator) port. De seks I/O-porte har internt fået monteret modstande, så det er muligt at sætte dioder direkte på dem. Der er tale om en RISC-processor, og instruktionssættet er meget elegant, hvis du skulle få lyst til at skrive i assembler.

Trafiklys

Pdir = 63
L1:
Portout = 20
Gosub L2: Pushbutton?
Portout = 18
D = 2
Gosub L3: Seconds
Portout = 17
D = 2
Gosub L3: Seconds
Portout = 33
D = 10
Gosub L3: Seconds
Portout = 17
D = 2
Portout = 19
D = 2
Gosub L3: Seconds
Portout = 20
D = 10
Gosub L3: Seconds
Goto L1:
L2: Pushbutton?
Delay = 250
A = Din
B = 1
If A = B Goto L2: Pushbutton?
Return
L3: Seconds
Delay = 250
Delay = 250
Delay = 250
Delay = 250
D*Goto L3: Seconds
Return
End

[themepacific_accordion]
[themepacific_accordion_section title="Fakta"]

Få mere at vide

[/themepacific_accordion_section]
[/themepacific_accordion]