De onstuitbare ontwikkeling van de computertechnologie – denk aan multi-core processoren of LC-displays – bracht over het algemeen alleen maar voordelen voor de gebruiker met zich mee. Helaas geldt dit niet voor de elektronica-ontwerper – waar de interactie met de gameport, de seriële interface en de printerinterface nog relatief eenvoudig was, vereist het werken met de USB-interface zonder de ondersteuning van speciale chips goede programmeervaardigheden.

Great Scott Gadgets biedt nu met de GreatFET One een ontwikkelboard dat de terugkeer naar die mythische ‘goede oude tijd’ mogelijk moet maken.

Ontdek de GreatFET One ook op Elektor TV.

Wat krijg ik?

De GreatFET One is in principe ontworpen als open-source hardware – een beschrijving van de software is te vinden in een wiki, terwijl de op Kicad gebaseerde hardware-designs van GitHub gedownload kunnen worden. Als u de GreatFET One koopt, krijgt u het pakket zoals getoond in figuur 1 – naast het (gebruiksklare en van alle headers voorziene) board krijgt u ook een USB-kabel en een tool dat ‘wiggler’ wordt genoemd op het board aangesloten extensies gemakkelijk te kunnen verwijderen.

Figuur 1. De GreatFET One wordt gebruiksklaar geleverd.

Documentatie over de LibGreat geheten hoofd-interactie-API is hier te vinden.

Snelle installatie!

Als een ontwikkelaar een programma snel in elkaar wil zetten, gebruikt hij tegenwoordig de Python-programmeeromgeving. De auteur heeft de hieronder stapsgewijs beschreven snelle demonstratie gemaakt onder Ubuntu 18.04 LTS. Als u in plaats daarvan onder Windows wilt werken, kunt u de installatie-instructies op het net vinden.

In ieder geval begint de installatie van de bibliotheek met de pip3-pakketmanager:

 

tamhan@TAMHAN18:~$ pip3 install --upgrade --user greatfet

 

Python brengt al geruime tijd zijn eigen pakketbeheer mee via welke we het GreatFET-pakket inclusief zijn deels zelfs native afhankelijkheden laden. Belangrijk is dat u in ieder geval pip3 moet gebruiken – de pip die bedoeld is voor Python 2.X werkt niet. In de volgende stap controleren we of ons gebruikersaccount al deel uitmaakt van de PlugDev-groep:

 

tamhan@TAMHAN18:~$ groups tamhan 

tamhan : tamhan adm dialout cdrom sudo dip plugdev lpadmin sambashare kvm pico


Voordat we de procescomputer op de computer aansluiten, voeren we de volgende commando’s in om de udev-regels bij te werken:

 

tamhan@TAMHAN18:~$ sudo wget https://raw.githubusercontent.com/greatscottgadgets/greatfet/master/host/misc/54-greatfet.rules -O /etc/udev/rules.d/54-greatfet.rules 

tamhan@TAMHAN18:~$ sudo udevadm control –reload-rules


De beloning voor alle inspanningen is dat u een aangesloten procescomputer – zoals weergegeven in figuur 2 - kunt herkennen door het commando greatfet info in te voeren.

Figuur 2. De GreatFET One is zichtbaar.

De GreatFET One is zeker geen product dat ‘normale’ ontwikkelaars dagelijks zullen kopen. Alleen al om deze reden hebben de printen geruime tijd bij de distributeur gelegen, zodat een firmware-update met het volgende commando zeker aanbevelenswaard is:

 

tamhan@TAMHAN18:~$ gf fw --auto


De auteur heeft in de volgende stappen met firmware-versie v2020.1.2 gewerkt.

Combinatorische procescomputersystemen hebben over het algemeen te lijden onder het feit dat de bandbreedte tussen de afzonderlijke modules beperkt is. Om de mogelijkheden te testen, wil de auteur in de eerste stap een karakteristieke golfvorm uitvoeren. Hiervoor heeft u een .py-bestand nodig, dat u eenvoudig kunt bewerken in Visual Studio-code:

 

tamhan@TAMHAN18:~/greatfetspace$ code worker.py 

tamhan@TAMHAN18:~/greatfetspace$ python3 worker.py


Een mooie bijkomstigheid van de Microsoft IDE is dat de terminal direct na activering retourneert - zodat de Python-3 interpreter op dezelfde plaats aangeroepen kan worden.

In de volgende stap kunnen we een GreatFET-object en een pin-object maken volgens het volgende schema:

 

from greatfet import GreatFET 

