ES1 Project 1: Microcontrollers



Vergelijkbare documenten
ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers

De Arduino-microcontroller in de motorvoertuigentechniek (4)

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8

Hand-out Introductieworkshop LED programmeren

Technology, Innovation & Society Delft

RCL Arduino Workshop 1

Hoofdstuk 5: Signaalverwerking

EM2 Microcontroller Project. LED cube

Logo quiz Project Inleiding op de Logo!

Handleiding HCS VB5248

Handleiding HCS VB5118

Arduino Workshop 1 Zuid-Limburg

AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke

Fig. 2. Fig ,5 4 3,5 3 2,5 2 1,5 U (V) 0, temperatuur ( C)

Programmeren met Arduino-software

Inhoudsopgave LED dobbelsteen

Fysische Informatica met FLEC

Handleiding HCS VB5224

Peripheral Interface Controllers. BRAC clubavond PE2WDO

De Arduino-microcontroller in de motorvoertuigentechniek (8)

Fig. 5.1: Blokschema van de 555

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4)

Arduino. Arduino UNO. Sam Decoster. CoderDojo Roeselare. Sam Decoster

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

Antwoorden vragen en opgaven Basismodule

Arduino. HCC Vlaanderen - Mechelen 7 februari Luc De Cock

Gebruiksaanwijzing GPIO interface voor BrightSign - HD players

Zelf PIC's programmeren. Deel-1 KnipperLED (flashing LED)

Logische functies. Negatie

In- en uitgangssignalen van microprocessoren

De Arduino-microcontroller in de motorvoertuigentechniek (3)

Raspberry Pi Interfacing.

FA23 Aansluitschema Onderdeel nr:

STROOMSENSOR BT21i Gebruikershandleiding

Programmering Tiny45 voor de DCC locdecoder

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

Oefeningen Interpretatie I Reeks 6 : Registermachines

Wat is Arduino? Arduino = microprocessor (Atmel)

Gebruiksaanwijzing GPIO interface voor BrightSign - HD players

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3)

ID-er/sequencer. Beschrijving. Pag 1/6

Oefeningen Digitale Elektronica (I), deel 4

VANTEK Discovery set. N. B. De OPITEC bouwpakketten zijn gericht op het onderwijs. N991240#1

1. Sluit de LED aan zoals afgebeeld 2. Sluit de USB-kabel aan op de Arduino 3. Klik op de knop uploaden 4. De LED begint te knipperen

Workshop Arduino - deel 2

Hoofdstuk 7. Computerarchitectuur

2 Elementaire bewerkingen

Sensoren Introductie Weerstandtechniek Brug van Wheatstone Basis Opamp schakelingen Opampschakelingen voor gevorderden

Werkbladen voor Arduino workshop 1

led 0 aan Opdracht: 1 Opdracht: 4

MODBUS remote I/O-unit type MODBUS4S110

Deel 2 S7 Graph Ont4 - GA3

Handleiding HCS VB5238

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR

Workshop Arduino Uno. Touw dag 6 juni 2015 Harold Pootjes en Simon Pauw

Zelf een hoogspanningsgenerator (9 kv gelijkspanning) bouwen

Microcontrollers. Bart Kardinaal E Verslag microcontrollers Rev 1.0 Status definitief.

Gebruikershandleiding. robotcar.nl

DIGITAL_AGC1 voor QCX software rev2

De Arduino-microcontroller in de motorvoertuigentechniek (2)

Positie-aflezing. - LED of LCD-aflezing - met geïntegreerde microprocessor. Walda Impuls b.v. Delta MS Arnhem Tel Fax

Gebruiksaanwijzing stroomprint JGA i. Inhoudsopgave

VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan Lokeren info@vti-lokeren.

CTCSS Encoder Super Flexibel Ontwerpen met een Arduino Nano

Een intelligent DMX netwerk

Schakelingen Hoofdstuk 6

Studentnummer:... Opleiding:...

UITWERKINGEN Examentraining (KeCo) SET-B HAVO5-Na

Informatica 2. Met uitwerkingen n.a.v. document van Elvire Theelen in Luc bijgewerkt door Peter van Diepen

Gebruiksaanwijzing CABLE TESTER CT100. Professional 6-in-1 Cable Tester

KAEDU : Outputs en inputs

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

Logische bit-instructies

Besturing van de Miniatuurwereld OC32. Apparaatdefinities (Generiek)

Gebruiksaanwijzing AVR910 USB Programmer

Inleiding elektronica Presentatie 1

