Technische kennisbank
Meer technische kennis over enkele blokken uit het menu PINNEN:
Pinnen op de edge connector
Naast de pinnen 0, 1, 2, 3V en GND kent de micro:bit nog veel meer pinnen die geen aanduiding hebben. Via de zogenaamde "edge connector" zijn deze pinnen toegankelijk. Om duidelijk te maken waar de pinnen zitten op de edge connector, dient de figuur hiernaast. Klik op de afbeelding voor een grotere weergave in een apart tabblad.
Sommige pinnen hebben meerdere functies. Zo zie je dat button A gelijk is aan pin P5, en button B gelijk aan pin P11. Het aansturen van P5 met een puls heeft dan ook hetzelfde effect als het drukken op knop A. Zie ook de kennisbank INVOER.
Via de blokken in het PINNEN menu kunnen pinnen met aanduiding Pxx als input of als output gebruikt worden. Sommige pinnen kunnen als digitale of analoge input gebruikt worden. De pinnen zonder ANALOG IN aanduiding zijn alleen als digitale input te gebruiken. Alle Pxx pinnen zijn als analoge of digitale output te gebruiken. Sommige pinnen worden ook gebruikt voor de kolom aansturing van de led matrix, en weer andere pinnen worden gebruikt voor seriele communicatie, SPI en I2C.
Deze functie geeft een waarde 0 of 1 terug afhankelijk van de aangeboden spanning op de aangegeven pin. In de praktijk ligt de grenswaarde zo'n beetje tussen de 1,3 en 1,8 Volt. Het is het best om het volgende aan te houden:
- is de aangeboden spanning hoger dan 2V dan is het resultaat een 1
- is de aangeboden spanning lager dan 1V dan is het resultaat een 0
Let op: sluit nooit een spanning aan hoger dan 3,3V anders kun je de micro:bit kapot maken.
Officieel zijn de omslagpunten afhankelijk van de spanning waarop de micro-controller van de micro:bit werkt (VDD), en heb je te maken met de volgende definities:
- voor een 1 moet de ingangsspanning hoger liggen dan VIH (Input High Voltage), en die is 0,7 * VDD
- voor een 0 moet de ingangsspanning lager liggen van VIL (Input Low Voltage), en die is 0,3 * VDD
- hierbij staat VDD voor de spanning waarop de micro:bit werkt
(VDD is 3V of iets minder als je met batterijen werkt, en 3,3V als de usb kabel is aangesloten)
De code tussen de haak wordt uitgevoerd als er een puls wordt aangeboden op de aangegeven pin. De puls moet dan minimaal 5 microseconden zijn. Je kunt hiermee dus hele korte pulsen waarnemen.
Dit is een groot verschil met waar de puls minimaal 55 milliseconden moet zijn (11.000 keer zo lang).
Let wel: Soms is er sprake is van een zogenaamd 'denderend' contact of verbinding met GND, dus een 'slecht' of 'niet ideaal' contact dat in een hele korte tijd (micro-seconden) meerdere malen gemaakt en verbroken wordt (zie de figuur). De pulsdetectie met het "als pin pulseerde" blok meet zo snel dat er dan ook meerdere events gegenereerd worden door de micro:bit. Bij 3x denderen wordt het blok "als pin pulseerde" dan ook 3x achter elkaar uitgevoerd.
Als de puls niet elektronisch wordt gegeven maar bijvoorbeeld tot stand komt door een schakelaar of draadverbinding, dan is er bijna altijd sprake van denderen.
Dit blok wacht op een puls (instelbaar 'hoog' of 'laag') en meet dan de puls-duur in micro-seconden van de puls aangeboden op de gekozen pin. Als er na 3 seconden nog geen puls geweest is, geeft het blok de waarde 0 en gaat het programma verder.
LET OP !!! Dit blok geeft niet de juiste waarde terug van de pulsduur, maar slechts 2/3 van die waarde. Dus een pulse-duur van 1 ms = 1000 micro-seconden levert een waarde op van 667. Deze fout is gemeld en hopelijk komt er snel een update.
Dit blok geeft een waarde terug van de puls-lengte die aangeboden wordt op één van de pinnen. Het blok kan bijvoorbeeld als volgt gebruikt worden:
Het blok "als pin pulseerde" wacht op een aangeboden puls, in dit geval P0. Het getoonde nummer wordt gelijk aan de puls-duur in micro-seconden van de puls aangeboden op P0. Als bij "als pin pulseerde" gekozen wordt voor P1, dan geeft "pulsetijd" de puls-duur weer van de puls op P1.
Let op: de micro:bit moet wel weten van welke pin je de puls-duur wilt meten, dus het is wel nodig om het "pulsetijd" blok te gebruiken binnen een "als pin pulseerde" blok/haak. Doe je dat niet, dan komt er een willeurige waarde terug van "pulsetijd".
Analoge output is in werkelijkheid niet echt analoog. De uitgang van de pin wisselt snel van hoog (3,3V) naar laag (0V). Dit gebeurt met een frequentie van 50Hz. Dus elke 20ms is de pin even hoog en even laag. Afhankelijk van de ingevoerde waarde (van 0 tot 1023) wordt de tijd dat de pin hoog is langer of korter. Dit wisselen tussen hoog en laag gaat dus zo snel, dat als je daar b.v. een led mee aanstuurt, je deze continu ziet branden, maar in een gedimde stand. Daarmee lijkt het analoog. Dit heet puls-breedte-modulatie, ofwel PWM (pulse width modulation).
50 | 100 | 500 | 1000 |
![]() |
![]() |
![]() |
![]() |
De verhouding tussen de tijd dat het signaal hoog is, en de periodetijd (hier meestal 20ms) wordt de duty-cycle genoemd.
ingevoerde waarde | puls hoog (bij een periodetijd van 20ms) |
duty-cycle |
0 | 0/1024 * 20 = 0,00ms | 0/1024 = 0,0% |
50 | 50/1024 * 20 = 0,97ms | 50/1024 = 4,9% |
100 | 100/1024 * 20 = 1,95ms | 100/1024 = 9,7% |
500 | 500/1024 * 20 = 9,76ms | 500/1024 = 48,8% |
1000 | 1000/1024 * 20 = 19,5ms | 1000/1024 = 97,6% |
1023 | 1023/1024 * 20 = 20,0ms | 1023/1024 = 100,0% |
De ingevoerde waarde kan varieren tussen 0 en 1023, dus 1024 mogelijke waarden. Daarom wordt in de formule door 1024 gedeeld. Strikt genomen klopt dit niet helemaal. Bij waarde 1023 zou het signaal in theorie nog een hele korte tijd laag moeten zijn. In de praktijk is de uitgang van de betreffende pin continu laag bij waarde 0, en continu hoog bij waarde 1023.
NB: er kunnen maximaal 3 pinnen tegelijk gebruikt worden voor PWM output.
Standaard staat de frequentie van het PWM signaal voor 'schrijf analoog pin' op 50Hz ofwel een periodetijd van 20ms = 20.000microsec. (lees eerst hoe PWM werkt in het blok 'schrijf analoog pin') Met dit 'stel analoge periode pin' blok kun je de periodetijd voor het PWM signaal aanpassen. Als je de periodetijd bijvoorbeeld 5.000microseconde = 5ms zet, dan levert dat een PWM frequentie op van 200Hz. Als je daarna 'schrijf analoog pin' instelt op 512 (precies de helft van het maximum), zul je een sigaal zien van afwisselend 2,5ms hoog en 2,5 laag.
De periodetijd kan teruggeschroeft worden tot minimaal 2 microseconde. Let wel dat bij die lage waardes de duty-cycle niet meer goed uit de verf komt, want de kortste tijd dat een pin hoog of laag kan staan is 1 microseconde.
Het aansturen van een servo gebeurt met PWM (pulse width modulation, ofwel puls-breedte-modulatie). Zie voor de uitleg hiervan: "schrijf analoog pin".
Het verschil is hier dat er afspraken zijn over de pulslengte (specificaties) en de uitslag (hoek) die de servo maakt. De frequentie van het signaal is 50Hz, net als bij de analoge output. Dus elke 20ms is er een puls. De lengte van de (positieve) puls varieert met de ingevoerde waarde (hoek, van 0 tot 180 graden).
0 graden | 60 graden | 90 graden | 180 graden |
puls = 0,50ms | puls = 1,17ms | puls = 1,50ms | puls = 2,50ms |
![]() |
![]() |
![]() |
![]() |
Voor het aansluiten van een servo, bijvoorbeeld de SG-90, zie de kennisbank externe componenten.
Let op: alleen servo's die voldoen aan de bedoelde specificatie gedragen zich zoals je zou verwachten. Er kunnen echter ook andere type servo's op de markt zijn met andere specificaties, die zullen zich dan anders gedragen. Met paar simpele testjes en de kennis van het 'schrijf servo' blok kun je er dan toch achter komen hoe je die servo moet aansturen. Je kunt met enig rekenwerk zelfs het 'schrijf analoog' blok gebruiken, of beter nog: gebruik het blok 'stel puls van servo in op pin', bijvoorbeeld voor als je pulsen nodig hebt die langer zijn dan 2,5ms.
Let op: gebruik het blok 'stel analoge periode pin' niet op de pin waar je een servo mee wilt aansturen. Alleen voor 'schrijf analoog pin' kan de periodetijd worden aangepast. Het aansturen van een servo met het blokje "schrijf servo" gebeurt dus altijd met een periodetijd van 20ms (= 50Hz).
Gebruik dit blok om de pulslengte tot op de microseconden nauwkeurig te sturen. Dit werkt ook voor hele korte pulzen van slechts 1 microseconde. Dit is een goede vervanger voor het blok 'schrijf servo op pin' indien er andere pulslengtes nodig zijn voor het toegepaste type servomotor.