Mikrocontroller principper

Mikrocontroller :: Was ist eigentlich...? [ger] (Juni 2019).

$config[ads_text] not found
Anonim

Mikrocontroller principper

Digitale kredsløb


Spørgsmål 1

Læs følgende citat, og undersøg derefter termen mikrocontroller for at se, hvilken relevans det har for citatet:

Jeg gik til min første computer konference på New York Hilton omkring 20 år siden. Når nogen der forudsagde markedet for mikroprocessorer, ville i sidste ende være i millioner, sagde en anden, "Hvor skal de alle gå" # 1 "> Reveal svar Skjul svar

Jeg vil lade dig lave dine lektier på dette spørgsmål!

Bemærkninger:

Ikke kun er citatet sjovt, men det er også spændende, især for os, der blev født uden computere i vores hjem overhovedet, meget mindre flere personlige computere.

Et punkt, jeg ønsker at gøre ved at få eleverne til at undersøge ordet "microcontroller" er at se, at de fleste af de eksisterende computere ikke er af den sort man normalt tænker på af mærket "computer". Disse dørknapcomputere - samt motorstyring computere i biler, køkkenmaskiner, mobiltelefoner, biomedicinske implantater, taler fødselsdagskort og andre små enheder - er meget mindre og meget mere specialiserede end de "almindelige formål" computere, folk bruger på deres skriveborde til at skrive dokumenter eller surfe på internettet. De er den tavse usynlige side af den moderne "computerrevolution", og på mange måder er det mere hensigtsmæssigt at begynde at studere digitale elektronik til at udforske end deres større, generelle formål.

Spørgsmål 2

En mikrocontroller enhed eller MCU er en specialiseret type digital computer, der anvendes til automatisk sekventering eller styring af et system. Mikrocontrollere adskiller sig fra almindelige digitale computere ved at være meget små (typisk en enkelt integreret kredsløbschip), med flere dedikerede stifter til indgang og / eller udgang af digitale signaler og begrænset hukommelse. Instruktioner programmeret i mikrocontrollerens hukommelse fortælle det, hvordan man reagerer på indgangsforhold, og hvilke typer signaler der skal sendes til udgange.

Den enkleste type signal "forstået" af en mikrocontroller er et diskret spændingsniveau: enten "højt" (ca. + V) eller "lavt" (ca. jordpotentiale) målt ved en bestemt pin på chippen. Transistorer interne til mikrocontroller producerer disse "høje" og "lave" signaler ved udgangsstifterne, deres handlinger bliver modelleret af SPDT-switches for enkelhedens skyld:

Mikrocontrollere kan programmeres til at efterligne funktionerne i digitale logiske porte (AND, OR, NAND, NOR, etc.) ud over et bredt udvalg af kombinations- og multivibratorfunktioner. De eneste virkelige grænser for, hvad en mikrocontroller kan gøre, er hukommelse (hvor stort et program kan lagres) og input / output-stifter på MCU-chip.

Imidlertid består mikrocontrollere selv af mange tusinder (eller millioner!) Af logiske gate kredsløb. Hvorfor ville det være fornuftigt at bruge en mikrocontroller til at udføre en logisk funktion, at en lille del af dens indbyrdes porte kunne udføre direkte "# 2"> Reveal svar Skjul svar

Nem konfiguration og fleksibilitet!

Bemærkninger:

Bemærk, at jeg ikke forstyrrede at forklare mit ekstremt klare svar. Dette er et emne, jeg ønsker, at eleverne tænker længe og svært, for det rigtige svar på dette spørgsmål er årsagerne til at køre hele udviklingen af ​​programmerbare digitale enheder.

Spørgsmål 3

En studerende beslutter at opbygge et lys-blinker kredsløb ved hjælp af en mikrocontroller i stedet for en 555 timer eller et andet hard-wired astable kredsløb. Desværre er der et problem et sted. Når den første tændes, tændes LED'en i 1 sekund og slukker derefter og tænder aldrig igen. Den eneste måde, hvorpå LED'en nogensinde kommer på, er, hvis MCU'en er nulstillet, eller dens strøm er slået fra og til:

Erklære Pin0 som output

BEGYNDE

Indstil Pin0 HIGH

Hold pause i 1 sekund

Indstil Pin0 LOW

ENDE

