<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2024-09-13T15:26:58+00:00</updated><id>/feed.xml</id><title type="html">REcassy</title><author><name>Niklas Donocik</name><email>recassy@donocik.name</email></author><entry><title type="html">Update: Fertige Lichtschrankenadapter</title><link href="/2024/09/06/Update-Lichtschranke.html" rel="alternate" type="text/html" title="Update: Fertige Lichtschrankenadapter" /><published>2024-09-06T00:00:00+00:00</published><updated>2024-09-06T00:00:00+00:00</updated><id>/2024/09/06/Update-Lichtschranke</id><content type="html" xml:base="/2024/09/06/Update-Lichtschranke.html"><![CDATA[<h2 id="ziel">Ziel</h2>
<p>In diesem Post zeige ich die ersten voll aufgebauten Lichtschrankenadapter für das Mobile Cassy.</p>

<p>Alle Daten zum Nachbauen sind bei <a href="https://github.com/REcassy/Lichtschrankenadapter-M">Github</a> verfügbar.</p>

<h2 id="errata">Errata</h2>
<p>Zwischen der hier gezeigten Platine und der im github repository verfügbaren bestehen folgende Unterschiede:</p>
<ul>
  <li>die Bezeichnung der Steckbuchsen J4/J5 ist zwischen beiden Board-Varianten unterschiedlich</li>
  <li>der Kondensator C2 ist falsch gepolt</li>
</ul>

<h2 id="platinen">Platinen</h2>
<p><img src="/assets/imgs/PCB-vorne.PNG" width="600px" />
<img src="/assets/imgs/PCB-hinten.PNG" width="600px" /></p>

<p>Hier sieht man beide Platinen-Varianten wie sie von JLCPCB geliefert wurden.</p>

<h2 id="bauteile">Bauteile</h2>
<p>Die benötigten Bauteilen sind hier aufgelistet (Reichelt-Bestellnummern dienen nur als Beispiel):</p>

<table>
  <thead>
    <tr>
      <th>Bezeichnung</th>
      <th>Bauteil</th>
      <th>Formfaktor</th>
      <th>Reicheltnummer</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>U1</td>
      <td>ATiny25</td>
      <td>DIP-8</td>
      <td>ATTINY 25-20 PU</td>
    </tr>
    <tr>
      <td>U2</td>
      <td>USBLC6</td>
      <td>SOT-23-6</td>
      <td>USBLC6-2SC6</td>
    </tr>
    <tr>
      <td>C1, C3</td>
      <td>50V 100nF Keramikkondensator</td>
      <td>1206</td>
      <td>WAL 1206B104K500</td>
    </tr>
    <tr>
      <td>C2</td>
      <td>50V 10µF Elektrolytkondensator</td>
      <td>RM2,5</td>
      <td>SU-A 10U 50</td>
    </tr>
    <tr>
      <td>R1, R2</td>
      <td>0,25W 5K1 Widerstand</td>
      <td>0207</td>
      <td>1/4W 5,1K</td>
    </tr>
    <tr>
      <td>J1</td>
      <td>Mini-Din 6 Buchse</td>
      <td>N/A</td>
      <td>EB-DIOS M06</td>
    </tr>
    <tr>
      <td>J2-J5</td>
      <td>4mm ID, 5mm OD Messingrohr</td>
      <td>N/A</td>
      <td>N/A</td>
    </tr>
    <tr>
      <td>J2-J5</td>
      <td>4mm Laborbuchse</td>
      <td>N/A</td>
      <td>SEP 2610 F48</td>
    </tr>
  </tbody>
</table>

<p>Für die Steckverbinder kann man entweder das selbst zuzuschneidene Messingrohr (günstig aber aufwändig) oder die fertigen Buchsen nehmen.</p>

<h2 id="aufbau">Aufbau</h2>
<p>Zuerst werden die drei SMD-Bauteile bestückt. Dabei ist der ESD-Schutz-Chip USBLC6 der schwierigste, weil er nur im SOT23-6-Formfaktor von Reichelt erhältlich ist.</p>

<p><img src="/assets/imgs/LS-SMD.png" width="600px" /></p>

<p>Die beiden Entkopplugskondensatoren C1 (für USBLC6) und C3 (für ATTiny) sind hingegen recht einfach zu verlöten, da sie im 1206 Formfaktor vorgesehen sind.</p>

<p>Der ATTiny wird idealerweise in einen Sockel gesetzt, was das spätere Austauschen und neu programmieren erleichtert. Er kann aber auch direkt verlötet werden und sitzt dann auf C3 auf.</p>

<p><img src="/assets/imgs/L-Adapter-oben.PNG" width="300px" /></p>

<p>Oben sieht man gut den unter dem Sockel eingesetzten Kondensator.</p>

<p><img src="/assets/imgs/LS-1.png" width="600px" /></p>

<p><em>Oben sieht man die Vertauschung von J5 und J4</em></p>

<p><img src="/assets/imgs/LS-2.png" width="600px" /></p>

<p>Die weiteren Komponenten werden wie üblich eingesetzt und verlötet. Bei der Variante mit den Messingbuchsen hilft es, diese vorher mit einem kleinen Gasbrenner (z.B. Flambiergerät) vorzuwärmen, dann lassen sie sich leichter verlöten. Das Ausrichten der Messingbuchsen fällt tatsächlich schwer, gegebenfalls kann man sich eine kleine Ausrichthilfe per 3D-Druck erstellen.</p>

<p><img src="/assets/imgs/L-Adapter-vorne.PNG" width="300px" /> <img src="/assets/imgs/L-Adapter-2.PNG" width="300px" /></p>

<p>Beim zuschneiden der Messingrohre (Innendurchmesser 4mm, Wandstärke 0,5mm) hilft ein einfacher Rohrschneider:</p>

<p><img src="/assets/imgs/rohrschneider.png" width="300px" /></p>

<h2 id="programmierung">Programmierung</h2>
<p>Programmiert wird der ATtiny mithilfe eines Arduino Uno. Schrittfolge:</p>
<ul>
  <li>Zur Arduino IDE fügt man ATTinyCore als Board-Manager hinzu</li>
  <li>Aus dem Beispielbereich der Arduino IDE lädt man den ISP-Sketch auf den Uno</li>
  <li>Anschließend verbindet man den Arduino mit dem ATtiny (Details siehe <a href="https://github.com/REcassy/Lichtschrankenadapter-M">Github</a>)</li>
  <li>Der ATtiny wird mit “Bootloader brennen” vorbereitet (setzen der E-Fuses)</li>
  <li>Das Programm wird auf den ATtiny gespielt</li>
</ul>

<p><img src="/assets/imgs/LS-Programmierung.png" width="600px" /></p>

<h2 id="funktionsweise">Funktionsweise</h2>

<p>Die Buchsen +5V und GND (rot und blau) können genutzt werden, um die Lampe einer Lichtschranke zu versorgen. Die zulässige Stromaufnahme ist seitens LD nicht dokumentiert, mit 100mA sollte man aber auf der sicheren Seite sein. LEDs sind in jedem Fall zu bevorzugen.</p>

<p>Die beiden Eingänge (schwarze Buchsen, J2 ist Lichtschranke 1, J3 ist Lichtschranke 2) werden wie folgt bedient:</p>
<ul>
  <li>das Cassy zieht J2 auf 5V und J3 auf 3,7 V (der Unterschied muss durch die originale Lichtschranke bedingt sein)</li>
  <li>die an den Adapter angeschlossene Lichtschranke muss diese Spannung jetzt gegen Masse, mindestens aber unter 2V ziehen, um eine Verdunklung zu registrieren</li>
  <li>dafür funktionieren naturbedingt Fotodioden und Fototransistoren</li>
  <li>Fotowiderstände könnten bei richtiger Dimensionierung ebenfalls funktionieren</li>
</ul>

<h2 id="test-mit-fischertechnik-lichtschranke">Test mit Fischertechnik-Lichtschranke</h2>
<p>Da es von Fischertechnik kleine Glühlämpchen und Fototransistoren gibt, lohnt sich folgender Test:</p>

<p><img src="/assets/imgs/ft-lichtschranke.png" width="600px" /></p>

<p>Man beachte den Anschluss des Fototransistors (gelb) zwischen J2 und GND!</p>

<h2 id="gehäuse">Gehäuse</h2>
<p>Im Moment sind die Platinen zur “nackten” Benutzung vorgesehen, ein 3D-gedrucktes Gehäuse ist in Planung.</p>]]></content><author><name>Niklas Donocik</name><email>recassy@donocik.name</email></author><summary type="html"><![CDATA[Ziel In diesem Post zeige ich die ersten voll aufgebauten Lichtschrankenadapter für das Mobile Cassy.]]></summary></entry><entry><title type="html">Klonen eines Relais M</title><link href="/2024/08/24/Relais-Clone.html" rel="alternate" type="text/html" title="Klonen eines Relais M" /><published>2024-08-24T00:00:00+00:00</published><updated>2024-08-24T00:00:00+00:00</updated><id>/2024/08/24/Relais-Clone</id><content type="html" xml:base="/2024/08/24/Relais-Clone.html"><![CDATA[<p>Bitte Errata unten beachten!</p>

<h2 id="hard--und-software">Hard- und Software</h2>
<p>In diesem Beitrag kommt folgendes zum Einsatz</p>
<ul>
  <li>Mobile Cassy WLAN von LD Didactic</li>
  <li>eine Lochrasterplatine (Einzelheiten siehe Aufbau &amp; Schaltplan)</li>
  <li><a href="https://github.com/REcassy/Relais-M">ATTiny-Programm</a> zum initialisieren des Cassy Mobile</li>
</ul>

<h2 id="vorbemerkungen">Vorbemerkungen</h2>
<p>Wie in den beiden Posts zu <a href="https://recassy.github.io/2024/08/16/Relais-Hardware.html">Hard-</a> und <a href="https://recassy.github.io/2024/08/23/Relais-Software.html">Software</a> des Relais M erläutert, reicht ein EEPROM der unter Adresse <code class="language-plaintext highlighter-rouge">00</code> die Katalognummer des Relais eingespeichert hat.
Für bessere Flexibilität wird hier ein ATTiny25 genutzt, der per Arduino ISP und ATTinyCore von einem Arduino Uno programmiert wird.</p>

<h2 id="aufbau">Aufbau</h2>
<p>Nachstehend Bilder von der (nicht ganz so ansehnlichen) Lochrasterplatine</p>

<p><img src="/assets/imgs/breadboard-upside.png" width="600px" /></p>

<p><img src="/assets/imgs/breadboard-underside.png" width="600px" /></p>

<p>Hinweis: Hier ist aus debugging-Gründen noch eine Power-LED angeschlossen. Der untenstehende Schaltplan sieht keine vor.
In einer späteren Version wird ggf. wie beim Original noch ein ESD-Schutz für den Bus hinzugefügt.</p>

<h2 id="schaltplan">Schaltplan</h2>

<p><img src="/assets/imgs/relais-schem.jpg" width="1000px" /></p>

<p>Die Schaltung besteht aus zwei Teilen: Dem ATTiny25-Schaltkreis und dem Relais-Schaltkreis.</p>

<h2 id="platine">Platine</h2>
<p>Im verlinkten <a href="https://github.com/REcassy/Relais-M">Repository</a> sind alle Gerber- und Bohrdaten für die automatisierte Platinenfertigung zu finden.</p>

<p><img src="/assets/imgs/relais-pcb.png" width="600px" /></p>

<p><img src="/assets/imgs/relais-pcb-2.png" width="600px" /></p>

<h3 id="attiny25">ATTiny25</h3>
<p>Der ATTiny ist zunächst an VCC und GND direkt über die Mini-DIN Buchse angeschlossen. Dabei ist grundsätzlich ein Entkopplungskondensator von 10µF in der Leitung sowie ein 100nF Kondensator unmittelbar zwischen beiden Pins auf der Unterseite der Fassung (es gibt auch Fassungen mit eingebautem 100nF-Kondensator).</p>

<p>SDA und SCL sind über jeweils einen 5,1K pull-up Widerstand an die Mini-DIN Buchse angeschlossen.</p>

<h3 id="relais">Relais</h3>

<p>Das Relais hingt hinter einem BC557 PNP Transistor (Emitter an +5V, Basis über 1K Widerstand und 10µF Kondensator an SCK, Collector an Relais-Spule).</p>

<p>Die Ausgänge sind wie folgt beschaltet: im Ruhezustand sind schwarz-blau geschlossen, im Schaltzustand schwarz-rot.</p>

<h2 id="code">Code</h2>
<p>Das <a href="https://github.com/REcassy/Relais-M">ATTiny-Programm</a> ist denkbar kurz und realisiert nur, dass auf die entsprechende Abfrage mit der Katalognummer geantwortet wird.</p>

<h2 id="errata">Errata</h2>
<p>08.09.2024: Mittlerweile sind die Platinen da und aufgabaut. Es zeigt sich, dass der Kondensator C3 überflüssig ist. Tatsächlich führt er in einigen Situation sogar dazu, dass das Cassy das Relais nicht mehr zuverlässig halten kann. Die entsprechende Stelle auf der Platine kann einfach gegen eine Drahtbrücke ersetzt werden:</p>

<p><img src="/assets/imgs/Relaiskarte-oben.PNG" width="300px" /> <img src="/assets/imgs/Relaiskarte-vorne.PNG" width="300px" /></p>]]></content><author><name>Niklas Donocik</name><email>recassy@donocik.name</email></author><summary type="html"><![CDATA[Bitte Errata unten beachten!]]></summary></entry><entry><title type="html">Softwareuntersuchungen an einem Relais M</title><link href="/2024/08/23/Relais-Software.html" rel="alternate" type="text/html" title="Softwareuntersuchungen an einem Relais M" /><published>2024-08-23T00:00:00+00:00</published><updated>2024-08-23T00:00:00+00:00</updated><id>/2024/08/23/Relais-Software</id><content type="html" xml:base="/2024/08/23/Relais-Software.html"><![CDATA[<h2 id="hard--und-software">Hard- und Software</h2>
<p>In diesem Beitrag kommt folgendes zum Einsatz</p>
<ul>
  <li>Mobile Cassy WLAN von LD Didactic und Relais M</li>
  <li>Digital Discovery und Waveforms von Digilent</li>
  <li>ein unter Aufbau gezeigtes Breadboard</li>
</ul>

<h2 id="vorbemerkungen">Vorbemerkungen</h2>
<p>In diesem Beitrag soll die Kommunikation zwischen dem Relais M und einem Cassy Mobile untersucht werden. Außerdem wird die Vermutung aus dem <a href="https://recassy.github.io/2024/08/16/Relais-Hardware.html">letzten Beitrag</a> überprüft, dass das Relais per cleverem Hack an die Clock-Leitung des I<sup>2</sup>C Busses angebunden ist.
Diese Funktion wird dann nachgestellt.
Auf dieser Basis gibt es einen funktionstreuen Nachbau des Relais M der <a href="https://recassy.github.io/2024/08/24/Relais-Clone.html">in diesem Beitrag</a> eräutert wird.</p>

<h2 id="aufbau">Aufbau</h2>
<p>Der Aufbau ist ähnlich zu dem aus dem Beitrag zum <a href="https://recassy.github.io/2024/08/04/MCassy-Lichtschranke.html.html">Mikrofon M</a>. Hier ist bloß ein Relais hinter einem PNP-Transistor ergänzt (Basis an SCK), um die Vermutung zur Beschaltung des Relais zu prüfen.</p>

<p><img src="/assets/imgs/relais-breadboard.png" width="600px" /></p>

<h2 id="initialisierung">Initialisierung</h2>
<p>Nach der gleichen Methode wie bei dem <a href="https://recassy.github.io/2024/08/04/MCassy-Lichtschranke.html.html">Mikrofon M</a> wird der Datenverkehr untersucht. Das Cassy Mobile fragt erneut an Adresse <code class="language-plaintext highlighter-rouge">50</code> das Register <code class="language-plaintext highlighter-rouge">00</code> ab, worauf das Relais antwortet:</p>

<p><code class="language-plaintext highlighter-rouge">40 00 08 00 9E</code></p>

<p>erneut stehen die letzten drei Byte für die Katalognummer des M Relais (524 446). Das erste Byte ist allerdings <code class="language-plaintext highlighter-rouge">40</code> statt <code class="language-plaintext highlighter-rouge">00</code> wie bei dem Mikrofon (ggf. ein Hinweis darauf, dass es ein Output ist bzw. den Eingang nicht belegt, damit dieser vom ADC getrennt wird?).</p>

<p>Anscheinend wurde der EEEPROM hardwareseitig permanent in den “sequential read” modus gebracht, wodurch er beginnend ab der abgefragten Adresse solange weiter die folgenden Bytes ausgibt, bis der Host die I<sup>2</sup>2-Stop-Bedingung auslöst, d.h. den Datenverkeht abbricht (vgl. Kap. 9.3 des Datenblatts von Mikrochip).</p>

<p>Weitere Kommunikation gibt es nicht.</p>

<h2 id="schaltvorgang">Schaltvorgang</h2>

<p>Nachstehend ein Bild aus dem Logikanalysator. Die Intialisierung ist darunter noch einmal vergrößert zu sehen.</p>

<p><img src="/assets/imgs/relais-overview.png" width="600px" /></p>

<p><img src="/assets/imgs/relais-init.png" width="600px" /></p>

<p>Klar erkennbar sind die ausgelösten Schaltvorgänge am Pegel von SCK. Das auf dem Breadboard angeschlossene Relais schaltet zeitgleich mit.</p>]]></content><author><name>Niklas Donocik</name><email>recassy@donocik.name</email></author><summary type="html"><![CDATA[Hard- und Software In diesem Beitrag kommt folgendes zum Einsatz Mobile Cassy WLAN von LD Didactic und Relais M Digital Discovery und Waveforms von Digilent ein unter Aufbau gezeigtes Breadboard]]></summary></entry><entry><title type="html">Hardwareuntersuchungen am Relais M</title><link href="/2024/08/16/Relais-Hardware.html" rel="alternate" type="text/html" title="Hardwareuntersuchungen am Relais M" /><published>2024-08-16T00:00:00+00:00</published><updated>2024-08-16T00:00:00+00:00</updated><id>/2024/08/16/Relais-Hardware</id><content type="html" xml:base="/2024/08/16/Relais-Hardware.html"><![CDATA[<h2 id="hard--und-software">Hard- und Software</h2>
<p>In diesem Beitrag kommt folgendes zum Einsatz</p>
<ul>
  <li>Relais M von LD Didactic</li>
</ul>

<h2 id="vorbemerkung">Vorbemerkung</h2>
<p>Am Beispiel des Relais M soll gezeigt werden, wie durch sorgfältige Analyse des Hardware-Aufbaus eines Sensors bereits Rückschlüsse auf seine Funktion gezogen werden könne.</p>

<h2 id="überblick">Überblick</h2>
<p>Auf der Platine ist folgendes verbaut:</p>
<ul>
  <li>ein Relais mit 5V Spulenspannung</li>
  <li>ein EEPROM 34LC02 (2kBit)</li>
  <li>ein USBLC6-4 ESD-Schutz für den Mini-DIN-Anschluss</li>
  <li>(vermutlich) ein Transistor im SOT 23 Package mit Beschriftung “MP3 Z4” (Datenblatt war nicht auffindbar)</li>
  <li>einer LED</li>
  <li>zusätzlicher Beschaltung, wie Kondensatoren, Widerständen und Brücken (0-Ohm-Widerstände)</li>
</ul>

<p>Bemerkenswerter aber: verbaut ist kein Microcontroller oder SoC. Das bedeutet, dass die I<sup>2</sup>C Kommunikation nicht aktiv gesteuert wird. Wie in einem früheren Post vermutet, handelt es sich um einfache Registerabfragen - in diesem Fall Speicherregister des verbauten EEPROM, der darauf mit dem unter dieser Adresse gespeicherten Daten reagiert.</p>

<p>Anschaulich könnte man sagen: Das Relais hat einen Tag (vergleichbar mit einem RFID-Tag an hochwertigen Produkten im Supermarkt oder an Kleidungsstücken), der separat vom restlichen Sensor die Identifikation übernimmt.</p>

<p>Hier ein Bild des EEPROMs auf der Platine:</p>

<p><img src="/assets/imgs/EEPROM-Relais.PNG" width="300px" /></p>

<h2 id="ansteuerung-des-relais">Ansteuerung des Relais</h2>
<p>Spannend ist also die Frage: Wie wird das Relais zum Auslösen gebracht?</p>

<p>Verfolgt man die Leiterbahnen der Spule, so führt diese zuerst über den (vermeintlichen) Transistor und dessen Basis über einen Kondensator zum SCK (Clock)-Anschluss des I<sup>2</sup>-Busses.
Da der Bus im Ruhezustand durch pull-up Widerstände high (+5V) ist, steuert der (nach Messung) PNP-Transistor nicht aus. Er schaltet erst, wenn seine Basis negativ gegenüber der Versorgungsspannung ist.</p>

<p>Dies wird aber gerade durch herunterziehen des Clock-Signals erreicht. Dies führt zum Abfallen der Basisspannung und damit zum Aussteuern des Transistors.</p>

<p>Leybold betreibt hier gewissermaßen I<sup>2</sup>C-Hacking. Die hoch-frequenten (250 kHz Bustakt) Signale der “normalen” Kommunikation werden nicht ausreichen, um ein Schalten zu erreichen und das Ansteuern des Relais wird von den I<sup>2</sup>C-Geräten als ungültig gewertet, da die entsprechende Start-Bedingung nicht erfüllt ist (schließlich wird nur SCK aber nicht SDA für das Relais verwendet, sodass SDA dauerhaft high bleibt).
Sehr clever!</p>

<p>Überprüft werden soll das im nächsten Beitrag an den zwei logischen Konsequenzen:</p>
<ul>
  <li>Schaltbefehle müssten mit dem Zustand von SCK korrellieren</li>
  <li>Beim Anschalten müsste die Kommunikation der Sensorerkennung zum kurzzeitigen Auslösen führen (ggf. nicht lang genug für das Relais, aber die LED müsste aufleuchten)</li>
</ul>]]></content><author><name>Niklas Donocik</name><email>recassy@donocik.name</email></author><summary type="html"><![CDATA[Hard- und Software In diesem Beitrag kommt folgendes zum Einsatz Relais M von LD Didactic]]></summary></entry><entry><title type="html">Lichtschranken an Mobile Cassy</title><link href="/2024/08/04/MCassy-Lichtschranke.html" rel="alternate" type="text/html" title="Lichtschranken an Mobile Cassy" /><published>2024-08-04T00:00:00+00:00</published><updated>2024-08-04T00:00:00+00:00</updated><id>/2024/08/04/MCassy-Lichtschranke</id><content type="html" xml:base="/2024/08/04/MCassy-Lichtschranke.html"><![CDATA[<h2 id="hard--und-software">Hard- und Software</h2>
<p>In diesem Beitrag kommt folgendes zum Einsatz</p>
<ul>
  <li>Mobile Cassy WLAN von LD Didactic und Sensor Mikrofon M</li>
  <li>Digital Discovery und Waveforms von Digilent</li>
  <li>ein unter Aufbau gezeigtes Breadboard</li>
  <li><a href="https://github.com/REcassy/Lichtschrankenadapter-M">Arduino-Programm</a> zum simulieren einer angeschlossenen Lichtschranke M</li>
</ul>

<h2 id="vorbemerkung">Vorbemerkung</h2>
<p>Die nachfolgenden Überlegungen wurden vom Autor von <a href="http://www.uranmaschine.de/524431.Lichtschranke_M/index.php">uranmaschine.de</a> angeregt.
Ziel soll es sein, eine Art Trigger-Board zu entwerfen, die das Mobile Cassy in den “Lichtschranken-Modus” versetzt und die Beschaltung einer externen Lichtschranke dann über Pins 2 und 6 zu realisieren.</p>

<p>In der verlinkten Darstellung sollte die Bezeichnung “Timer E” bzw. “Timer F” mit etwas Vorsicht genossen werden. Experimente mit dem hier benutzten Mikrofon M legen nahe, dass es sich eher um einfache Analogeingänge handelt und die bei Anschluss der Lichtschranke M lediglich binär abgefragt werden (über Schwellwert -&gt; high, sonst low). Tatsächliche Hardware-Timer wie etwa noch im Cassy-E verbaut wurden, sind hier nicht mehr zu erwarten. Die Zeitmessung wird wohl der ARM-Prozessor im Mobile Cassy übernehmen.</p>

<h2 id="aufbau">Aufbau</h2>
<p>Hier ist der Aufbau, der Digital Discovery Logikanalysator ist an Pins 1 und 5 geklemmt:</p>

<p><img src="/assets/imgs/aufbau-mobile.png" width="600px" /></p>

<p>Ein kurzer Blick zeigt, dass es sich offensichtlich um einen I<sup>2</sup>C Bus handeln muss, mit Pin 1 als Datenpin (SDA) und Pin 5 als Takt (SCK):</p>

<p><img src="/assets/imgs/Logikanalysator.png" width="600px" /></p>

<h2 id="initialisierung">Initialisierung</h2>
<p>Es ist klar zu sehen, dass das Mobile Cassy auf dem I<sup>2</sup>C Bus grundsätzlich Adresse 50h abfragt. Dabei läuft der erste Austausch so, dass das Mobile Cassy die Abfrage:</p>
<blockquote>
  <p>00</p>
</blockquote>

<p>sendet, worauf das Mikrofon M antwortet</p>
<blockquote>
  <p>00 08 00 9A</p>
</blockquote>

<p>Dezimal lautet diese Antwort <code class="language-plaintext highlighter-rouge">524 442</code>, was der Katalognummer des Sensors entspricht.</p>

<h2 id="simulieren-eines-sensors">Simulieren eines Sensors</h2>

<p>Ein einfaches <a href="https://github.com/REcassy/Lichtschrankenadapter-M">Arduino-Programm</a> ist also in der Lage, auf diese Anfrage mit der Katalognummer zu reagieren. Im Bild oben wird eine Lichtschranke simuliert. Der Arduino bedient dabei gleichzeitig Pin 2 (“Timer E”) und schaltet diesen im 750ms Rhythmus um, sodass die angezeigte Periodendauer von 1,5s entsteht.</p>

<h2 id="weitergehende-bemerkungen">Weitergehende Bemerkungen</h2>
<ul>
  <li>Beim Experimentieren mit dem I<sup>2</sup>C Bus hat das Mobile Cassy Werte auch ohne Beschaltung der Pins 2 und 6 Werte an. Auch Versuche mit anderen Sensoren legen nahe, dass Messwerte auch rein über den I<sup>2</sup>C Bus übertragen werden können. Das Cassy Mobile versucht unter anderem auch Adresse 14h auf dem Bus zu erreichen - ggf. gibt es reservierte Adressen für diese Messdaten und die allgmeine Adresse 50h für die “Verwaltung”.</li>
  <li>Die übrige Kommunikation, insbesondere Konfiguration von Messbereichen ist noch unklar.</li>
</ul>]]></content><author><name>Niklas Donocik</name><email>recassy@donocik.name</email></author><summary type="html"><![CDATA[Hard- und Software In diesem Beitrag kommt folgendes zum Einsatz Mobile Cassy WLAN von LD Didactic und Sensor Mikrofon M Digital Discovery und Waveforms von Digilent ein unter Aufbau gezeigtes Breadboard Arduino-Programm zum simulieren einer angeschlossenen Lichtschranke M]]></summary></entry><entry><title type="html">RS232 Sniffing am Cassy Sensor 1</title><link href="/2024/08/01/Sensor1.html" rel="alternate" type="text/html" title="RS232 Sniffing am Cassy Sensor 1" /><published>2024-08-01T00:00:00+00:00</published><updated>2024-08-01T00:00:00+00:00</updated><id>/2024/08/01/Sensor1</id><content type="html" xml:base="/2024/08/01/Sensor1.html"><![CDATA[<h2 id="hard--und-software">Hard- und Software</h2>
<p>In diesem Beitrag kommt folgendes zum Einsatz</p>
<ul>
  <li>Cassy Lab und Cassy Sensor 1 von LD Didactic</li>
  <li>Digital Discovery und Waveforms von Digilent</li>
  <li>ein unter Aufbau gezeigtes Breadboard</li>
  <li><a href="https://github.com/REcassy/cassyspoof">cassyspoof</a> zum abfangen und verändern der Kommunikation zwischen Cassy Sensor und Cassy Lab</li>
</ul>

<h2 id="aufbau">Aufbau</h2>
<p>Hier ist der Aufbau zum Sniffen an der seriellen Schnittstelle des Cassy Sensor 1:</p>

<p><img src="/assets/imgs/aufbau.png" width="600px" /></p>

<p>Verwendet wird der Logikanalysator “Digital Discovery” von Digilent, der hinter einem MAX232 (setzt die Pegel auf TTL um) an RX und TX der seriellen Schnittstelle hängt.
Das Ergebnis sieht so aus:</p>

<p><img src="/assets/imgs/rs232.png" width="600px" /></p>

<h2 id="bitrate">Bitrate</h2>
<p>Sucht man sich das kürzeste Signal raus und ermittelt die Zeitdifferenz kann man daraus die Baudrate bestimmen. Im Startzustand scheint das Cassy Sensor 1 mit 38,4 kbps.
Aufmerksame Leser der Cassy Lab Dokumentation wissen, dass das für die höheren verfügbaren Abtastraten der Sensoren nicht ausreichen kann. Daher kann per Befehl eine höhere Bitrate verhandelt werden. Dazu später mehr.</p>

<h2 id="initialisierung">Initialisierung</h2>
<p>Wählt man den COM-Port an, sendet Cassy Lab</p>
<blockquote>
  <p>1B FF 01</p>
</blockquote>

<p>was das Sensor Cassy mit <code class="language-plaintext highlighter-rouge">01 01 06</code> beantwortet. Die Bedeutung ist noch unklar (ggf. sicherstellen, dass es nicht “irgendein” serielles Gerät ist).
Anschließend sendet Cassy Lab eine Reihe von Nachrichten, die vom Gerät mit <code class="language-plaintext highlighter-rouge">01</code> quittiert werden. Vermutlich handelt es sich dabei um Konfigurationen / Setzen von Registern. Mindestens eine davon wird nur durch die unregistrierte Version von Cassy Lab gesendet, um den internen Zähler des Cassy Sensor hochzuzählen (und ein dauerhaftes Benutzen ohne Aktivierung zu verhindern).</p>
<blockquote>
  <p>1B FF 1C</p>

  <p>1B FF 22 00 00 00 00 00</p>

  <p>1B FF 23 00 00 00 00 00</p>

  <p>1B 00 2F 00 64</p>

  <p>1B FF 2B 00</p>

  <p>1B FF 2C 64</p>
</blockquote>

<h2 id="sensorerkennung">Sensorerkennung</h2>
<p>Anschließend sendet Cassy Lab einige Nachrichten, die mit <code class="language-plaintext highlighter-rouge">01 FF</code> quittiert werden:</p>
<blockquote>
  <p>1B FF 10</p>

  <p>1B FF 11</p>
</blockquote>

<p>Diese werden gehäuft beim Benutzen der Sensoreingänge abgefragt und scheinen das Cassy Sensor zu fragen, ob es Sensoren an den DB-12 Schnittstellen hat.
Diese Vermutung wird dadurch bestätigt, dass ein Antworten etwa mit <code class="language-plaintext highlighter-rouge">01 22</code> zum Erkennen eines Drucksensors führt. Ein Blick in die hilfreiche Tabelle auf <a href="http://www.uranmaschine.de/55112.Cassy-Sensor-Schnittstelle_und_Box-Codierung/">uranmaschine.de</a> zeigt, dass Sensor 34 (also hexadezimal 22) in der Tat ein Drucksensor ist.</p>

<h2 id="demo-zähler">Demo-Zähler</h2>
<p>Danach fragt (das unregistrierte) Cassy Lab nach unserem internen Zähler:</p>
<blockquote>
  <p>1B FF 0E 00</p>
</blockquote>

<p>der mit zwei Bytes beantwortet wird - <code class="language-plaintext highlighter-rouge">01</code> und der Anzahl der bereits erfolgten Zählimpulse (bis maximal hexadezimal 20, also 32). An dieser Stelle kann z.B. <a href="https://github.com/REcassy/cassyspoof">cassyspoof</a> genutzt werden um das zweite Byte <code class="language-plaintext highlighter-rouge">20</code> abzufangen und durch <code class="language-plaintext highlighter-rouge">01</code> auszutauschen.</p>

<h2 id="firmware-version">Firmware-Version</h2>
<p>Schließlich fragt Cassy Lab noch nach unserer Firmware-Version mit</p>
<blockquote>
  <p>1B FF 02</p>
</blockquote>

<p>Cassy Sensor antwortet mit <code class="language-plaintext highlighter-rouge">01 01</code> und der Firmware-Version (bspw. wird 1.37, gelesen als 137 zu <code class="language-plaintext highlighter-rouge">01 01 89</code>).</p>

<h2 id="unbeantwortete-nachrichten">Unbeantwortete Nachrichten</h2>
<p>Bemerkenswert ist, dass alle (bis auf eine) beantworteten Nachricht mit <code class="language-plaintext highlighter-rouge">1B FF</code> beginnen. Denn Cassy Lab sendet weitere, unbeantwortet Nachrichten regelmäßig:</p>
<blockquote>
  <p>1B FE 01</p>

  <p>1B FF 01</p>
</blockquote>

<p><code class="language-plaintext highlighter-rouge">FE</code> als zweites Byte ist sonst nirgendwo zu sehen - gegebenfalls handelt es sich hier um Abfragen über den Cassy Bus (s.u.), um etwaige andere Geräte zu entdecken?</p>

<h2 id="einfache-sensorabfragen-und-cassy-bus">Einfache Sensorabfragen und Cassy-Bus</h2>
<p>Klickt man in Cassy Lab einen der Sensoreingänge an (hier: U<sub>A</sub>), so sendet der PC folgende Anfrage</p>
<blockquote>
  <p>1B FF 12 C8</p>
</blockquote>

<p>die standardmäßig (keine Beschaltung an U<sub>A</sub>) wie folgt beantwortet wird:</p>
<blockquote>
  <p>03 00 01</p>
</blockquote>

<p>Ändert man diese Antwort probeweise mit <a href="https://github.com/REcassy/cassyspoof">cassyspoof</a> in eine zeitegsteuerte Sinuswelle, so zeigt Cassy Lab entsprechend Spannungen zwischen -12 V und 12 V an. Allerdings ist hier Vorsicht geboten - die Cassy Sensoren abreiten mit einer Messtiefe von 12bit und nicht 16bit. Ein Setzen des zweiten Bytes auf <code class="language-plaintext highlighter-rouge">FF</code> liefert also immer Werte, die außerhalb des eingestellten Messbereichs liegen.</p>

<p>Eine Änderung in Cassy Lab auf Spannung U<sub>B</sub> führt zu der geänderten Abfrage</p>
<blockquote>
  <p>1B FF 13 48</p>
</blockquote>

<p>sodass das dritte Byte anscheinend der Messkanal und das vierte (ggf.) das konkrete Gerät am Kanal spezifiziert. Im Fall des fiktiven Drucksensors von oben ändert sich das letzte Byte etwa in <code class="language-plaintext highlighter-rouge">08</code>.</p>

<h2 id="weitergehende-bemerkungen">Weitergehende Bemerkungen</h2>
<ul>
  <li>Die hier gezeigte Form der Messwertsimulierung liefert Werte, die vom eingestellten Messbereich abhängen. Das Cassy Sensor scheint also relative Angaben zu liefern. Um die vollen 12bit Messtiefe auzuschöpfen wäre das auch nur sinnvoll.</li>
  <li>Alle tatsächlich vom Cassy Sensor beantworteten Anfragen beginnen mit <code class="language-plaintext highlighter-rouge">1B FF</code>. Da das direkt folgende Byte die Sensoradresse ist und Cassy Lab zusätzlich Anfragen mit <code class="language-plaintext highlighter-rouge">1B FE 01</code> bis <code class="language-plaintext highlighter-rouge">1B FF 01</code> sendet, die unbeantwortet bleiben, ist davon auszugehen, dass es sich hierbei um die Adressierung etwaiger weiterer Geräte auf dem (von mir hier so genannten) Cassy Bus (grauer 20 pol. Anschluss) handelt. Das legt nahe, dass die RS232 (und in Konsequenz die USB Schnittstelle an Cassy Sensor USB bzw. Cassy Sensor 2) eher als Router zu diesem Cassy Bus und nicht so sehr als direkte Anbindung des konkreten Geräts zu verstehen ist. Das bleibt aber zu überprüfen.</li>
</ul>]]></content><author><name>Niklas Donocik</name><email>recassy@donocik.name</email></author><summary type="html"><![CDATA[Hard- und Software In diesem Beitrag kommt folgendes zum Einsatz Cassy Lab und Cassy Sensor 1 von LD Didactic Digital Discovery und Waveforms von Digilent ein unter Aufbau gezeigtes Breadboard cassyspoof zum abfangen und verändern der Kommunikation zwischen Cassy Sensor und Cassy Lab]]></summary></entry></feed>