Oefening embedded 1: deus in machina
Doel
Lees sensoren met een microcontroller.
Opdracht
Stuur de RGB LED aan. Lees de temperatuur uit.
mbed blinky
- Maak een account aan op os.mbed.com.
- Meld aan en klik op compiler.
Klik rechtsboven en selecteer FRDM-K64F als platform.
Figuur 1: Overzicht van de compiler voor mbed. Selecteer het platform FRDM-K64F.
Figuur 2: Selecteer FRDM-K64F.
Maak een nieuw programma. Selecteer het template mbed OS Blinky LED HelloWorld.
Figuur 3: Maak een nieuw programma gebaseerd op een template.
Open main.cpp. Klik op Compile. Download het .bin bestand.
Verbind de SDA USB connector van het bordje met de pc. Dit is de microUSB connector links van de Ethernet connector, zie rode pijl op figuur 4. Het bordje verschijnt als de FRDM-K64FD USB flash drive.
Figuur 4: Rode pijl: positie SDA USB connector, status led en reset knop. Groene pijl: positie van RGB LED.
Kopieer het .bin bestand naar de FRDM-K64FD flash drive. De status led gaat aan en uit en uiteindelijk licht de RGB led rood op en gaat vervolgens uit en aan.
Het bestand main.cpp bevat C++ code. De syntax en concepten lijken sterk op Java. Bijvoorbeeld:
#include "mbed.h" DigitalOut rood(LED1); // main() runs in its own thread in the OS int main() { while (true) { rood = !rood; wait(0.5); } }
#include
laadt de mbed.h bibliotheek.- DigitalOut is een klasse en duidt het type aan van het object rood, waarvan de constructor wordt aangeroepen met de parameter LED1. LED1 is een voorgedefinieerd object van het type PinName, die 1 van de pins op de microcontroller aanduid. Bij component pinout is een overzicht van alle beschikbare pins op de microcontroller terug te vinden.
- De functie main wordt bij het opstarten van de microcontroller aangeroepen.
- Door int waardes toe te kennen aan het DigitalOut object verandert de toestand van de pin.
- De wait functie stopt de microcontroller voor een aantal seconden.
Vraag 1
Wat is het gedrag van de volgende code? DigitalOut led(PTB21); led = 0; wait(1); led = 1; wait(5);
RGB led
- Een RGB led bestaat uit 3 leds, respectievelijk rood, groen en blauw. Door deze gelijktijdig in te schakelen is het mogelijk om andere kleuren te maken. Maak 1 of meerdere functies om alle verschillende kleuren met een RGB led weer te geven.
Geef alle kleuren van de RGB led achtereenvolgens weer.
Vraag 2
Welke kleur wordt met de volgende code gemaakt? DigitalOut x(LED1); DigitalOut y(LED2); DigitalOut z(LED3); x = 0; y = 0; z = 1;
Seriële communicatie
Verstuur een boodschap over de seriële poort naar de pc. Deze communicatie wordt o.a. gebruikt om debug informatie te versturen.
Maak een Serial object. Geef de twee parameters USBTX, USBRX mee.
Serial pc(USBTX, USBRX);
Roep de printf methode aan.
pc.printf("This conversation can serve no purpose any more. Goodbye.");
Ontvang en lees de boodschap op de pc.
- Download een terminal programma, bvb. Putty.
- Zoek de COM poort van de mbed Serial Port. Dit staat aangegeven in apparaatbeheer (device manager voor een Engelstalige Windows)
Figuur 5: Groene pijl duidt de COM poort aan van de mbed Serial Port.
- Tip: indien de mbed serial port niet terug te vinden is, installeer dan de Windows serial driver. Dit is nodig voor Windows versies ouder dan 10.
Start Putty. Selecteer Serial. Vul de COM poort in. De snelheid (baud rate) is standaard 9600. Klik op open.
Figuur 6: Seriële configuratie van Putty.
LCD display
- Schrijf tekst naar het LCD display.
Voor alle componenten op het mbed application shield zijn bibliotheken voorzien, indien de klassen niet voorzien zijn in de standaard mbed bibliotheek. Klik op import library. Selecteer voor het Target Path het programma waarin de bibliotheek geïmporteerd moet worden.
Figuur 7: Import Library. Selecteer het programma voor het Target Path.
- Voorzie een include van de bibliotheek:
#include "C12832.h"
- Maak een lcd object. Kijk in de file C12832.h welke parameters bij de constructor verwacht worden. Bij de beschrijving van het application shield zijn de overeenstemmende PinNames terug te vinden.
- Roep de methode
lcd.cls()
aan om alle tekst te wissen van het LCD display. - Roep de methode
lcd.locate(0,3)
aan om de cursor op de gegeven positie van het LCD display te plaatsen. - Roep de methode printf aan op het lcd object om tekst weer te geven.
Temperatuur sensor
- Geef de temperatuur weer op het LCD display.
- Importeer de bibliotheek LM75B. Voorzie een
#include
. - Maak een sensor object
LM75B sensor(D14,D15);
en geef de pins D14 en D15 op. - Roep de methode
sensor.read()
aan om de temperatuur te lezen. - Met de printf methode is het mogelijk om de tekst samen te stellen aan de hand van format specifiers.
Versnellingsmeter
- Toon de x,y en z versnelling op het LCD display a.d.h.v. een 3-assen versnellingsmeter.
- Importeer de MMA7660 bibliotheek. Voorzie een
#include
. - Maak een MMA7660 object en geef de pins D14 en D15 op.
Roep de methodes aan om de x, y en z versnelling uit te lezen en toon die op het LCD display onder de temperatuur.
Vraag 3
Wat is de oriëntatie van de 3 assen van de versnellingsmeter?
Extra
- Op het application shield is een potentiometer voorzien. Lees de waarde van de potentiometer en gebruik die om de RGB led van kleur te laten veranderen.