STROOMSENSOR 0222I GEBRUIKERSHANDLEIDING

Mini Handleiding over Elektronica-onderdelen

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft

Logische schakelingen

Arduino CURSUS. door Willy - 09-juni-2017

Bouwbeschrijving UniSAI

PIC Callgever Door PA1RUM

Stroomprint JGA1009 gebruiksaanwijzing

Logische Schakelingen

Meervoudige Smart-Card Duplicator. Gebruiksaanwijzing

2 Elementaire bewerkingen

SI-Profinet. Unidrive M200-M400 en Siemens S PLC (TIA portal)

Antwoorden Systeembord Fysische informatica voor de onderbouw havo/vwo

Handleiding software USB PIC DEV. BOARD

Voorwoord / veiligheidsaanwijzing 3. Sein decoder voor DCC systemen 4. Aansluitingen overzicht van de decoder 4. Aansluiten van de decoder 5

Opdracht week 4 INLDIG 1

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Programmeer-handleiding Easyboard MB

Stappenmotor Interface. Controller

Over Betuwe College. Lego Mindstorm project

Transcriptie:

ES1 Project 1: Microcontrollers Les 3: Eenvoudige externe hardware & hardware programmeren in C Hardware programmeren in C Inmiddels ben je al aardig op gang gekomen met het programmeren van microcontrollers. Microcontrollers vragen echter om specifieke programmeerkennis. Je moet namelijk gebruik maken van de aanwezige hardware. Tijdens deze les leer je hoe dat gaat in de programmeertaal C. Maar we beginnen met de manier waarop je eenvoudige hardware kunt aansluiten op de microcontroller. Externe hardware Voordat we zinvolle informatie van/naar PORTB kunnen lezen/schrijven, moet er hardware gekoppeld worden aan de microcontroller. In de meest eenvoudige vorm zijn dat LED s en switches. LED s Light Emitting Diodes zijn elektrische componenten die licht uitzenden zodra er een stroom in de juiste richting doorheen kan. Een manier om een LED aan te sluiten op een microcontroller staat hiernaast weergegeven. De LED zal aan gaan zodra de logisch 0 gemaakt wordt. Microcontroller +5V Hierbij spreken van sinken aangezien de stroom de microcontroller in loopt. Resistor NB. Op een soortgelijke manier zijn de LED s op de STK500 ook aangesloten. Een LED kan pas werken als daar een drempelspanning overheen staat. Een waarde voor deze drempelspanning is bijvoorbeeld 0,7 V. In de datasheet van de LED vind je de exacte specificatie. Tevens vind je in de datasheet hoeveel stroom er maximaal door de LED mag lopen. Hoe meer stroom, des te meer licht. Stel dat in de datasheet van een LED de volgende gegevens te vinden zijn: In de datasheet van de microcontroller zoeken we op hoe groot de spanning is als er een logische 0 op de uitgang staat. Dit vind je in de tabel met Electrical Characteristics. Hierin vinden we: Met deze gegevens kunnen we de waarde van de weerstand uitrekenen. Ga als volgt te werk: Over de weerstand staat een spanning van: Met de wet van Ohm berekenen we nu de weerstand, aangezien de spanning bekend is (3,6 V) en 1

tevens de gewenste stroom bekend is (15 ma). Bereken de waarde van de weerstand: NB. Let op met de hoeveelheid stroom die je sinked of sourced met een microcontroller. In de Electrical Characteristics vind je hoeveel stroom een enkele maximaal kan dissiperen en ook hoeveel een complete I/O port tegelijk aan stroom kan dissiperen. Switches Een eenvoudige manier om een signaal van buiten de microcontroller in te lezen gaat met switches. Een manier om een switch aan te sluiten op een microcontroller staat hiernaast weergegeven. Zodra de switch ingedrukt wordt heeft de de waarde van een logische 0. Microcontroller +5V De weerstand wordt een pull-up weerstand genoemd. Deze voorkomt dat de gaat zweven als de switch niet ingedrukt is. Pullup Resistor NB. Op een soortgelijke manier zijn de switches op de STK500 ook aangesloten. Switch De stroom die de in gaat hoeft niet groot te zijn. Het spanningsniveau op de I/O pin zorgt er namelijk voor dat er een logische 1 wordt gelezen (zodra de schakelaar niet ingedrukt is). Een waarde die veelvuldig toegepast wordt is: Hierdoor wordt de maximale stroom die de moet dissiperen: Het kan ook anders. In de microcontroller zit namelijk ook internal pull-up weerstand aan iedere I/O port. Hiernaast staat dat schematisch weergegeven. Microcontroller +5V Opdracht: zoek in de datasheet op hoe je deze internal pull-up resistor aan kunt zetten. Internal Pulllup Resistor Enable Zoek tevens op wat de waarde van deze weerstand is. Switch Een compleet overzicht van de werking van de I/O ports is te vinden in de datasheet. Bekijk bijvoorbeeld de figuren I/O Pin Equivalent Schematic en General Digital I/O. Tot slot nog een opmerking over het gebruik van switches. Switches hebben de eigenschap te 'denderen'. Dit betekent dat de contactveer bij het indrukken (en loslaten) van de schakelaar even heen en weer kan veren, zodat er eigenlijk een serie 1-en en 0-en achter elkaar verschijnt in plaats van één enkele 1-0 of 0-1 overgang. Dit verschijnsel kan enkele tientallen ms duren. Door de waarde van de ingang waaraan de schakelaar zit, een aantal keren achter elkaar te testen (b.v. met tussentijden van 30 ms), kan dit denderprobleem softwarematig worden omzeild. 2

