Micro:bit und Mbed
Die gesamte Micro:Bit Programmierung basiert auf Mbed. Wenn
man ein Programm mit Microsoft Block übersetzt, wird es zunächst in
einen C++-Quelltext umgewandelt und zu Mbed geschickt. Von dort kommt
dann das fertige Hex-File. Man kann aber auch direkt auf die Mbed-Seite
gehen und das System in C++ programmieren. In Mbed ist Microbit nur
eine von vielen Platinen. Man kann sie behandeln wie jedes andere
ARM-System.
In
einem ersten Versuch wurde die Platine mit mbed.h verwendet, also ganz
bewusst noch nicht mit MicroBit.h. Die Frage war, wie schnell kann man
einen Port ansteuern. Bei den Versuchen zeigte sich, dass der
Controller selbst einen Port mit den Anschlüssen P0:0 bis P0_31 hat,
die man auch p0...p31 nennen kann. Die Nummerierung entspricht nicht
den Microbit-Anschlüssen, sondern ist dort umsortiert. Deshalb musste
erstmal herausgefunden werden, welche Ports hinter welchen Anschlüssen
liegen. Für die drei großen Anschlüsse 0, 1 und 2 sind dies die Ports
p3, p2 und p1. Das Beispiel setzt alle drei als Ausgänge und bildet
eine schnelle Schleife mit Pegelwechseln am Anschluss 1 (out1).
Das Ergebnis ist erfreulich: Eine Portausgabe braucht nur eine
Mikrosekunde. Es entsteht also ein Rechteck mit ca. 500 kHz.
In
einem zweiten Versuch sollten der AD-Wandler und die serielle
Schnittstelle getestet werden. Auch hier wieder müssen die
Anschlüsse zu den Ports sortiert werden. Der AD-Wandler liefert in Mbed
immer eine Realzahl zwischen 0 und 1.
Die schon verwendete Mbed-Schnittstelle funktioniert als virtuelle COM
mit 9600 Baud. Im Terminal kann die Spannung am Pin 1 angezeigt werden.
Gemessen werden ca. 0,228 * 3,3 V = 0,75 V an einem offenen Eingang.
Wenn man den Eingang mit dem Oszi mit einer 1:10 Tastspitze mit 10M
oder mit dem Digitalvoltmeter mit ebenfalls 10 M untersucht, liegt da
eine Spannung von 1,6 V. Daraus lässt sich schließen, dass Pullups mit
10 M an diesen Ports liegen. Und tatsächlich kann man auch Widerstände
an den Anschlüssen erkennen. Sie wurden vermutlich eingebaut, damit man
die Ports mit einfachen digitalen Abfragen für Berührungssensoren
verwenden kann. Während die Spannung im Mittel bei 1,6 V
liegt, bricht sie im Moment einer Messung deutlich sichtbar bis auf
etwa 0,75 V ein. Da hilft ein Kondensator mit 100 nF gegen GND. Nun
wird tatsächlich fast die volle Spannung gemessen. Bei einer direkten
Verbindung zum 3V-Pin misst man übrigens genau 1.
Mit einer kleinen Änderung werden die Messwerte in Millivolt umgerechnet. Der Messbereich reicht bis 3300 mV.
Nun
wurde ein Elko mit 3,3 µF gegen GND angeschlossen und zum Anfang
entladen. Er lädt sich dann langsam über den Pullup von 10 M auf. Für
die Darstellung der Messdaten wurde der serielle Plotter aus der
neuesten Arduino-IDE verwendet. Man sieht die typische Ladekurve.
Auf der Suche nach einem Schaltplan des Micro:Bit bin ich auf die
Nachricht gestoßen, dass BBC ihn nicht veröffentlichen will.
Deshalb muss man selbst herausbekommen, wo welcher Port liegt. Damit es
nicht zu zeitaufwendig wird habe ich mir ein Programm geschrieben, das
immer gleich drei Ports testet, in diesem Fall p4, p5 und p6. Der erste
erzeugt Doppelimpulse, der zweite Dreifachimpulse und der letzte vier
Impulse in schneller Folge. Mit dem Oszilloskop sind die Signale
schnell zu finden. Und so kann man leicht herausbekommen, an welchem
Anschluss welcher Port liegt.
Elektronik-Labor Projekte Microbit