Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368
Handleiding bij het gebruik van een microcontroller in het Accelerometerproject (Project II) Er zijn speciaal voor het Accelerometerproject een aantal microcontroller printjes gemaakt waarmee op redelijk eenvoudige wijze het uitgangssignaal van de gebouwde accelerometer verwerkt kan worden.
De printjes Figuur 1 toont foto’s van het microcontroller printje en een hierop aan te sluiten LCD display en Data Aquisitie printje. Op het Data-Aquisitie printje zitten een tweekanaals ADC (Analoog-Digitaal-Converter) en een tweekanaals DAC (Digitaal-AnaloogConverter). Al deze printjes zijn te verkrijgen (in bruikleen) bij Theo Lammerink (kamer C1409, e-mail:
[email protected]). Na afloop van het project moeten de printjes weer worden ingeleverd.
Figuur 1: Links: Het microcontroller printje. Rechts: De microcontroller met een LCD interface en een Data-Aquisitie printje.
Voor het aansluiten van de microcontroller op de PC is nog een ander klein opzet-printje nodig. Dit printje bevat de USB interface en dient tevens om uit de USB aansluiting de voedingsspanning (5 V) af te tappen. Figuur 2, links toont een foto met de voor en achterkant van dit opsteekprintje. Er is dankzij deze USB aansluiting dus geen aparte voeding nodig voor het microcontroller systeem. Indien gewenst kan dat natuurlijk wel, maar overleg dan even met Theo om te voorkomen dat er kortsluiting ontstaat.
Figuur 2: Opzet-printje met USB interface. Links: Mini-B type USB connector met de RUN-PRG schakelaar (‘run’ stand voor eventuele communicatie met je PC en ‘prg’ stand voor het programmeren van de microcontroller). Rechts: De USB-interface chip en de 500mA zekering die je PC behoedt voor een te grote stroom op de USB-poort. Een werkend systeem met daarin een voorbeeldprogramma is in weergegeven in figuur 3. Daar staan ook de aansluitgegevens voor het Data-aquisitie printje.
Figuur 3:
Boven: Foto van een draaiend “Analog-input” programma (zie ook Figuur 8). Rechts: Schema DAQ-print aansluitingen.
De benodigde software De microcontrollers kunnen geprogrammeerd worden in de programmeertaal C. Om jullie een snelle start te geven heeft Theo al een paar voorbeeldprogrammatjes gemaakt. Het programmeren kan met iedere PC met Windows XP en een USB aansluiting. Wel moet de drivers voor de USB interface en het programma ESyIDE (Embedded Systems Integrated Development Environment) geïnstalleerd worden. Voor communicatie tussen de microcontroller en de PC (bijvoorbeeld data verwerken in MatLab) is nog een ander programmatje nodig: ESyDDE.
1) De drivers voor de USB naar COM converter De USB interface is nodig voor communicatie tussen de microcontroller en de PC. De USB interface maakt op de PC twee nieuwe COM poorten beschikbaar. Vaak zullen dit COM3 en COM4 zijn, maar als bijvoorbeeld COM3 al door een modem gebruikt wordt kunnen dit ook COM4 en COM5 zijn. De poort met het laagste nummer wordt gebruikt om de microcontroller te programmeren. Dit poortnummer moet je dus instellen in ESyIDE als je een nieuw programma wilt uploaden in de controller. De poort met het hoogste nummer kan gebruikt worden voor communicatie tussen de microcontroller en de PC als jullie programma in werking is (bijvoorbeeld om gemeten signalen in MatLab te verwerken). De drivers voor de USB interface worden automatisch gedownload en geinstalleerd door Windows XP op het moment dat de USB kabel voor de eerste keer aangesloten wordt. Gewoon de aanwijzingen op het scherm opvolgen en geduld hebben. In de meeste gevallen zal de installatieprocedure 2 maal doorlopen worden: een keer voor ieder van de 2 COM poorten.
2) ESyIDE Het programma ESyIDE is een geïntegreerde programmeeromgeving (IDE – Integrated Development Environment) voor de gebruikte microcontroller. D.w.z. dat alle benodigde gereedschappen geïntegreerd zijn in een enkel pakket. Op Blackboard is een installatieprogramma te downloaden ESyIDEsetup.exe, waarmee ESyIDE compleet met alle voorbeeldprogrammatjes geinstalleerd wordt. Vervolgens kan ESyIDE vanuit het Start menu gestart worden.
3) ESyDDE server van Theo De ESyDDE server van Theo Lammerink is nodig voor de communicatie tussen de PC en het microcontroller printje. Ook dit programma kan gedownload worden van de Blackboard site. Installatie is niet nodig. Dubbelklikken op ESyDDEServer.exe start de server. De ESyDDE server wordt alleen geinstalleerd als de communicatie ook echt gebruikt gaat worden.
Voorbeelden Theo heeft 5 voorbeeldprogrammatjes gemaakt om jullie op weg te helpen.
1) “Hello World” Het meest eenvoudige voorbeeld is het programma “Hello World”. Dit programma toont de tekst “Hello World” op het LCD display. Figuur 5 toont de source code van het programma. Het hoofdprogramma main() bestaat uit slechts 3 regels. In de eerste 2 regels worden een aantal initialisatieroutines uitgevoerd. Deze 2 regels zijn voor ieder programma gelijk. Alleen de 3e regel is nodig om de regel tekst op het LCD scherm te krijgen. #include "sys.c"
// Embedded-System software module
unsigned int i,j; int main(void) { Sys_Init(); Lcd_Init(); Lcd_Str(1,1,"1 Hello World");
// // // //
This is the main-program Embedded System initialization LCD-initialization (-LCD- attached or not) Goto position x,y = 1,1: show specified string
}
// End of program
Figuur 5: Het programma “Hello world”
Om het programma in de microcontroller te krijgen moet het eerst omgezet worden in instructies waar de microcontroller wat mee kan. ESyIDE gebruikt hiervoor de gratis GNU compiler (zie bijvoorbeeld: http://www.gnuarm.com/). Allereerst moeten we nu ESyIDE starten. Dat kan via het Start-menu of door te dubbelklikken op een .esy file. In het laatste geval wordt meteen het project met de bijbehorende files geopend. Figuur 5 toont het ESyIDE window. Met de knoppen ‘New project...’ en ‘Open project...’ kan een nieuw project gemaakt worden of kan een bestaand project geopend worden. Voor het “Hello world” voorbeeld gebruiken we ‘Open project...’ en selecteren we de file ‘Hello world.esy’.
Als eerste test brengen we een kleine verandering in het programma aan. We wijzigen de tekst Lcd_Str(1,1,"1 Hello world") in Lcd_Str(1,1,"Accelerometer project"). Nu moeten we achtereenvolgens de volgende stappen uitvoeren om het nieuwe programma in de microcontroller te krijgen: 1. We moeten het programma vertalen in microcontroller instructies. Dit is eenvoudig: we selecteren gewoon het commando Save all and build HEX file. ESyIDE maakt hierop een file met de extensie .hex, welke we vervolgens in de microcontroller kunnen zetten.
2. We moeten de hex file uploaden naar de microcontroller (als er in stap 1 geen fouten opgetreden zijn). Hiervoor gebruiken we het commando Upload to target. Wel moeten we eerst nog de juiste COM poort selecteren in de drop-down list onder het commando. Meestal is dit COM3. Als we Upload to target selecteren verschijnt er als het goed is een commando window in beeld waarin we het upload process kunnen volgen. Dit kan enige tijd duren, afhankelijk van de grootte van de HEX file. Als het goed is verdwijnt het commando window vanzelf en verschijnt nu de tekst “Accelerometer project” op de display van de microcontroller.
Figuur 6: Het ESyIDE window met het project “Hello world”.
2) “Heart beat” Het eerste voorbeeld was erg eenvoudig, maar doet ook niet veel. Nadat de tekst op het display gezet is houdt het programma ermee op en gebeurt er verder niks meer. In het algemeen is dat niet wat we willen. We willen juist dat de microcontroller ‘reageert’ op zijn omgeving en bijvoorbeeld periodiek een bepaalde actie uitvoert. Om dat te bereiken moeten we in het programma een oneindige lus opnemen die continue doorlopen wordt. Dat is wat er gebeurt in het tweede voorbeeld. De source code hiervan is te vinden in Figuur 7. Het eerste stuk van het programma is gelijk gebleven. Er is alleen een while-lus toegevoegd (de waarde 1 betekent ‘true’, oftewel de lus stopt nooit) plus een paar regels om iedere 0.5 seconden het “heartbeat” karaker op het display aan en uit te schakelen. Als je goed kijkt zijn er twee manieren om de lus te doorlopen. In het tweede deel van dit voorbeeld 2 is een betere manier aangegeven om een bepaalde actie in een tijdinterval te doen. Je kunt deze manier activeren door het argument in de eerste while-lus gelijk te maken aan ‘0’ (= False) en door die in de tweede while-lus gelijk te maken aan ‘1’(=True).
Figuur 7: Het programma “Heart beat”.
3)“Analog Input” In voorbeeld 3 wordt het programma weer een stukje uitgebreid. Nu worden een paar regels toegevoegd om iedere 100 milliseconden kanaal 0 van de ingebouwde analoog naar digitaal omzetter uit te lezen. De waarde wordt vervolgens op het LCD scherm getoond. De source code is te vinden in Figuur 8 en spreekt verder voor zich.
Figuur 8: Het programma “Analog input”.
4) “Analog input bargraph” In voorbeeld 4 wordt het programma uitgebreid met een thermometer-schaal. Iedere 100 milliseconden wordt kanaal A van de ingebouwde analoog naar digitaal omzetter uitgelezen. De waarde wordt vervolgens op het LCD scherm getoond via een thermometerschaal (regel 24 initializatie van thermometerschaal; regel 38 de functie voor de presentatie). De source code is te vinden in Figuur 9 en spreekt verder voor zich.
Figuur 9: Het programma “Analog input bargraph”.
5) “Analog out” Zonder verder commentaar in figuur 10.
Figuur 9: Het programma “Analog output”.
6) “Je eigen accelerometer programma” Veel succes.
Tenslotte nog dit: heb je vragen ga naar Theo!