I/O en de microcontroller Een microcontroller is opgebouwd uit verschillende functionele bouwstenen. Kijken we naar het Blok Diagram in de datasheet van ATmega32A dan zien we bijvoorbeeld: Central Processing Unit (CPU) PORTn drivers/buffers en PORTn digital interfaces USART SPI EEPROM Oscillator En nog veel meer! Deze bouwstenen zijn met elkaar verbonden via de databus. Elke bouwsteen heeft één of meerder registers aan deze databus. Om te voorkomen dat alle register tegelijk met de databus verbonden zijn kunnen de registers via een vast adres geadresseerd worden. We hebben reeds gezien dat er aan bijvoorbeeld de digital interface PORTB drie registers gekoppeld zijn. Te weten PORTB, DDRB en PINB. I/O programmeren Met deze kennis gaan we het project HelloWorld herschrijven en bekijken hoe de I/O slimmer geprogrammeerd kan worden. Open het project HelloWorld in AVR Studio. Om te beginnen worden er een aantal header files ge-include. Dat is nodig, zodat de compiler weet waar de externe definities en functies gevonden kunnen worden. In de main routine wordt eerst de richting van PB0 geset in DDRB. Het nadeel van deze manier van programmeren is dat op deze manier alle andere bits (PB1 t/m PB7) dus input worden gemaakt! Daar gaan we stapsgewijs een oplossing voor vinden. Het doel is dat slechts één bit van ee register geset kan worden, zonder dat daarbij de andere bits aangepast worden. De oplossing is vrij eenvoudig: door de OR operator toe te passen. Or operator Voorbeeld 2 3 Het getal links van de operator (2) wordt bitwijs ge-or-ed met het getal rechts van de operator (3). Or-en we 2 met 3 dan krijgen we 3 (0b00000010) Dezelfde instructie kunnen we ook in een verkorte notatie opschrijven. 3

DDRB wordt dus ge-or-ed met 0x01 en het resultaat staat in DDRB. In deze regel code wordt 0x01 het masker genoemd. Overal waar in het masker een één staat komt in het resultaat een één, overal waar in het masker een nul staat blijft het resultaat zoals het was! Vaak wordt deze regel code echter nog iets ander geschreven. Als we namelijk PB0 willen aanpassen, dan ligt het voor de hand een #define te gebruiken, zodat de code beter leesbaar is. Deze instructie geeft hetzelfde resultaat, maar we zien direct dat PB0 aangepast wordt. Om de code te begrijpen tussen de haakjes, moet je weten hoe de shift operator werkt. Shift operator << Voorbeeld 1 << 3 Het getal links van de operator (1) wordt het getal rechts van de operator (3) keer naar links geschoven. Schuiven we 1 drie keer naar links dan krijgen we 8 (0b00000001) (0b00001000) In HelloWorld.c wordt het getal 1 dus PB0 keer naar links geschoven. Aangezien PB0 gedefinieerd is als 0, is de uitkomst dus 0x01 (en dit hadden we eerder zelf ingevuld). Opdracht: In welke file wordt PB0 gedefinieerd? En hoe worden PB1 t/m PB7 gedefinieerd? We kijken verder naar de rest van het programma. Hier wordt dezelfde methode gebruikt om alléén PB0 van PORTB te setten. Daarna volgt een functie call om een delay te realiseren van 500 ms. In de volgende instructie worden twee nieuwe operatoren geïntroduceerd. Eerst bekijken we de and operator. And operator & Voorbeeld 2 & 3 Het getal links van de operator (2) wordt bitwijs ge-and-ed met het getal rechts van de operator (3). And-en we 2 met 3 dan krijgen we 2 (0b00000010) (0b00000010) 4