En medstudent, når han bliver bedt om hjælp, ændrer programfortegnelsen og sender den igen fra den personlige computer, hvor den redigeres til mikrocontrolleren via et programmeringskabel. Programoversigten læser nu som sådan:

Erklære Pin0 som output

LOOP

Indstil Pin0 HIGH

Hold pause i 1 sekund

Indstil Pin0 LOW

EndLoop

Når MCU'en er nulstillet med det nye program, begynder LED'en at blinke til og fra. . . slags. Lysdioden er "tændt" det meste af tiden, men en gang hvert sekund slukker den og så kommer den straks igen. Faktisk er "off" -perioden så kort, at den næppe kan mærkes.

Hvad den studerende ønskede var en 50% arbejdscyklus: "on" i 1 sekund og derefter "slukket" i 1 sekund og gentog den cyklus på ubestemt tid. For det første forklare betydningen af ​​klassekammeratets programændring, og rediger derefter programfortegnelsen igen, så LED'en gør hvad den studerende ønsker det til.

Reveal svar Skjul svar

En "loop" er nødvendig for MCU'en at gentage on / pause / off-sekvensen. Hvad der er brug for nu er en anden forsinkelse inden for løkken:

Erklære Pin0 som output

LOOP

Indstil Pin0 HIGH

Hold pause i 1 sekund

Indstil Pin0 LOW

Pause i 1 sekund ( ny kode )

EndLoop

Bemærkninger:

Formålet med dette spørgsmål er, at de studerende skal indse, at mikrocontrolleren skal fortælle at "loop" gennem de blinkende instruktioner. Virkelig, dette er bare en illustration af sløjfer i en praktisk sammenhæng.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 4

En studerende beslutter at opbygge et lysflasker kredsløb ved hjælp af en mikrocontroller. Lysdioden skal kun blinke og slukke, når trykknappen er trykket ned. Det skal slukke, når kontakten er frigivet:

Erklære Pin0 som output

Erklære Pin1 som input

Mens Pin1 er HØJ

Indstil Pin0 HIGH

Hold pause i 0, 5 sekunder

Indstil Pin0 LOW

Hold pause i 0, 5 sekunder

ENDWHILE

Lysdioden blinker og slukkes bare fint, så længe trykknappens omskifter holdes, når MCU'en er tændt eller nulstillet. Så snart bryderen er slukket, slukker lysdioden og slukker aldrig igen. Hvis kontakten aldrig blev trykket under opstart, tændes LED'en aldrig! Forklar, hvad der sker, og modificer programmet som nødvendigt for at løse dette problem.

Reveal svar Skjul svar

Den betingede "WHILE" løkke skal placeres inde i en ubetinget løkke:

Erklære Pin0 som output

Erklære Pin1 som input

LOOP

Mens Pin1 er HØJ

Indstil Pin0 HIGH

Hold pause i 0, 5 sekunder

Indstil Pin0 LOW

Hold pause i 0, 5 sekunder

ENDWHILE

EndLoop

Opfølgningsspørgsmål: Hvilket formål tjener modstanden R pulldown i trykknappen kredsløb "noter skjult"> Noter:

Formålet med dette spørgsmål er at eleverne skal forstå, hvad en "WHILE" -løkke repræsenterer i praksis: en loop med tilstand (er). Det kontrasterer også betinget looping mod ubetinget looping, og viser, hvordan begge spiller en rolle i interaktive systemer som denne.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 5

Undersøg følgende skematiske diagram og programoversigt (skrevet i "pseudokode" i stedet for et formelt programmeringssprog) for at bestemme hvilken type grundlæggende logikfunktion der implementeres i denne mikrocontroller enhed:

Erklære Pin0 som output

Erklære Pin1 og Pin2 som input

LOOP

Hvis Pin1 er HIGH, skal du indstille Pin0 HIGH

ELSEIF Pin2 er HIGH, indstillet Pin0 HIGH

Ellers indstilles Pin0 LOW

AFSLUT HVIS

EndLoop

Reveal svar Skjul svar

Denne mikrocontroller implementerer den logiske OR-funktion.

Bemærkninger:

Selvom denne logiske funktion kunne have været implementeret lettere og billigere i hard-wired (gate) logik, har formålet at få eleverne til at tænke på at udføre logiske operationer ved hjælp af en sekvenseret sæt instruktioner inde i en programmerbar enhed (MCU). Dette er et konceptmæssigt spring, grundlæggende men meget vigtigt.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 6