gf = GreatFET() 
pin = gf.gpio.get_pin('J1_P4') 
pin.set_direction(gf.gpio.DIRECTION_OUT)


Great Scott omzeilt de problemen van Raspberry Pi en Co. met betrekking tot de relatie tussen logische en fysieke pin doordat dat elke header een uniek label heeft. De hier gebruikte string staat bijvoorbeeld voor de fysieke vierde pin van header J1 (zie figuur 3).

Figuur 3. Duidelijke labels zijn een groot voordeel: de USB-poort voor de PC-communicatie is ook duidelijk zichtbaar.

Dit wordt gevolgd door een oneindige lus die de golfvorm uitvoert:

 

while 1 == 1:
     pin.write(True)
     pin.write(False)
     pin.write(True)
     pin.write(False


De figuren 4 en 5 tonen dat de twee golfdalen ongeveer even lang zijn, en ook dat het geheel niet bijzonder snel en ook niet bijzonder frequentiestabiel is.

Figuur 4. Het testsignaal met een oscilloscoop bekeken...
Figuur 5. ... en met een modulation domain analyzer.

Houd er overigens bij het experimenteren rekening mee dat het board een puur 3,3V-apparaat is: als u 5 V aansluit, komt de controller te overlijden.

Experimenten

In de goede oude tijd was het inlezen en uitvoeren van analoge waarden best wel lastig. De GreatFET One wordt geleverd met een A/D-omzetter die het eenvoudigste kan worden geactiveerd door een van de vele commandoregel-hulpjes. Standaard wordt de spanning op pin J2_P5 gemeten:

 

tamhan@TAMHAN18:~/greatfetspace$ greatfet adc 
3.18076171875V


Om de enorme mogelijkheden van de combinatie van Python en hardware te demonstreren, wil ik zowel de NumPy-library als MatPlotLib laden – als die twee ontbreken, zult u ze handmatig moeten installeren. In de volgende stap gebruik ik mijn vertrouwde spanningsreferentie, die ik een tijdje op temperatuur heb laten komen – die zit in een theeblikje en daar is het lekker warm. Ondertussen scvhrijf ik het volgende programma.

In de eerste stap laad ik zoals gewoonlijk een aantal libraries:

 

import numpy as np 
from matplotlib import pyplot as plt 
from greatfet import GreatFET


De geïmplementeerde ADC-leesfunctie is een complexe aangelegenheid. Voor het gemak maak ik het NumPy-array op een tamelijk brute manier aan – merk op dat het gebruik van de API niet erg efficiënt is:

 

gf = GreatFET() 

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


Nu zijn er twee verschillende procedures beschikbaar. Methode één is het maken van een bin-range die ik vervolgens doorgeef aan de NumPy-functie histogram:

 

binrange = range(0,1024,8) 
hist, bins = np.histogram(store, binrange)


De beloning voor onze inspanningen bij deze variant is het retourneren van het array waaruit de waardefrequenties in de betreffende bins kunnen worden opgehaald. De overdracht van bins is dan slechts een kopie van de parameter binrange.

Als u alleen de diagrammen direct wilt weergeven, kunt u de histopgram-weergave ook direct aan MatPlotLib uitbesteden, op deze manier:

 

plt.hist(store, bins) 
plt.show()


Hoe dan ook, de beloning voor de inspanning is het histogram van figuur 6 – let alstublieft niet op de EMI-gerelateerde onvolkomenheden.

Figuur 6. Deze histogrammen kosten weinig moeite.

Tot slot moet worden opgemerkt dat de GreatFET ook een patroongenerator biedt en zelfs een functie om Sigrok-loginformatie te exporteren. Beide kunnen op de volgende manier via de commandoregel worden geactiveerd:

 

tamhan@TAMHAN18:~/greatfetspace$ greatfet logic -p out.sr -f 2M -n 4


De exacte uitvoeringssnelheid is sterk afhankelijk van de gebruikte hardware – zie [5] voor een interessante discussie over dit onderwerp.

Conclusie

De GreatFET is een sympathiek stukje hardware, ondanks de wat ‘her en der verspreide’ documentatie en de nogal middelmatige real-time prestaties bij onze test. Als u altijd al heimwee had naar de ‘goede oude tijd’ van de COM-interface, dan is dit een vlotte en handige manier om uw PC of laptop klaar te stomen voor MSR-taken.

 

(200124-03)

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

Wilt u meer van die fantastische Elektor-artikelen?

 

--> Neem vandaag nog een abonnement op Elektorlabs - u mist nooit meer een artikel, project of handleiding!

----------------------------------------------------------------------------------------------------------------------------------------------------