J 2B
J2B: Universele HMI-module met ARM Cortex-M3 U hoeft nooit meer opnieuw het wiel uit te vinden! Clemens Valens (redactie F)
Als we schakelingen met microcontrollers wat nauwkeuriger bekijken, valt op dat in 75% van de gevallen het basisschema vrijwel hetzelfde is: een microcontroller, een LCD-module en een paar druktoetsen. In Elektor zijn al veel van dit soort schakelingen gepubliceerd. In dit artikel slaan we een andere, meer universele weg in, waarmee het mogelijk wordt om gebruik te maken van verschillende typen LCD’s en een variabel aantal toetsen. En dankzij de nieuwste ARM Cortex-M3 processor LPC1343 is dit board zeer krachtig en ongelooflijk eenvoudig in het gebruik.
Displays die regelmatig in hobbyprojecten voorkomen, hebben vaak twee regels van 16 karakters (2 x 16) of 4 regels van 20 karakters (4 x 20). Het aantal toetsen komt zelden boven de vier, maar er worden ook steeds vaker draai-encoders gebruikt. Bij schakelingen met een 2 x 16 LCD vinden we de toetsen vaak onder het display, bij de 4 x 20 versie worden ze meestal aan de zijkant gemonteerd. De plaats van de toetsen hangt af van de applicatie en van de gebruiker; een rechtshandige gebruiker heeft de neiging om ze op een andere plek te zetten dan een linkshandige. Een universele oplossing moet met al deze zaken rekening houden en een vrije keuze van LCD en plaatsing van de toetsen mogelijk maken. 22
Hoewel de auteur het idee voor deze schakeling al een aantal jaren geleden kreeg, is hij pas onlangs aan de realisatie ervan begonnen, toen er voor de zoveelste keer een HMI (Human Machine Interface) moest worden toegevoegd aan een schakeling met te weinig I/O-poorten en er dus behoefte was aan een poortuitbreiding. Met de introductie van de 32-bits ARM Cortex-M3 en -M0 microcontrollers van NXP is hiervoor een slimme en goedkope oplossing beschikbaar. Voor de hobbyist is met name de LPC1343 interessant, want deze is het makkelijkst te programmeren. Er is geen programmer nodig en ook geen RS232/ USB-adapter, want deze microcontroller gedraagt zich simpelweg als een USB-stick
waar je het programma naar toe kopieert. (Dit werkt overigens alleen onder Windows; voor Linux of MAC OS is wel een seriële verbinding of een speciale programmer nodig.) Met een microcontroller als poortuitbreiding hebt u de beschikking over USB-, I²Cen SPI-poorten of een UART om met de applicatie te communiceren. Als u bedenkt dat bij het merendeel van de applicaties de besturing van het display en het toetsenbord al gauw 80% van het programma in beslag neemt, is het ook denkbaar om de hele applicatie door de microcontroller uit te laten voeren, vooral als u hiermee over de rekenkracht van een 32-bits processor beschikt. Dus, in plaats van een poortuitbreiding aan de applicatie toe te voegen 10-2011
elektor
J 2B
0.9V - 4.5V
LiPo Charger
+3V3 LDO
+5V Boost +5V
wordt de applicatie aan een poortuitbreiding toegevoegd. Omdat de microcontroller alleen in SMDbehuizing wordt geleverd, werd besloten om alleen SMD’s te gebruiken (met uitzondering van connectoren en druktoetsen). Dit maakte het mogelijk om op het relatief kleine en met connectoren bezaaide oppervlak ook andere functies onder te brengen, zoals een accu- of batterijvoeding en een LiPo-acculader. Hiermee is het board ook geschikt voor mobiele toepassingen. De afmetingen van het board zijn zodanig gekozen dat voor een nette en stevige afwerking een goedkope standaard behuizing kan worden gebruikt.
LCD
Buzzer
elektor
10-2011
LPC1343
LPC Link
LED
max. 6 x 5
I 2C
SPI PWM
UART ADC
USB GPIO
110274 - 12
Figuur 1. Het blokschema van het J2B-board.
Specificaties Geschikt voor LCD-modules 2 x 16, 4 x 16 en 4 X 20 met standaard 14- of 16-pens connector (backlight), backlight softwarematig te bedienen; Matrixtoetsenbord 5 x 6, voor maximaal 12 druktoetsen, 9 draai-encoders met geïntegreerde druktoets (overeenkomend met 27 druktoetsen!) of een gemengde configuratie; Buzzer; LED; Voeding via USB, 5 V extern, batterij (0,9 V tot 4,5 V) of Lipo-accu; Spanningsregelaars 5 V en 3,3 V, software-matig in of uit te schakelen; Lader voor Lipo-accu, met softwarematige controle van het laadniveau; 32-bits microcontroller LPC1343 met 48 aansluitingen, 32 KB flash-geheugen, 8 KB RAM en veel randapparatuur zoals USB, I²C, SPI, PWM, UART en een aantal counters; Compatibel met de gratis ontwikkelomgevingen LPCXpresso [2, 3, 4] en CooCox [7]; Compatibel met de programmers/ debuggers LPC-Link en CooCox; Uitbreidingsconnectoren: bijna alle aansluitingen van de microcontroller zijn beschikbaar via een connector of soldeervlak; Deelbaar! Sommige niet gebruikte gedeelten kunnen worden afgezaagd; afsplitsbaar mini-toetsenbord met maximaal 4 toetsen of 3 draaibare encoders;
2 x 16 4 x 20
Afmetingen compatibel met behuizing nr. 26160000 van Bopla; Open-source hard- en software.
Werking Microcontroller We beginnen met het brein van het board, de microcontroller. Om deze te kunnen laten werken is een oscillator nodig en we hebben hierbij de keus uit drie mogelijkheden: interne RC-oscillator (IRC), externe oscillator of externe klok (van deze laatste maken we geen gebruik). De microcontroller start op zijn interne klok. Voor toepassingen die een nauwkeuriger klok vereisen, bestaat de mogelijkheid om een kristal toe
te voegen. In de datasheet van de microcontroller worden voor C14 en C15, afhankelijk van het gebruikte kristal, waarden van 18 pF of 39 pF aanbevolen. De meeste kristallen zullen met deze waarden goed werken. Na een reset wordt de startmodus van de microprocessor bepaald door de logische niveaus op PIO0.1 en PIO0.3. Als PIO0.1 ‘laag’ is, wordt eerst de bootloader in ISPmodus gestart; zoniet, dan wordt het gebruikersprogramma gestart. De LPC1343 kent twee ISP-modi: als USB-stick (PIO0.3 ‘hoog’) en als seriële poort (PIO0.3 ‘laag’). Met R3 en R13 wordt de ISP-modus gekozen. De functie van R3 wordt in principe ook vervuld door het USB-spanningsdetectiecir-
23
J 2B
+5V
+3V3 R30 1k
C11
100n
100u 16V
100n
10n
10n
100n
V+
3
R48
2
8
1u 6V3
TP1
PIO0_1/CLKOUT/CT32B0_MAT2/USB_FTOGGLE
+3V3
R26 1M
4
P0.6/USB_CONNECT
T4
+5V
ZXM61P03F
K4
R2 1k5
Mini USB-B 1 3
2
P2.1/KB_C1
13
P2.2/KB_C2
26
P2.3/KB_C3
38
P2.4/KB_C4
18
P2.5/KB_C5
21
P2.6/LCD_RS
1
P2.7/LCD_R/W
11
P2.8/BUZZER
12
P2.9/LCD_BL
24
P2.10/LCD_PWR 25 P2.11/LCD_E
31 19 20
33R
4
PIO0_2/SSEL0/CT16B0_CAP0 PIO2_0/DTR PIO2_1/DSR
C28
C29
18p
18p
36
P3.1/LCD_D5
37
P3.2/LCD_D6
43
P3.3/LCD_D7
48
PIO0_4/SCL
PIO2_2/DCD
PIO0_5/SDA
PIO2_3/RI
PIO0_6/USB_CONNECT/SCK PIO0_7/CTS
PIO2_4 PIO2_5
PIO0_8/MISO/CT16B0_MAT0
PIO2_6
PIO0_9/MOS1/CT16B0_MAT1/SWO
PIO2_7
SWCLK/PIO0_10/SCKCT16BO_MAT2
PIO2_8
R/PIO_11/AD0/CT32B0_MAT3
LPC1343
PIO2_9 PIO2_10
R/PIO1_0/AD1/CT32B1_CAP0
PIO2_11/SCK
R/PIO1_1/AD2/CT32B1_MAT0 R/PIO1_2/AD3/CT32B1_MAT1
USB_DM
SWDIO/PIO1_3/AD4/CT32B1_MAT2
USB_DP
PIO1_4/AD5/CT32B1_MAT3/WAKEUP PIO1_5/RTS/CT32B0_CAP0
PIO3_0
PIO1_6/RXD/CT32B0_MAT0
PIO3_1
PIO1_7/TXD/CT32B0_MAT1
PIO3_2
PIO1_8/CT16B1_CAP0 PIO1_9/CT16B1_MAT0
PIO3_3
PIO1_10/AD6/CT16B1_MAT1
1M
R6
P3.0/LCD_D4
PIO0_3/USB-VBUS
IC1
R33
5
C7
P2.0/KB_C0
R34 33R
2
VDD RESET/PIO0_0
K7 3
JP2
44
VDD
1
2
1
2
C5
1
R4
TP2
0R
1u 6V3
R49
R13
+3V3
C4
+5V
R3
PIO1_11/AD7
10n 500V
VSS
XTALIN
5
3
P0.0/RESET
4
P0.1/PWR
10
P0.2/KB_R4
14
P0.3/USB_VBUS
15
P0.4/SCL
16
P0.5/SDA
22
P0.6/USB_CONNECT
23
P0.7/LED
7
X1
47k C18
POK GND
5
5
3
K5
C6
1
4
1u 6V3
K2 1 3
P0.9/MOSI
4
32
P0.11/AD0/MAT03
P0.10/SCK
5
P0.11/AD0/MAT03
6
33
P1.0/AD1/CAP10
P1.0/AD1/CAP10
7
34
P1.1/AD2/MAT10
P1.1/AD2/MAT10
8
35
P1.2/AD3/MAT11
P1.2/AD3/MAT11
9
39
P1.3/AD4/MAT12
P1.3/AD4/MAT12
10
40
P1.4/AD5/MAT3/WAKEUP
45
P1.5/RTS/CAP00
46
P1.6/RXD
47
EXT2
P1.7/TXD
9
P1.8/KB_R0
17
P1.9/KB_R1
30
P1.10/KB_R2
42
P1.11/KB_R3
+3V3
P0.7/LED
K3 1 P1.3/AD4/MAT12 P0.10/SCK
D34
P0.9/MOSI
0R 0R 0R
R9 2 R8 3 R7 4 5 6
IC2 VBAT
LX
SHDN
8
+5V 3x STPS160
VOUT
D31
1
V+
D32
K6
V+ R31 10R
3
2
100u 16V
2x 1N4148W
BAT
C8
C9
C3
1u 6V3
100u 16V
10n
D35
P0.1/PWR
D36 0R C17
NC NC
100n
NC
LPC-link
D33
2 1u 6V3
EXT1
+3V3
P0.10/SCK
*
GND
C16
2 1u 6V3
9 10
R14
SP6641BEK-L-5-0
R29 1M
USB
8 P0.0/RESET
7
100k 1
C19
BAT
7
29
18p
L1 T5
IC4
6
P1.4/AD5/MAT3/WAKEUP
P0.0/RESET
ZXM61P03F
MAX1555
5
P0.2/KB_R4
2
41
22uH
DC
4
P1.6/RXD
P0.8/MISO
C15
BATTERY
4
3
P1.7/TXD
P0.7/LED
P0.11/AD0/MAT03 R11
+5V
2
P0.4/SCL
P0.8/MISO
12MHz 18p
P0.5/SDA
P0.9/MOSI
1k C14
K1 1
28
BATTERY R12
R10
27
XTALOUT VSS
6
R5
100k
C12
NC
C13
NC
C10
100k
C1
100k
C2
MCP1700T-33 IC3
V+
P0.3/USB_VBUS
NC
100k
R28
+3V3
+3V3
BATTERY
1
P1.9/KB_R1
2
P2.4/KB_C4
3
P1.10/KB_R2
4
P1.5/RTS/CAP00
5
P2.1/KB_C1
6
P2.0/KB_C0
7
P1.11/KB_R3
8
P2.5/KB_C5
9
R32
S1
P2.2/KB_C2
10
R35
S5
P1.8/KB_R0
11
R37
S8
P2.3/KB_C3
12
R42
S12
EXT3
Figuur 2. Het elektrisch schema. De montagehandleiding (Eagle-bestanden, onderdelenlijst, software) is beschikbaar via [1]. cuit, maar u kunt deze het beste toch monteren om een ongedefinieerde toestand te vermijden als de USB-kabel niet (correct) is aangesloten. Monteer R13 in plaats van R3 als u er de voorkeur aan geeft om de chip via een seriële verbinding te programmeren. Merk op dat er een bug zit in de geïntegreerde USB-driver, waardoor u ongeveer 24
30 s moet wachten voordat Windows bij de eerste programmeersessie de ‘stick’ detecteert. Daarna werkt het detecteren normaal zolang de microcontroller onder spanning blijft. U kunt de microcontroller ook programmeren via een seriële debugpoort (Serial Wire Debug, SWD), een soort seriële JTAG. Hiervoor is connector K3
bedoeld, waarvan de bedrading compatibel is met de LPC-Link van de gratis ontwikkelomgeving LPCXpresso. De op PIO0.7 aangesloten LED (D34) is ook compatibel met LPCXpresso, wat betekent dat het in de IDE aanwezige testprogramma LPCXpresso1343_blinky onveranderd kan worden gebruikt. 10-2011
elektor
J 2B
1M
1
2
3
4
5
6
7
8
9
K8
10 11 12 13 14 15 16
ZXM61P03F R46
R40
10k
1k
ZXM61P03F
COL0
2
COL3
COL3
3
4
COL1
COL1
4
5
COL5
COL5
5
6
COL4
COL4
6
7
COL2
COL2
7
8 ROW0
ROW0 8
9
S1
S1
10
KB1
P2.5/KB_C5
KB1
D5
D6
S13.B
S14.B
S15.B
S16.B
S17.B
S18.B ROW0
R47 D30
JP1
S5 S8
S17.A
D21
D9
D10
S21.B
S5
*
D11
S6
S8 ROW1
R38 10k
S1 S13.A
D13
D14
S14.A
D15
D16
S1
S15.A
D17
S4
S3 ROW2
10k
R39 D18
S16.A
D19
D7
D8
S19.B
S18.A
D23
S20.B ROW3 S12
D24
S19.A
*
D25
S9
D26
S20.A
*
D27
D28
S10
*
S21.A
*
D29
S11
*
S12
*
*
ROW4
COL5
COL4
COL3
COL2
COL1
COL0
R44 10k
R19 1k
* *
D22
R43 10k
R18 P1.11/KB_R3 1k
R20
1k
1k
R21
R17 1k
9
10
P3.3/LCD_D7 P2.4/KB_C4
P3.2/LCD_D6
1k
COL0
3
D4
S2
P0.2/KB_R4
2
D3
D12
P1.10/KB_R2
R23
ROW2 1
D2
S7 P1.9/KB_R1
1N4148W
K9 1 ROW2
D1
D20
R16 1k
P3.1/LCD_D5
P3.0/LCD_D4
P2.11/LCD_E
P2.6/LCD_RS
D1 ... D30 = R22
1k
P2.1/KB_C1
R25
1k
R24
10k
P1.8/KB_R0
R15 1k
P2.7/LCD_R/W
100R
1k
P2.0/KB_C0
BUZZER
R1
P2.9/LCD_BL
P2.10/LCD_PWR
BZ1
P2.8/BUZZER
T1
P2.3/KB_C3
100R
1M
R41
P1
P2.2/KB_C2
ZXM61P03F
SX
LED–
LED+
DB7
DB6
DB5
K10
1k
1k
=
SX.A
DB4
DB3
DB2
DB1
DB0
E
R/W
RS
VO
VSS
T3
R27
T2
R45
+
2 Lines x 16 Chars, 4 Lines x 16 Chars, 4 Lines x 20 Chars
R36
Rotary Encoder
SX.B
Alphanumerical LCD
V+
VDD
V+
110274 - 11
Toetsenbord Het toetsenbord bestaat in principe uit twaalf toetsen, vier aan de linkerkant, vier aan de rechterkant en vier onder een display van 2 x 16. Er kunnen ook draai-encoders in plaats van toetsen worden gebruikt, zo’n encoder met geïntegreerde druktoets vormt het equivalent van drie toetsen. Drie elektor
10-2011
encoders nemen even veel plaats in als vier toetsen. Voor maximale flexibiliteit bij het plaatsen van de toetsen en encoders heeft de auteur het ontwerp gebaseerd op maximaal negen encoders (hij heeft zelf een toepassing waarbij inderdaad zoveel encoders nodig zijn). Negen encoders met geïntegreerde druktoets komen overeen met 27
toetsen en er is dus een matrix van 5 x 6 nodig om alle toetsen op een minimum aantal in/uitgangen aan te sluiten. De matrix is zodanig bedraad dat als er niet meer dan één van de drie groepen van vier toetsen (links, rechts of onder) wordt gebruikt, slechts vier in/uitgangen nodig zijn om deze vier toetsen te scannen. De hierdoor vrijgekomen in/uitgangen zijn beschikbaar voor andere functies. Met JP1 kan de plaats van S5 in de matrix worden geoptimaliseerd. Met behulp van diodes wordt het probleem van ‘spooktoetsen’ opgelost, dat kan ontstaan als een aantal toetsen tegelijk wordt ingedrukt, een situatie die gemakkelijk ontstaat als er aan twee encoders tegelijk wordt gedraaid. De diodes hebben een SOD323-behuizing, waardoor het mogelijk wordt om deze door weerstanden te vervangen als u bijvoorbeeld bepaalde toetsen door LED’s zou willen vervangen. De weerstanden R38, R39, R43 en R44 zorgen er voor dat het board met behulp van één van de toetsen S1, S5, S8 of S12 kan worden ingeschakeld. Bij een druk op een van deze toetsen wordt verbinding gemaakt met de corresponderende brugweerstand (R32, R35, R37 of R42) en leveren beide weerstanden een zodanige spanning dat T5 in geleiding komt. Op deze manier kan bij accu- of batterijvoeding de spanning worden ingeschakeld. R47 zorgt er voor dat de symmetrie in de bedrading van de matrix gehandhaafd blijft, en is niet gerelateerd aan een aan/uit-toets. Alle matrixlijnen hebben een stroombegrenzingsweerstand (R15 tot R25). De waarde hiervan is niet kritisch, zolang de toetsdetectie niet nadelig wordt beïnvloed. Tenslotte merken we nog op dat op de print twee plaatsingsmogelijkheden zijn voor S9...S11 en S19...S21. Display Het board biedt de mogelijkheid voor montage van displays met 2 regels van 16 karakters (2 x 16), met vier regels van 20 karakters (4 x 20) of zelfs met 4 regels van 16 karakters (4 x 16, deze zijn tamelijk zeldzaam), vooropgesteld dat het display in de linker bovenhoek een standaard connector heeft met 14 of 16 contacten. Dit is een veel voorkomende configuratie. Er bestaan ook displays van 4 x 20 met twee van zulke con25
J 2B
Figuur 3. Verschillende variaties op het thema LCD 2 x 16. Merk op dat de toetsen kunnen worden verplaatst. nectoren waardoor ze tevens ondersteboningsregelaar (IC3) uit de 5 V afgeleid. Met die wordt gevoed via USB (of K7). ven kunnen worden gemonteerd. R38 kan deze spanning worden onderbroMet behulp van R11 en R12 kan de microDeze displays worden in het algemeen ken om de voeding zonder gevaar voor de controller het niveau van de accu of batterij gevoed met 5 V, wat geen probleem is microcontroller te kunnen testen. meten. omdat het board kan worden aangesloDe 5 V kan uit drie bronnen afkomstig zijn: Als het board uitsluitend uit een externe ten op een externe 5-V-voeding (bijvooreen externe voeding verbonden met K7, de voeding wordt gevoed, is het niet nodig beeld via USB). Om ook voeding vanuit een USB-poort (K4) of IC2. Deze laatste is een om de hele voeding te monteren. Monteer accu of batterij mogelijk te maken is een boost-spanningsregelaar die ingangsspanin dat geval alleen D32, C3, C4, C5, IC3 en boost-spanningsregelaar voor 5 V R48. Het software-matig in/uittoegevoegd. schakelen is dan niet beschikbaar. Met T3 kan de voeding voor het display worden onderbroken. Dat USB en uitbreidingen is handig voor het resetten van het We besluiten de beschrijving van display of voor het beperken van het schema met de uitbreidingshet stroomverbruik van de schakeen communicatiepoorten. ling. Om dezelfde reden wordt ook K4 is een op het board gemonhet backlight door een transistor teerde mini-USB-connector. Deze (T1) bestuurd, met R1 als stroomis vooral bedoeld om tijdens de begrenzer. In verband met de dissiontwikkelfase de microcontroller patie heeft deze weerstand het forin ISP-modus als USB-stick te promaat 1206. De waarde is niet krigrammeren. Voor een afgeronde tisch en hangt af van de gewenste applicatie zit deze connector waarhelderheid. schijnlijk niet op de juiste plaats. Daarom kan op connector K7 een Figuur 4. Het maximum haalbare: 9 draai-encoders en twee Buzzer USB-connector worden aangeslotoetsen vormen samen 29 schakelaars! Met een standaard buzzer met ten die op een andere plaats wordt een diameter van 12 mm (steek gemonteerd. T4 wordt door de 6,5 mm) kunnen geluiden en microcontroller bestuurd om aan alarmsignalen worden weergegeven. De ningen tussen 0,9 V en 4,5 V accepteert de pc te melden dat er een USB-apparaat is buzzer wordt aangestuurd door T2. R36 en hiermee de mogelijkheid biedt om het aangesloten. zorgt er voor dat de buzzer geen gepiep laat board uit een accu of één of meer batterijen Vrijwel alle in/uitgangspoorten van de horen als PIO2.8 tijdens het programmevan 1,5 V (K5) te voeden. De microcontrolmicrocontroller zijn verbonden met de uitren van de microcontroller als ingang wordt ler verbruikt weinig energie (60 mW in stanbreidingsconnectoren K1, K2 en K6. U kunt gebruikt. R41 is voor een buzzer niet absodaard modus, geklokt met 72 MHz) en één hierbij ook connector K8 gebruiken, die luut noodzakelijk, maar maakt het mogelijk enkele 1,5-V-batterij is dus voldoende om normaal dient om het display aan te sluiom met T2 iets anders te besturen, zoals het geheel gedurende lange tijd te laten ten. Sommige in/uitgangen zijn alleen via een relais of een LED. Weerstand R41 is net werken. Hierbij nog een opmerking: omdat een transistor beschikbaar (PIO0.6, PIO2.8, als R1 in formaat 1206 uitgevoerd. de microcontroller met een voedingsspanPIO2.9 & PIO2.10). PIO0.1 is beschikbaar ning tussen 2 en 3,6 V werkt, is een spanop JP2 en PIO0.7 op D34. In al deze gevalVoeding ningsregelaar van 3,3 V niet absoluut noodlen is elke in/uitgang verbonden met een De hoofdvoeding (V+) van het board is zakelijk en kan in plaats daarvan een 3 V soldeervlak. 5 V. Deze spanning is alleen voor het dislithium-accu of -batterij worden gebruikt. K1 en K2 bevatten de signalen van de complay nodig, want de microcontroller wordt Als er gebruik wordt gemaakt van een LiPomunicatiepoorten, zoals I²C, SPI en UART. gevoed met 3,3 V en de rest van de schakeaccu (< 4,5 V), bijvoorbeeld afkomstig uit Hier vindt u ook de in/uitgangen die niet ling is hieraan gerelateerd. De 3,3 V wordt een mobiele telefoon, kan een acculader door het matrixtoetsenbord of het LCD wormet behulp van een low-dropout-span(IC4) op het board worden gemonteerd, den gebruikt. Voor diegenen die een seriële 26
10-2011
elektor
J 2B
Figuur 5. Volop mogelijkheden, ook met een display van 4 x 20 karakters. USB/TTL-interface-kabel van FDTI bezitten (Elektor-shop nr. 080213 [8]) is het goed om te weten dat K1 compatibel is met deze kabel. Poort PIO1.4 is voorzien van een pullupweerstand (R10), omdat deze poort een speciale functie heeft in de ‘deep powerdown’-modus van de microcontroller. Bij de I²C-poort kunnen twee pullupweerstanden worden gemonteerd (R4 en R5). K6 geeft toegang tot het merendeel van de poorten die voor het toetsenbord worden gebruikt. Een aantal van deze signalen is ook beschikbaar op K8 en K9, maar deze twee connectoren zijn speciaal bedoeld voor het geval dat u een mini-toetsenbord met vier toetsen wilt afsplitsen om dit ergens anders te monteren.
Montage
dat is gebaseerd op de LPC1343 en ons board is hiermee compatibel. Als u beschikt over een LPCXpresso-board, zaag dan het LPC-link gedeelte af en lees het artikel Aan de slag met het LPCXpresso-board in de Halfgeleidergids 2011 [5], waarbij u in dat artikel overal ‘1114’ door ‘1343’ vervangt. Verbind de LPC-link met K3 van uw board. Als u de LED hebt gemonteerd, hoeft u nu alleen maar de instructies te volgen om deze te laten knipperen. Als u geen LPCXpresso-board bezit, kunt u de IDE toch gebruiken dankzij de modus ISP via USB-stick van de microcontroller. Hiervoor hoeft u alleen maar de IDE zodanig te configureren dat deze een executable bestand in het juiste formaat produceert. Om dit te doen, klikt u in het menu op Project en vervolgens op Properties. Klik op de + voor C/C++ Build en selecteer Settings, klik vervolFiguur 6. CooCox CoIDE [7], een krachtige gratis IDE voor gens op de tab Build Steps. Voer nu ARM Cortex-M0 en -M3 processoren van verschillende in de groep Post-build steps bij Comfabrikanten. mand het volgende in:
Het board bevat geen SMD’s die moeilijk te solderen zijn. De microcontroller kan iets lastiger zijn, maar met een stukje desoldeerlitze kunt u het teveel aan soldeer gemakkelijk weghalen. Spoelen kunnen meer problemen opleveren, want die zijn vaak niet eenvoudig te vinden. De auteur heeft daarom gekozen voor een gemengde oplossing, geschikt voor sommige types van Coilcraft (probeer eens hun uitstekende sample-service! [9]), van Coiltronics (o.a. verkrijgbaar bij Farnell) en bedrade types met een steek van 3,5 mm. Verschillende types van andere fabrikanten kunnen eveneens geschikt zijn. De buzzer, de LED, connector K8 en alle toetsen worden in principe op de soldeerzijde van het board gemonteerd. De toetsen zijn van een modulair type dat bestaat uit een body waarop kapjes met verschillende vormen, kleuren en lengtes kunnen worden geklikt. Zo kan iedereen de toetsen aan zijn elektor
10-2011
eigen applicatie en smaak aanpassen. Om het board zo compact mogelijk te houden en de afmetingen aan de behuizing van uw keuze aan te passen, kan de print langs geperforeerde stippellijnen worden afgezaagd. De volledige print past in een kastje van Bopla (nr. 26160000). Met een display van 2x16 en 4 toetsen eronder is het board
kleiner dan één enkel display van 4x20. Dankzij het afsplitsbare toetsenbord is de uitvoering met een display van 4x20 ongeveer net zo groot als het 4x20 display zelf.
In gebruik nemen Het in dit artikel beschreven board is compatibel met de geïntegreerde ontwikkelomgeving (IDE) LPCXpresso van NXP, Embedded Artists en Code Red [2, 3, 4]. Deze gratis IDE is zonder meer te gebruiken met de LPC1343 en is voorzien van veel voorbeelden en verschillende bibliotheken. De IDE wordt aangevuld met LPCXpresso-boards die een min of meer afneembare programmer/debugger bevatten met de naam LPClink en een variabel microcontrollergedeelte. Er bestaat een LPCXpresso-board
arm-none-eabi-size ${BuildArtifactFileName}; armnone-eabi-objcopy -O ihex ${BuildArtifactFileName} ${BuildArtifactFileBaseName}. hex; arm-none-eabiobjcopy -O binary ${BuildArtifactFileName} firmware.bin; checksum firmware.bin; Dit is een serie commando’s waarvan een aantal al aanwezig is (let er op dat hierbij de karakters ‘#’ moeten worden weggehaald). Deze invoer zorgt er voor dat het geproduceerde bestand de naam firmware.bin krijgt en dat er een checksum aan wordt toegevoegd (dit is nodig om de 27
J 2B
Bron: Taco Zip 3 – Heavy kunst (1992) door Fritzgerald, Jakketoe & Cromheecke. Welwillend ter beschikking gesteld door Luc Cromheecke.
executable door de microcontroller te laten herkennen). Sluit af met een klik op de button OK. Vanaf nu produceert de IDE een executable die u naar de USB-stick kunt kopiëren (deze bevat altijd één enkel bestand met de naam firmware.bin). Denk aan de bug in de USBdriver van de LPC1343 die er voor zorgt dat de stick soms pas na ongeveer dertig seconden wordt herkend. Naast LPCXpresso zijn er ook andere gratis mogelijkheden. Om te beginnen is er de site microBuilder [6] die beschrijft hoe een programmeeromgeving voor de LPC1343 op basis van Yagarto kan worden ingericht. Deze site biedt ook een bibliotheek die u helpt om snel met de microcontroller aan de slag te gaan. De auteur gebruikte deze bibliotheek bij de ontwikkeling van zijn testprogramma [1]. Meer verwant aan LPCXpresso is CooCox CoIDE [7]. Net als LPCX-
presso is deze IDE gebaseerd op Eclipse en bevat deze een groot aantal drivers voor de randapparaten van de microcontroller en nog veel meer, zoals het RTOS CoOS. Ook is er een op de LPC1343 gebaseerde programmer/debugger pod verkrijgbaar. U kunt deze kopen (denk aan de verzendkosten!), maar omdat het een open-hardware project betreft kunt u deze ook zelf maken. Met de optie ‘ISP via USB-stick’ van de microcon-
Weblinks
troller wordt hier een kip-en-ei-probleem vermeden. Merk op dat CoIDE net als LPCXpresso niet automatisch de checksum voor de executable berekent.
Wie is er bang voor 32-bits? We zijn ons ervan bewust dat veel van onze lezers zich niet op hun gemak voelen met 32-bits microcontrollers, zelfs als deze tegenwoordig veel gemakkelijker in gebruik te nemen zijn dan 8-bits microcontrollers en ze bovendien goedkoper zijn.
[1] www.elektor.nl/110274 [2] http://ics.nxp.com/lpcxpresso/ [3] www.embeddedartists.com/products/lpcxpresso/ [4] http://lpcxpresso.code-red-tech.com/LPCXpresso/Home [5] www.elektor.nl/110448 [6] www.microbuilder.eu/projects/ LPC1343ReferenceDesign/LPC1343Toolchain.aspx [7] www.coocox.org/
Voor die lezers presenteren we in een volgend nummer een board dat vergelijkbaar is met dat wat hier is beschreven, maar vereenvoudigd en gebaseerd op een 8-bits AVR-microcontroller. Dit board bevat geen SMD-onderdelen en is ook nog eens compatibel met Arduino, Mikroelektronika en BASCOM-AVR. (110274)
[8] www.elektor.nl/080213 [9] www.coilcraft.com [10] http://elektorembedded.blogspot.com
Wijzigingen in de bibliotheek van microBuilder Zoals eerder vermeld in dit artikel heeft de auteur zijn testapplicatie gebaseerd op de open-source LPC1343-bibliotheek van microBuilder [6]. Het programma, eveneens open-source, is beschikbaar via link [1]. Het was nodig om de bibliotheek van microBuilder aan te passen omdat deze een paar nadelen had. Het is dus niet meer mogelijk om de originele bibliotheek te gebruiken. Hier volgen de belangrijkste wijzigingen: gpioSetValue: gebruikt vanaf nu de bit masked versie van GPIOnDATA om conflicten te vermijden als deze functie vanuit een interruptservice-routine wordt aangeroepen; UART: de buffer uartRxBuffer is vervangen door een meer algemene buffer met de naam uartBuffer. Transmissie onder besturing van interrupts werd toegevoegd; SPI: verschillende wijzigingen werden aangebracht; cmd.c: hier ontbrak een mechanisme om overflow van de berichtenbuffer te voorkomen.
28
10-2011
elektor