Undersøg følgende skematiske diagram og programoversigt (skrevet i "pseudokode" i stedet for et formelt programmeringssprog) for at bestemme hvilken type grundlæggende logikfunktion der implementeres i denne mikrocontroller enhed:

Erklære Pin0 som output

Erklære Pin1 og Pin2 som input

LOOP

Hvis Pin1 er LOW, skal du indstille Pin0 LOW

ELSEIF Pin2 er LOW, indstil Pin0 LOW

Ellers indstilles Pin0 HIGH

AFSLUT HVIS

EndLoop

Reveal svar Skjul svar

Denne mikrocontroller implementerer den logiske OG-funktion.

Bemærkninger:

Selvom denne logiske funktion kunne have været implementeret lettere og billigere i hard-wired (gate) logik, har formålet at få eleverne til at tænke på at udføre logiske operationer ved hjælp af en sekvenseret sæt instruktioner inde i en programmerbar enhed (MCU). Dette er et konceptmæssigt spring, grundlæggende men meget vigtigt.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 7

Undersøg følgende skematiske diagram og programoversigt (skrevet i "pseudokode" i stedet for et formelt programmeringssprog) for at bestemme hvilken type grundlæggende logikfunktion der implementeres i denne mikrocontroller enhed:

Erklære Pin0 som output

Erklære Pin1 og Pin2 som input

LOOP

Hvis Pin1 er LOW, skal du indstille Pin0 HIGH

ELSEIF Pin2 er LOW, indstil Pin0 HIGH

Ellers indstilles Pin0 LOW

AFSLUT HVIS

EndLoop

Reveal svar Skjul svar

Denne mikrocontroller implementerer den logiske NAND-funktion.

Bemærkninger:

Selvom denne logiske funktion kunne have været implementeret lettere og billigere i hard-wired (gate) logik, har formålet at få eleverne til at tænke på at udføre logiske operationer ved hjælp af en sekvenseret sæt instruktioner inde i en programmerbar enhed (MCU). Dette er et konceptmæssigt spring, grundlæggende men meget vigtigt.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 8

Undersøg følgende skematiske diagram og programoversigt (skrevet i "pseudokode" i stedet for et formelt programmeringssprog) for at bestemme hvilken type grundlæggende logikfunktion der implementeres i denne mikrocontroller enhed:

Erklære Pin0 som output

Erklære Pin1 og Pin2 som input

LOOP

Hvis Pin1 er HIGH, skal du indstille Pin0 LOW

ELSEIF Pin2 er HIGH, indstil Pin0 LOW

Ellers indstilles Pin0 HIGH

AFSLUT HVIS

EndLoop

Reveal svar Skjul svar

Denne mikrocontroller implementerer den logiske NOR-funktion.

Bemærkninger:

Selvom denne logiske funktion kunne have været implementeret lettere og billigere i hard-wired (gate) logik, har formålet at få eleverne til at tænke på at udføre logiske operationer ved hjælp af en sekvenseret sæt instruktioner inde i en programmerbar enhed (MCU). Dette er et konceptmæssigt spring, grundlæggende men meget vigtigt.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 9

Undersøg følgende skematiske diagram og programoversigt (skrevet i "pseudokode" i stedet for et formelt programmeringssprog) for at bestemme hvilken type grundlæggende logikfunktion der implementeres i denne mikrocontroller enhed:

Erklære Pin0 som output

Erklære Pin1 og Pin2 som input

LOOP

Hvis Pin1 er den samme som Pin2, skal du indstille Pin0 LOW

Ellers indstilles Pin0 HIGH

AFSLUT HVIS

EndLoop

Reveal svar Skjul svar

Denne mikrocontroller implementerer den logiske Eksklusiv-ELLER funktion.

Bemærkninger:

Selvom denne logiske funktion kunne have været implementeret lettere og billigere i hard-wired (gate) logik, har formålet at få eleverne til at tænke på at udføre logiske operationer ved hjælp af en sekvenseret sæt instruktioner inde i en programmerbar enhed (MCU). Dette er et konceptmæssigt spring, grundlæggende men meget vigtigt.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 10

