Review: Interface-Board GreatFET One
über
Die Weiterentwicklung der Computertechnik - Stichworte wie Mehrkernprozessoren oder LCD-Bildschirme - brachten dem Nutzer im Allgemeinen nur Vorteile. Das gilt leider nicht für den Elektroniker - während die Interaktion mit Gameport, serieller Schnittstelle und Druckerinterface vergleichsweise einfach war, setzen Arbeiten mit der USB-Schnittstelle ohne Unterstützung dedizierter Chips gute Programmierkenntnisse voraus.
Great Scott Gadgets bietet mit dem GreatFET One nun ein Entwicklungsboard an, das die Rückkehr in die „gute alte Zeit“ ermöglichen soll.
Entdeck der GreatFET One auch im Elektor TV.
Was bekomme ich?
Der GreatFET One ist durch die Bank als quelloffene Hardware ausgelegt - eine Beschreibung der Software findet sich in einem Wiki, während die auf Kicad basierenden Hardware-Designs ebenfalls auf Github zum Download bereitstehen. Wer den GreatFET One kauft, bekommt das in Bild 1 gezeigte Paket - neben der (betriebsbereiten und mit allen Headern ausgestatteten) Platine bekommen Sie auch ein USB-Kabel und ein als Wiggler (englisch für Rüttler) bezeichnetes Werkzeug zum Trennen des Boards von aufgesteckten Erweiterungen.
Dokumentation zur als LibGreat bezeichneten Haupt-Interaktions-API findet man übrigens hier.
Schnelle Einrichtung!
Wenn ein Entwickler schnell ein Programm zusammenschustern möchte, dann greift er heutzutage zur Python-Programmierumgebung. Der Autor hat die in den folgenden Schritten erfolgende Schnell-Demonstration unter Ubuntu 18.04 LTS durchgeführt. Wer stattdessen unter Windows arbeiten möchte, findet Installationsanleitungen im Netz.
In jedem Fall beginnt die Installation der Bibliothek mit dem pip3-Paketmanager:
Python bringt seit längerer Zeit eine eigene Paketverwaltung mit, über die wir das GreatFET-Paket samt seinen teilweise sogar nativen Abhängigkeiten laden. Wichtig ist, dass Sie auf jeden Fall pip3 verwenden müssen - der für Python 2.X vorgesehene pip funktioniert nicht. Im nächsten Schritt überprüfen wir, ob unser User-Konto schon Mitglied der PlugDev-Gruppe ist:
tamhan : tamhan adm dialout cdrom sudo dip plugdev lpadmin sambashare kvm pico
Vor dem Verbinden des Prozessrechners mit dem Computer geben wir noch folgende Kommandos ein, um die udev-Regeln zu aktualisieren:
tamhan@TAMHAN18:~$ sudo udevadm control –reload-rules
Lohn der Mühen ist, dass Sie einen angeschlossenen Prozessrechner - wie in Bild 2 gezeigt - durch Eingabe des Kommandos greatfet info erkennen können.
Der GreatFET One ist mit Sicherheit kein Produkt, das Schlomo Normalentwickler jeden Tag kauft. Schon aus diesem Grund liegen die PCBs einige Zeit beim Distributor auf Halde, weshalb sich eine Firmware-Aktualisierung durch das folgende Kommando auf jeden Fall empfiehlt:
Der Autor hat in den folgenden Schritten mit der Firmware-Version v2020.1.2 gearbeitet.
Kombinatorische Prozessrechnersysteme leiden im Allgemeinen darunter, dass die Bandbreite zwischen den einzelnen Modulen eng beschränkt ist. Zum Test der Möglichkeiten möchte der Autor im ersten Schritt eine charakteristische Wellenform ausgeben. Hierzu benötigen Sie eine .py-Datei, die man durchaus bequem in Visual Studio Code editieren kann:
tamhan@TAMHAN18:~/greatfetspace$ python3 worker.py
Ein netter Nebenaspekt der Microsoft-IDE ist, dass das Terminal sofort nach der Aktivierung retourniert - der Aufruf des Python-3-Interpreters kann also an derselben Stelle erfolgen.
Im nächsten Schritt können wir nach dem folgenden Schema ein GreatFET-Objekt erzeugen und ein Pin-Objekt anlegen:
gf = GreatFET()
pin = gf.gpio.get_pin('J1_P4')
pin.set_direction(gf.gpio.DIRECTION_OUT)
Great Scott umgeht die von Raspberry Pi und Co. bekannten Probleme bei der Korrelation zwischen logischem und physikalischem Pin insofern, als jedes der Header mit einem eindeutigen Label ausgestattet ist. Der hier verwendete String steht dann beispielsweise für den physikalischen vierten Pin des Headers J1 (siehe Bild 3).
Darauf folgt auch schon eine Endlosschleife, die die Wellenform ausgibt:
pin.write(True)
pin.write(False)
pin.write(True)
pin.write(False)
Die Bilder 4 und 5 informieren uns darüber, dass die beiden Wellentäler ungefähr gleich lang sind und die gesamte Affäre weder besonders schnell noch besonders frequenzstabil abläuft.
Beachten Sie beim Experimentieren übrigens, dass das Board ein reines 3,3-V-Gerät ist: Wer 5 V anschließt, brät den Controller.
Experimente
In der guten alten Zeit war das Einsammeln analoger Werte und die Ausgabe derselben durchaus haarig. Der GreatFET One bringt von Haus aus einen Analog-Digital-Konverter mit, die sich am einfachsten durch einen der vielen Kommandozeilen-Helfer aktivieren lässt. Von Haus aus wird übrigens die am Pin J2_P5 anliegende Spannung gemessen:
3.18076171875V
Zur Demonstration der immensen Leistungsfähigkeit der Kombination aus Python und Hardware möchte ich an dieser Stelle sowohl die NumPy-Bibliothek als auch MatPlotLib laden - fehlen die beiden Bibliotheken, so müssen Sie sie von Hand nachinstallieren. Im nächsten Schritt greife ich auf meine bewährte Spannungsreferenz zurück, der ich - in der Teedose ist es toastig warm - etwas Zeit zum Aufwärmen spendiert habe. Währenddessen beschäftige ich mich mit der Erzeugung des folgenden Programms.
Im ersten Schritt lade ich wie gewohnt einige Bibliotheken:
from matplotlib import pyplot as plt
from greatfet import GreatFET
Die implementierte ADC-Lesefunktion ist eine komplexe Angelegenheit. Im Interesse der Bequemlichkeit erzeuge ich das NumPy-Array auf die brutale Art - angemerkt sei, dass die Verwendung der API nicht sonderlich effizient ist:
store = np.array(gf.adc.read_samples(1))
i = 0
while i < 1000:
store = np.append(store, gf.adc.read_samples(1))
i=i+1
An dieser Stelle stehen zwei verschiedene Vorgehensweisen zur Verfügung. Methode Nummero eins ist die Erzeugung eines Bin-Ranges, den ich danach an die NumPy-Funktion histogram übergebe:
hist, bins = np.histogram(store, binrange)
Lohn der Mühen dieser Variante ist die Retournierung des Arrays, in dem sich die in den jeweiligen bins befindlichen Werte-Häufigkeiten abernten lassen. Die Übergabe von bins ist dann nur eine Kopie des Parameters binrange.
Möchte man die Diagramme nur direkt anzeigen, so kann man die Histogramm-Anzeige auch nach dem folgenden Schema direkt an MatPlotLib auslagern:
plt.show()
Lohn der Mühen ist jedenfalls das in Bild 6 gezeigte Histogramm - bitte ignorieren Sie die EMI-bezogenen Unsauberkeiten.
Zu guter Letzt sei noch darauf hingewiesen, dass der GreatFET auch einen Pattern-Generator und sogar eine Funktion zur Exportierung von Sigrok-Log-Informationen bietet. Beide lassen sich nach dem folgenden Schema über Kommandozeilen-Befehle aktivieren:
Die genaue Arbeitsgeschwindigkeit ist dabei allerdings stark von der verwendeten Hardware abhängig - hier findet sich eine interessante Diskussion der Thematik.
Fazit
Der GreatFET ist trotz seiner etwas „durch den Wind verteilten“ Dokumentation und der im Test eher mittelmäßigen Echtzeit-Performance ein liebenswertes Stück Hardware. Wenn Sie schon immer in die „gute alte Zeit“ der COM-Schnittstelle zurückkehren wollten, finden Sie hier einen schnellen und bequemen Weg, um PC oder Laptop für MSR-Aufgaben fit zu machen.
Wollen Sie weitere Elektor-Artikel lesen? Jetzt Elektor-Mitglied werden und nichts verpassen!
Diskussion (0 Kommentare)