Ook wordt de inverse operator toegepast. Inverse operator ~ Voorbeeld ~(3) Het getal (3) achter de operator wordt bitwijs geïnverteerd. Inverteren we 3 dan krijgen we 252 (0b11111100) Het resultaat van deze instructie is dus dat alléén PB0 van register PORTB gereset wordt. De rest (PB1 t/m PB7) blijft ongewijzigd. Een in dit programma nog niet toegepaste operator is de exclusive or. Hiermee kunnen we individuele bits inverteren. Dat kan handig zijn om bijvoorbeeld een LED te laten knipperen. Overal waar een één in het masker staat zal het corresponderende bit geïnverteerd worden, de rest blijft gelijk. Exor operator ^ Voorbeeld 20 ^ 6 Het getal links van de operator (20) wordt bitwijs ge-exor-ed met het getal rechts van de operator (6). Xor-en we 20 met 6 dan krijgen we 18 (0b00010100) (0b00000110) (0b00010010) Daarmee kunnen we het programma herschrijven tot: Conclusie: Met deze manier van programmeren kunnen we met behulp van een leesbaar masker individuele bits in registers setten, resetten en inverteren. 5

Opdracht 1 Start in AVR Studio een nieuw project met de naam AtoB. Verbind op de STK500 PORTA met de schakelaars en op PORTB de LED s Realiseer de volgende functies: Alle pinnen van PORTB worden gedefinieerd als output. De volgende nen van PORTA worden gedefinieerd als input: PA0, PA1, PA2 en PA3. LED0 gaat aan zodra SW0, SW1, SW2 of SW3 ingedrukt wordt. LED1 gaat aan zodra SW0, SW1, SW2 en SW3 ingedrukt wordt. LED2 doet het geinverteerde van SW2. LED3 gaat aan zodra op de switches SW0, SW1, SW2 en SW3 het getal 6 ingedrukt wordt. LED4 gaat aan zodra er géén andere LED s aan zijn. TIP. Controleren of een schakelaar ingedrukt is (bijvoorbeeld SW2), kan met de volgende code (bedenk dat je een logische nul leest zodra een schakelaar op de STK500 ingedrukt is). Een alternatieve manier is door een masker te gebruiken, waardoor alle andere switches genegeerd worden! Ga voor jezelf na hoe deze regel code werkt. // SW2 pressed? if(pina == 0b11111011) { } // SW2 pressed? if((pina & (1<<PA2)) == 0) { } Opdracht 2 Geef antwoord op de volgende theorievragen. Hardware (zie eerste figuur op pagina 1) 1. Stel dat de doorlaatspanning van de LED 1,8 V bedraagt en de uitgangsspanning van de microcontroller 0,2 V. Hoe groot moet de weerstand zijn als er door de LED een stroom moet lopen van 10 ma? 2. Bereken de maximale en de minimale stroom in de LED als deze licht geeft, rekening houdend met de spreiding van de componenten. Ga ervan uit dat de voedingsspanning (ook die van de microcontroller) 5 V 5% bedraagt. De weerstand heeft een waarde van 680 Ohm 2%. De LED heeft een doorlaatspanning van 0,7 V. Raadpleeg de datasheet van de microcontroller (electrical characteristics). Software 1. Laat zien dat de instructie PORTB = PORTB & ~0x80 alleen bit 7 van PORTB reset. Neem hierbij aan dat PORTB = 0xC3. 2. Laat zien dat de instructie PORTB = 0x80 alleen bit 7 van PORTB set. Neem hierbij aan dat PORTB = 0x5A. 3. Laat zien dat de instructie PORTB ^= 0x01 alleen bit 0 van PORTB inverteert. Neem hierbij aan dat PORTB = 0xC3, resp. 0x5A. Tijd over Vul opdracht 1 aan door de volgende extra functies te implementeren: Alle I/O ports van PORTA worden gedefinieerd als input. 6

LED5 gaat aan zodra er een oneven aantal switches worden ingedrukt. LED6 inverteert van waarde zodra SW6 ingedrukt en weer losgelaten wordt. LED7 knippert met een frequentie van ongeveer 2 Hz. In deze onderwijspublicatie is géén auteursrechtelijk beschermd werk opgenomen. 7