En mikrocontroller er en specialiseret type digital computer, der bruges til automatisk sekventering eller styring af et system. Mikrocontrollere adskiller sig fra almindelige digitale computere ved at være meget små (typisk en enkelt integreret kredsløbschip), med flere dedikerede stifter til indgang og / eller udgang af digitale signaler og begrænset hukommelse. Instruktioner programmeret i mikrocontrollerens hukommelse fortælle det, hvordan man reagerer på indgangsforhold, og hvilke typer signaler der skal sendes til udgange.

Den enkleste type signal "forstået" af en mikrocontroller er et diskret spændingsniveau: enten "højt" (ca. + V) eller "lavt" (ca. jordpotentiale) målt ved en bestemt pin på chippen. Transistorer interne til mikrocontroller producerer disse "høje" og "lave" signaler ved udgangsstifterne, deres handlinger bliver modelleret af SPDT-switches for enkelhedens skyld:

Det kræver ikke meget fantasi at visualisere, hvordan mikrocontrollere kan bruges i praktiske systemer: Slå eksterne enheder til og fra i henhold til indgangsstift og / eller tidsforhold. Eksempler er apparatkontrol (ovnstimere, temperaturregulatorer), motorstyring (brændstofindsprøjtninger, tændingstimering, selvdiagnostiske systemer) og robotik (servo aktivering, sensorisk behandling, navigationslogik). Faktisk, hvis du bor i en industrialiseret nation, ejer du sandsynligvis flere dusin mikrocontrollere (indlejret i forskellige enheder) og forstår ikke engang det!

En af de praktiske begrænsninger af mikrocontrollere er dog deres lave output-strømstyrke: typisk mindre end 50 mA. Miniaturiseringen af ​​mikrocontrollers interne kredsløb forbyder optagelse af udgangstransistorer, der har nogen signifikant effektbedømmelse, og derfor skal vi forbinde transistorer til udgangsstifterne for at kunne køre betydelige belastninger.

Antag at vi ønskede at have en mikrocontroller drive en DC-aktiveret magnetventil, der kræver 2 ampere af strøm ved 24 volt. En simpel løsning ville være at bruge en NPN transistor som en "interposing" enhed mellem mikrocontrolleren og magnetventilen som denne:

Desværre giver en enkelt BJT ikke tilstrækkelig strømforøgelse til at aktivere magnetventilen. Med 20 mA udgangsstrøm fra mikrocontroller pin og en β på kun 25 (typisk for en strømtransistor), giver dette kun ca. 500 mA til magnetventilen.

En løsning på dette problem involverer to bipolære transistorer i et Darlington par arrangement:

Der er dog endnu en løsning - udskift den enkelte BJT med en enkelt MOSFET, som slet ikke kræver nogen strøm. Vis hvordan dette kan gøres:

Reveal svar Skjul svar

Bemærkninger:

Formålet med dette langvarige spørgsmål er ikke kun at få eleverne til at finde ud af, hvordan man erstatter en BJT med en MOSFET, men også at introducere dem til begrebet mikrocontroller, hvilket er en enhed af stigende betydning i moderne elektroniske systemer.

Nogle studerende kan spørge om formålet med dioden i dette kredsløb. Forklar dem, at dette er en kommuterende diode, der i nogle tilfælde kaldes en frihjulsdiode, er nødvendig for at forhindre, at transistoren overbelastes af højspændingstransienter, der frembringes af solenoidspolen, når de er slukket ("induktiv tilbageslag").

Spørgsmål 11

En mikrocontroller bruges til at tilvejebringe automatisk strømfaktorkorrektion for en AC-belastning:

Undersøg dette skematiske diagram, og svar derefter på følgende spørgsmål:

Hvordan kan mikrocontrolleren mærke effektfaktoren for AC-belastningen "# 11"> Reveal svar Skjul svar

Jeg vil lade dig og dine klassekammerater diskutere, hvordan MCU'en måske opdager strømfaktor. Der er mere end én gyldig løsning til at gøre det!

20 μF og 80 μF kondensatorerne ville begge være tilkoblet: MCU output DCBA ville være 0101 (bemærk at udgangene skal gå lavt for at aktivere deres respektive relæer!). Med denne udgang vil den korrigerede effektfaktor være 0.99939 snarere end den oprindelige 0, 77.

