OpenEEG

Page content

OpenEEG (http://openeeg.sourceforge.net/doc/) ist ein Open Source Projekt, um Gehirnwellen am PC sichtbar zu machen.

Aus diesem Bemühungen ist unter anderem eine Art “Produkt” entstanden, das “ModularEEG” heißt. ModularEEG besteht aus einem Hardware-Teil und einem Software-Teil.

Der Hardware-Teil besteht wiederum aus einem analogen und einem digitalen Teil.

Der analoge Teil ist im Wesentlichen ein hochempfindlicher Verstärker und Filter um die Gehirnwellen aufzunehmen und die zahllosen Störsignale wegzufiltern.

Der digitale Teil basiert auf einem AVR-Mikrocontroller. Dieser besitzt einen 6-Kanal D/A-Wandler und wandelt die vom Analogteil kommenden Signale in digitale Daten um. Außerdem versteht er noch ein paar Kommandos. Der AVR wird gesteuert durch eine Firmware, der ModularEEG Firmware. Diese wird in den AVR mittels ISP hineingeladen. Die Firmware liegt als C-Sourcecode vor. Die Kommunikation zwischen dem AVR und dem PC erfolgt via RS232. Auf der PC-Seite ist dazu ein steuerndes Programm erforderlich. Es existieren unterschiedliche Programme, die die ModularEEG Hardware nutzen.

Die OpenEEG Hardware

ModularEEG wird auf zwei Platinen aufgebaut. Auf einer ist die gesamte hochempfindliche analoge Elektronik, auf der anderen der digitale Teil mit steuerndem AVR Mikrocontroller.

Die Platinen für ModularEEG kann man fertig bestellen bei der bulgarischen Firma Olimex (http://www.olimex.com/gadgets/index.html).

Die Bauteile für ModularEEG sind zum Teil ziemlich speziell, bei Reichelt kriegt man aber fast alles.

Der Aufbau der Hardware ist auf der OpenEEG Website ausführlich beschrieben ( Dokumente “Preparing to build the circuit boards” und “Building the ModularEEG, Abschnitt Assembly).

Die Funktionsfähigkeit der Hardware kann man anhand mehrerer Tests verifizieren, wenn die Firmware auf den Controller geladen worden ist.

Firmware für den Controller

Die Firmware Source, die man aus dem Internet herunterladen kann (Stand 2009) wurde seit langem nicht weiterentwickelt und lässt sich mit aktuelleren avrlibc-Versionen nicht mehr übersetzen. Es handelt sich bei den problematischen Stellen aber nur um geänderte/weggefallene Makroschreibweisen, ich habe zwei Dinge korrigiert:

  1. Schreibweise des Makros “BV()” in die neuere Variante “_BV()” geändert, wo es im Sourcecode vorkam
  2. Am Anfang der Datei folgende Defines hinzufügen:
    // for compatibility purposes, support for old makros 
    #define inp(port) (port) 
    #define outp(val,port) (port) = (val) 
    #define inb(port) (port) 
    #define outb(port, val) (port) = (val) 
    #define sbi(port, bit) (port) |= (1 << (bit)) 
    #define cbi(port, bit) (port) &= ~(1 << (bit))
    

Dann lies sich modeeg-p2.c übersetzen. (dies ist Version 2 der Firmware; Version 3 liegt auch bei, habe ich aber nicht weiter betrachtet, da Electric Guru nur mit Version 2 zurechtkommt) Außerdem liegen fertige HEX-Dateien für Version 2 und 3 bei, so dass man auch gar nicht kompilieren muss.

Platine des Analogteils am Anfang der Bestückung

Fertig bestückte Analogplatine. Oben ist der Connector zu sehen, mit dem beide Platinen verbunden werden.

Fertig bestückte Digitalplatine. Unten der Connector, mit dem beide Platinen verbunden werden, oben der ISP Connector zum Programmieren des AVRs.

Funktionstest nach vollendeter Bestückung des Digitalteils und nach Einladen der Firmware. Der AVR produziert ein Rechtecksignal mit 14 HZ Frequenz. Dieses Signal kann gemessen werden. Wenn es produziert wird, war das Hochladen der Firmware erfolgreich.

Laut Oszillograph ist der Test erfolgreich. Das Signal ist vorhanden und die Frequenz stimmt. Dieses Signal wird auf der Analogseite als Signal zur Kalibrierung verwendet. Dort hat es allerdings nur noch 250µV Amplitude, um die Verstärker nicht zu überfahren.

Hier sind die beiden Platinen miteinander verbunden, und erste Tests der Gesamtfunktion laufen.

Hier das Ganzmetallgehäuse, das Störstrahlungen abmildert. Die Verdrahtung der Platinen mit den Gehäuse-Anschlüssen ist noch nicht erfolgt.

Gehäuse mit aufgesetztem Deckel.

Gehäuse, nun bereits verdrahtet. Die ursprünglichen Buchsen wurden durch andere ersetzt, da die ursprünglichen Buchsen von einer gemeinsamen Masse ausgingen. dito.

Damit ist die Hardware schon mal testbar. Die Elektroden fehlen noch.

Erste Experimente mit der Software

Im folgenden wurde die Hardware via seriellem Kabel mit dem PC verbunden. Mangels unterstützender Linux-Software habe ich die Software “Electric Guru” für Windows genommen. Ich habe Windows XP in einer VM laufen und die serielle Schnittstelle von Linux bis in die VM durchgeschaltet, so dass auch Windows auf diese Schnittstelle zugreifen kann. Funktioniert gut.

Die sehr hohe Empfindlichkeit der Hardware zeigt sich schon darin, dass bei fehlender Abschirmung die Störstrahlung im Raum durch Telefon, Netzleitung, Handy etc. massiv sichtbar sind. Die folgenden beiden Bilder zeigen dies beeindruckend.

Oben: So sehen die Signale aus, wenn der Deckel des Metallgehäuses abgenommen wird (Es sind keine Elektroden angeschlossen). Das erkannte “Hauptsignal” ist zugestopft mit Störstrahlung.

… und so, wenn der Deckel aufliegt. Die Störstrahlung kommt nicht mehr durch.

Kalibrieren der Hardware

Wenn die Hardware funktioniert und die Firmware läuft, muss die Hardware zunächst kalibriert werden. Dieser Vorgang ist ebenfalls auf der OpenEEG Website ausführlich beschrieben. Ich empfehle das Dokument “ModularEEG Testing Tips”, Abschnitt “Troubleshooting, Testing, and Calibration”.

Es geht u.a. darum, den Signalpegel des Analogteils so einzustellen, dass die PC-Software (hier: ElectricGuru) das Signal so bekommt, wie sie es erwartet. Dazu muss die Amplitude eingestellt werden. Die beiden folgenden Bilder zeigen beispielhaft die Situation vor und nach dem Kalibrieren für einen (den unteren) Kanal.

Kalibrieren (“Coarse Trim”) der Hardware. Es liegt im unteren Kanal das oben schon erwähnte Testsignal ( Rechteck, 14Hz, hier nur noch 250µV Amplitude) an. die Amplitude muss justiert werden. Der obere Kanal läuft “frei” vor sich hin.

Bild nach dem Kalibrieren. Die Amplitude ist eingestellt (sie soll zwischen den Werten 256 und 768 oszillieren)

Weiter Bau der Elektroden