Kleines Nachschlagewerk Informatik
Aatiscope
Worum geht es?
Das Aatiscope ist ein Low-Cost-Oszilloskop. Dieses wird als Bausatz vom Aatis-Verein unter der Bezeichnung AS621 angeboten. Die Messgenauigkeit beträgt 100Hz (also 100 Datensätze pro Sekunde), wenn man alle vier Kanäle gleichzeitig ausliest. Ab Version 12 ist auch eine Abtastrate von 1kHz möglich, wenn man nur einen Kanal nutzt. Eine genaue Beschreibung befindet sich im Praxisheft 21.



Messprinzip
Das Aatiscope hat vier Eingänge. Sensoren (LDR, NTC etc) können einfach zwischen Masse und dem passenden Anschluss geklemmt werden.
Hardware
Angeschlossen wird das Aatiscope über einen seriellen Anschluss. Dazu braucht man einen USB-Seriell-Konverter. Diese Lösung ist, weil die klassische serielle Kommunikation sowohl in Hardware als auch Software einfach zu realisieren ist, eine gute Wahl.

Ein passend programmierter Mikrocontroller sorgt für die Kommunikation mit dem Computer.
Highspeed-Messung
Mit Version 12 der Software und einer neuen Firmware auf dem Controller ist - sofern man sich auf einen Kanal beschränkt - eine Abtastrate von 1kHz möglich. Damit verzehnfacht sich die Messgenauigkeit!

Ist die neue Firmware auf dem Controller, wird diese von der Software beim Start erkannt. Die Details findet man auf der Software-Seite .
Software
Es gibt ein wunderbares Programm, welches unter Windows und Linux läuft. Die Linux-Variante läuft sogar auf dem Wetab. Allerdings muss hier das Aatiscope während des Bootens des Tablets angeschlossen sein.





Die Software findet man hier .
Programmierung (Python)
Möchte man das Aatiscope selbst programmieren, muss man sich nur an das Kommunikationsprotokoll halten und natürlich Zugriff auf die serielle Schnittstelle haben. Da dies unter Java immer noch chaotisch ist, sind die Beispiele in Python angegeben.

Notwendig sind die beiden Importe.

      import serial, time
            
Die serielle Schnittstelle muss geöffnet und initialisiert werden. Einige Ausgaben zur Kontrolle sind mit drin. Das USB-Device kann unter Windows anders heißen.

      ser = serial.Serial(0)
      ser.port = "/dev/ttyUSB0"
      ser.baudrate = 19200
      ser.timeout = 5
    
      print "+++++++++++ "
      print ser.portstr
      print "+++++++++++ "
      print ser
      ser.open()
      print "+++++++++++ "
      print ser.isOpen()
      print "+++++++++++ "
            
Die Kommunikation erfolgt so, dass man einen Init-Aufruf sendet und etwas wartet. Das Aatiscope weiß nun, dass jemand kommunizieren möchte. Dann schickt man eine 0. Das ist der Wunsch nach Messwerten. Als Reaktion auf diese Anfrage kommen 4 Bytes (für jeden Kanal ein Byte). Diese wandelt man noch für die Ausgabe um.

      ser.write("\x6f")
      time.sleep(0.1)
      for i in range(100):
          ser.write("\x00")
          time.sleep(0.1)
          b1 = ord(ser.read(1))
          b2 = ord(ser.read(1))
          b3 = ord(ser.read(1))
          b4 = ord(ser.read(1))
          print str(b1)+" "+str(b2)+" "+str(b3)+" "+str(b4)
            
Man sieht, dass es nicht möglich (aber auch nicht notwendig) ist, sich nur Daten einzelner Kanäle schicken zu lassen. Auch ist die Aulösung der Messwerte auf 256 beschränkt. Am Ende muss die serielle Kommunikation noch beendet werden.

      ser.close()
            
Ein Programm für Lichtschranken
Mit dem Aatiscope kann man einfach Lichtschranken realisieren. Es werden einfach ein oder zwei LDRs an die Eingänge gehängt.





Damit lassen sich Pendelbewegungen analysieren. Fallexperimente wurden auch durchgeführt, aber die Resultate waren nicht so überzeugend.

Ein Python-Programm zur Ansteuerung findet sich hier . Da "Hell" und "Dunkel" immer unterschiedliche Werte liefern, kann das Programm dies einstellen.

Das Programm ist noch sehr buggy und dient eher der Inspiration für eigene Entwicklungen.
Programmierung (Processing)
Auch in Processing lässt sich das Aatiscope wunderbar ansprechen.





Wiederum muss die serielle Schnittstelle geöffnet und initialisiert werden, was hier noch einfacher als in Python ist.

      import processing.serial.*;
      Serial serIO;
      void setup()
      {
          ...
          serIO = new Serial(this, Serial.list()[0], 19200);
          char init = 6*16+15;  // 0x6f
          serIO.write(init);
          ...
      }
            
Die Abfrage erfolgt wie gewohnt: eine Null rausschicken und auf die Antwort warten. Da draw() fortlaufend aufgerufen wird, packt man dies (ohne weitere Schleife) dorthin. b1 - b4 sind gewöhnliche Integer-Variable aus dem Baumarkt.

      char request = 0;
      serIO.write(request);
      b1 = serIO.read();
      b2 = serIO.read();
      b3 = serIO.read();
      b4 = serIO.read();
            
Ein kleines Programm (oder besser eine kleine grafische Spielerei, denn auf eine Eichung wurde komplett verzichtet), welches dies demonstriert, findet sich hier .

Ein Tipp vom Experten
Sollte das AATIScope unter Linux nicht erkannt werden, bitte

      stty clocal -F/dev/ttyUSB0
            
probieren. Dank an Achim Scharfenberg (DL1MK) für diesen Tipp.