Bemærkninger:

Dette spørgsmål udgør nogle interessante koncepter til gennemgang samt syntetisering af gamle og nye koncepter i elektronik, som dine elever kan overveje. Sørg for at give masser af tid til diskussion om dette spørgsmål, samt enhver nødvendig gennemgangstid for effektfaktorberegninger!

Spørgsmål 12

Denne mikrocontroller er programmeret til at variere den opfattede lysstyrke af en LED ved hjælp af pulsbreddemodulations (PWM) styring af pin 0's udgang:

Erklære Pin0 som output

Erklær X som en heltalvariabel

LOOP

Indstil Pin0 LOW

Pause i 100 - X mikrosekunder

Indstil Pin0 HIGH

Pause for X microseconds

EndLoop

Bestem, hvad værdien af ​​X skal være for at indstille lysdiodens lysstyrke ved 80%, og også hvad frekvensen af ​​PWM-signalet er.

Reveal svar Skjul svar

Dette spørgsmål er sandsynligvis bedst besvaret ved at tegne et tidsdiagram for Pin 0s output, idet tiderne er 100 - X μs og X μs.

Opfølgningsspørgsmål: Hvad er opløsningen af ​​denne PWM-kontrol, da X er en heltalvariabel "Noter skjult"> Noter:

Pulsmåling modulering (PWM) er en meget almindelig og nyttig måde at generere en analog udgang fra en mikrocontroller (eller andet digitalt elektronisk kredsløb) kun i stand til "høj" og "lav" spændingsniveauudgang. Med PWM er tiden (eller mere specifikt arbejdscyklus ) det analoge domæne, mens amplitude er det digitale domæne. Dette gør det muligt for os at "snige" et analogt signal gennem en digital (on-off) datakanal.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 13

Mange mikrocontrollere er udstyret med en indbygget PWM-funktion, så du ikke selv skal kode en brugerdefineret PWM-algoritme. Denne kendsgerning peger på populariteten af ​​pulsbreddemodulation som et kontrolskema. Forklar hvorfor PWM er så populær, og giv et par praktiske eksempler på, hvordan det kan bruges.

Reveal svar Skjul svar

Jeg vil lade dig lave din egen forskning for dette spørgsmål! Svaret er / er ikke svært at finde.

Bemærkninger:

Pulsmåling modulering (PWM) er en meget almindelig og nyttig måde at generere en analog udgang fra en mikrocontroller (eller andet digitalt elektronisk kredsløb) kun i stand til "høj" og "lav" spændingsniveauudgang. Med PWM er tiden (eller mere specifikt arbejdscyklus ) det analoge domæne, mens amplitude er det digitale domæne. Dette gør det muligt for os at "snige" et analogt signal gennem en digital (on-off) datakanal.

Spørgsmål 14

Pulsmåling modulering (PWM) er ikke kun nyttig til at generere en analog udgang med en mikrocontroller, men den er også nyttig til at modtage en analog indgang via en stifter, der kun håndterer digitale højspændingsniveauer på højt niveau. Følgende kredsløb tager et analogt spændingssignal ind i en komparator, genererer PWM og sender derefter PWM-signalet til indgangen til en mikrocontroller:

Erklære Pin0 som input

Erklære Last_Pin0 som en boolesk variabel

Erklære Time_High som en heltal variabel

Erklære Time_Low som en heltalvariabel

Erklær Duty_Cycle som en variabel punkt variabel

Indstil Time_High og Time_Low begge til nul

LOOP

Indstil Last_Pin0 svarende til Pin0

Hvis Pin0 er HIGH, skal du øge Time_High af en

Hvis Pin0 er LOW, skal du øge Time_Low med en

Hvis Last_Pin0 ikke svarer til Pin0, skal du gå til SUBROUTINE

EndLoop

subrutine

Sæt Duty_Cycle lig med (Time_High / (Time_High + Time_Low))

Indstil Time_High og Time_Low begge til nul

Gå tilbage til opkaldsløkken

ENDSUBROUTINE

Forklar hvordan dette program virker. Tip: Den boolske variabel Last_Pin0 bruges til at registrere, når tilstanden Pin0 er ændret fra 0 til 1 eller fra 1 til 0.

Reveal svar Skjul svar

Den vanskeligste del af dette program er at finde ud af Last_Pin0-variabelens funktion, og hvordan den bestemmer, hvornår subroutinen skal udføres. Jeg anbefaler på det kraftigste, at du udfører et "tankeeksperiment" med et langsomt firkantbølgeindgangssignal til mikrocontrolleren, hvor du undersøger, hvordan Time_High og Time_Low-variablerne øges med kvadratbølgens tilstand.

Bemærkninger:

Pulsmåling modulering (PWM) er en meget almindelig og nyttig måde at generere en analog udgang fra en mikrocontroller (eller andet digitalt elektronisk kredsløb) kun i stand til "høj" og "lav" spændingsniveauudgang. Her ser vi det også som en form for indgangssignalmodulering . Med PWM er tiden (eller mere specifikt arbejdscyklus ) det analoge domæne, mens amplitude er det digitale domæne. Dette gør det muligt for os at "snige" et analogt signal gennem en digital (on-off) datakanal.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 15

Digitale computere kommunikerer med eksterne enheder via porte : sæt af terminaler er normalt arrangeret i grupper på 4, 8, 16 eller mere (4 bits = 1 nybble, 8 bits = 1 byte, 16 bits = 2 bytes). Disse terminaler kan indstilles til høje eller lave logiske tilstande ved at skrive et program til den computer, der sender en numerisk værdi til porten. Her er f.eks. En illustration af, at en mikrocontroller instrueres til at sende det hexadecimale nummer F3 til port A og 2C til port B:

Antag at vi ønskede at bruge de øverste fire bit af port A (ben 7, 6, 5 og 4) til at køre spoler af en stepper motor i denne otte-trins rækkefølge:

Trin 1:
0001
Trin 2:
0011
Trin 3:
0010
Trin 4:
0110
Trin 5:
0100
Trin 6:
1100
Trin 7:
1000
Trin 8:
1001

Da hver pin går højt, kører den en power MOSFET på, som sender strøm gennem den pågældende spole af steppermotoren. Ved at følge en "shift" -sekvens som vist, vil motoren rotere en lille mængde for hver cyklus.

Skriv den nødvendige rækkefølge af tal, der skal sendes til port A for at generere denne specifikke rækkefølge af bitskift i hexadecimal. Forlad den nederste fire bit af port A alt i lav logisk tilstand.

Reveal svar Skjul svar

Trin 1:
10 16
Trin 2:
30 16
Trin 3:
20 16
Trin 4:
60 16
Trin 5:
40 16
Trin 6:
C0 16
Trin 7:
80 16
Trin 8:
90 16

Opfølgningsspørgsmål: skriv den samme sekvens i decimal snarere end hexadecimal:

Trin 1:
Trin 2:
Trin 3:
Trin 4:
Trin 5:
Trin 6:
Trin 7:
Trin 8:

Bemærkninger:

Selv om roden til dette spørgsmål ikke er mere end binær til hexadecimal konvertering, introducerer den også eleverne til begrebet styring af bitstater i mikrocomputerporte ved at skrive hex-værdier. Som sådan er dette spørgsmål meget praktisk!

Hvis de studerende spørger, lad dem vide, at et dollar tegn prefix er nogle gange brugt til at angive et hexadecimalt tal. Andre gange bliver præfikset 0x brugt (f.eks. $ F3 og 0xF3 betyder det samme).

Spørgsmål 16

Undersøg følgende skematiske diagram og programoversigt (skrevet i "pseudokode" i stedet for et formelt programmeringssprog) for at bestemme hvilken type grundlæggende logikfunktion der implementeres i denne mikrocontroller enhed:

Erklære Pin0 som output

Erklære Pin1 og Pin2 som input

LOOP

Hvis Pin1 er den samme som Pin2, skal du indstille Pin0 HIGH

Ellers indstilles Pin0 LOW

AFSLUT HVIS

EndLoop

Reveal svar Skjul svar

Denne mikrocontroller implementerer den logiske Eksklusiv-NOR funktion.

Bemærkninger:

Selvom denne logiske funktion kunne have været implementeret lettere og billigere i hard-wired (gate) logik, har formålet at få eleverne til at tænke på at udføre logiske operationer ved hjælp af en sekvenseret sæt instruktioner inde i en programmerbar enhed (MCU). Dette er et konceptmæssigt spring, grundlæggende men meget vigtigt.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 17

Digitale computere kommunikerer med eksterne enheder via porte : sæt af terminaler er normalt arrangeret i grupper på 4, 8, 16 eller mere. Disse terminaler kan indstilles til høje eller lave logiske tilstande ved at skrive et program til den computer, der sender en numerisk værdi til porten. For eksempel er her en illustration af, at en mikrocontroller instrueres til at sende det hexadecimale nummer 2B til port A og A9 til port B:

Antag, at vi ønskede at bruge de første syv bits i hver port (pind 0 til 6) til at køre to 7-segmentet fælles katode skærme frem for at bruge BCD til 7-segment dekoder IC'er:

Skriv de nødvendige hexadecimale værdier, der skal udlæses i portene A og B for at generere displayet "42" på de to 7-segmenters displayenheder.

Reveal svar Skjul svar

Port A = 5B 16 Port B = 66 16

Bemærk at følgende svar også gælder:

Port A = DB 16 Port B = E6 16

Opfølgningsspørgsmål: skriv de samme numeriske værdier i decimal snarere end hexadecimal.

Bemærkninger:

Roten til dette spørgsmål er lidt mere end binær til hexadecimal konvertering, men introducerer også eleverne til begrebet styring af bitstater i mikrocomputerporte ved at skrive hex-værdier. Som sådan er dette spørgsmål meget praktisk! Selvom det ikke er sandsynligt, at nogen vil udelade BCD-til-7-segment-dekodere, når de bygger en tocifret decimalvisning (fordi det gøres på denne måde, bruger så mange mere dyrebare mikrocontroller-I / O-ben), er det sikkert muligt! Der er mange andre applikationer end dette, hvor du skal få mikrocontrolleren til at udstede en bestemt kombination af høj og lav tilstand, og den hurtigste måde at programmere dette på er at udstede hex-værdier til havne.

Hvis de studerende spørger, lad dem vide, at et dollar tegn prefix er nogle gange brugt til at angive et hexadecimalt tal. Andre gange bliver præfikset 0x brugt (f.eks. $ F3 og 0xF3 betyder det samme).

Spørgsmål 18

En metode til at køre pixel i en gitterbaseret skærm er at organisere pixelerne i rækker og kolonner, og vælg derefter individuelle pixel til belysning ved krydset mellem en bestemt radlinie og en bestemt kolonnelinje. I dette eksempel styrer vi et 8 × 8 gitter med LED'er med to 8-bit (1-byte) porte på en mikrocontroller:

Bemærk, at der kræves en høj tilstand på en af ​​port B's ben for at aktivere en række, og en lav tilstand er påkrævet på en af ​​portens pins for at aktivere en søjle, fordi LED-anoderne forbinder til port A og LED-katoderne forbindes til port B.

Bestem de hexadecimale koder, vi måtte sende til portene A og B for at aktivere LED'en i det yderste nederste venstre hjørne af 8 × 8 gitteret.

Port A =

Port B =

Reveal svar Skjul svar

Port A = $ FE

Port B = $ 80

Bemærkninger:

Spørgsmål 19

Undersøg følgende skematiske diagram og programoversigt (skrevet i "pseudokode" i stedet for et formelt programmeringssprog) for at bestemme hvilken type grundlæggende logikfunktion der implementeres i denne mikrocontroller enhed:

Erklære Pin0 som output

Erklære Pin1, Pin2 og Pin3 som input

LOOP

Hvis Pin1 er HIGH, skal du indstille Pin0 HIGH

ELSEIF Pin2 er HIGH, indstillet Pin0 HIGH

ELSEIF Pin3 er HIGH, indstillet Pin0 HIGH

Ellers indstilles Pin0 LOW

AFSLUT HVIS

EndLoop

Reveal svar Skjul svar

Denne mikrocontroller implementerer en 3-input logisk OR-funktion.

Bemærkninger:

Selvom denne logiske funktion kunne have været implementeret lettere og billigere i hard-wired (gate) logik, har formålet at få eleverne til at tænke på at udføre logiske operationer ved hjælp af en sekvenseret sæt instruktioner inde i en programmerbar enhed (MCU). Dette er et konceptmæssigt spring, grundlæggende men meget vigtigt.

Hvis du undrer dig over hvorfor jeg skriver i pseudokode, her er nogle få grunde:

Ingen tidligere erfaring med programmering er nødvendig for at forstå pseudokode
Det går aldrig ud af stil
Hardware uafhængig
Ingen syntaksfejl

Hvis jeg havde besluttet at fremvise kode, der rent faktisk ville løbe i en mikrocontroller, ville jeg gøre spørgsmålet til forældelse. På den måde kan jeg kommunikere programmets ånd uden at være kædet til en faktisk programmeringsstandard. Den eneste ulempe er, at eleverne bliver nødt til at oversætte min pseudokode til rigtig kode, der rent faktisk vil køre på deres specifikke MCU-hardware, men det er et garanteret problem for nogle uanset hvilket ægte programmeringssprog jeg ville vælge.

Selvfølgelig kunne jeg have taget Donald Knuth-tilgangen og opfundet mit eget (imaginære) hardware- og instruktionssæt. . .

Spørgsmål 20

En elev bygger et microcontroller kredsløb for at tænde en LED en gang for hver fem aktivering af indgangskontakten. Kredsløbet er simpelt, idet mikrocontrolleren bruger en betinget loop for at øge en variabel hver gang kontakten trykkes:

Erklære Pin0 som output

Erklære Pin1 som input

Erklær X som en heltalvariabel

LOOP

Mens Pin1 er HØJ

Tilføj 1 til X (X = X + 1)

ENDWHILE

Hvis X er lig med 5, skal du indstille Pin0 HIGH og indstille X til 0

Ellers indstilles Pin0 LOW

AFSLUT HVIS

EndLoop

Desværre udfører programmet ikke som planlagt. I stedet for at LED'en kommer på en gang hver fem omskifteraktioner, ser det ud til at komme tilfældigt, når kontakten slippes. Sommetider tænder lysdioden efter den første omskifteraktivering, mens andre gange tager det mere end fem skubber på kontakten for at få den til at tænde.

Efter lidt omhyggelig analyse forekommer det for den studerende, at problemet ligger i WHILE-sløjfen. Da mikrocontrolleren er meget hurtigere end den menneskelige hånd, udfører denne sløjfe mange gange, mens kontakten trykkes snarere end kun én gang, hvilket betyder, at variablen X tæller fra 0 til 5 mange gange rundt for hver omskifteraktivering. Det er kun tilfældigt, at X vil være lig med fem efter WHILE-loopudgangene.

Hvad den studerende har brug for er, at omskifteren kun skal øges med 1 for en overgangskoblingsovergang: ved indgangspulsens positive kant . Problemet er, hvordan man gør dette ved hjælp af programmering.

En anden elev valgte at løse det på denne måde, da det var det samme problem, og det fungerede fint:

Erklære Pin0 som output

Erklære Pin1 som input

Erklære Switch som en boolsk (0 eller 1) variabel

Erklære Last_Switch som en boolsk (0 eller 1) variabel

Erklær X som en heltalvariabel

LOOP

Sæt Last_Switch svarende til Switch

Sæt omskifter svarende til Pin1

IF Switch = 1 og Last_Switch = 0 Sæt derefter 1 til X (X = X + 1)

Ellers gør ikke noget til X

AFSLUT HVIS

Hvis X er lig med 5, skal du indstille Pin0 HIGH og indstille X til 0

Ellers indstilles Pin0 LOW

AFSLUT HVIS

EndLoop

Forklar, hvordan dette program med succes kun øger X kun ved hver enkelt omskiftning af trykknappen, mens det andet program intensiverer X hurtigt i hele den periode, hvor trykknappens omskifter trykkes.

Reveal svar Skjul svar

Nøglen til at forstå, hvordan denne algoritme virker, er at realisere variablen Last_Switch vil altid være en scanning (loop execution) bag variablen Switch.

Udfordringsspørgsmål: Det betyder noget, hvor i programmet går to linjer "Noter skjult"> Noter:

Denne pulsdetekteringsalgoritme bruges meget almindeligt i programmer, der beskæftiger sig med virkelige omskifterindgange. Det udfører i software, hvad pulsdetektionsnetværket gør inden for kant-udløsede flip-flops, til samme effekt: at indlede en slags handling kun ved kanten af ​​et pulsignal.

  • ← Forrige regneark

  • Regneark Indeks

  • Næste regneark →