Samstag, 10. August 2013

Innenansichten: Blutdruckmessgerät Sanoquell 329

... ein Handgelenk-Blutdruckmessgerät, dass 2006 von der Stiftung Warentest mit "Gut" bewertet wurde. 


Sanoquell 329 
von Bosch+Sohn GmbH u. Co. KG


Einfach in der Bedienung: Anlegen, Startknopf drücken und der Rest geht automatisch. Es speichert 30 Messwerte, hat eine Abschaltautomatik ...




... und muss jetzt mal geöffnet werden.

Die ersten zugänglichen Schrauben befinden sich im Batteriefach.



Diese verschließen jedoch nicht das Gehäuse,sondern sorgen für den Halt der Manschette. Mit etwas vorsichtigem Kraftaufwand kann man die Manschette nach dem Entfernen der Schrauben von der Pneumatik lösen.



2 weitere Schrauben kommen dann zum Vorschein, mit denen das Gehäuse geöffnet werden kann.



Die Platine ist auf einem Kunststoffhalter fixiert und zeigt neben den beiden Tastern S1 (Start) und S2 (Memory) drei weitere Pads für einen S3: zwei links von S2 und einer links von S1. 



Auf der Rückseite befindet das elektronisch Herz des Gerätes: ein (TMP86) CH29BUG Microcontroller mit 16k ROM, 1,5k RAM, 39 I/O Pins, getaktet mit 4,19 MHz.




Der rote Aufdruck links lässt als Produktionsdatum den 26.11.2007 vermuten.
Links vom Microcontroller ist die Beschaltung der Analogeingänge des A/D Wandlers mit den Drucksensoranschlüssen. Unterhalb befinden sich die Schaltstufen für das Ablassventil und die Pumpe.

Unter dem Kunststoffhalter kommt die Pneumatik zum Vorschein:

     1 = Pumpe
     2 = Drucksensor
     3 = Ablassventil
     4 = Überdruckventil
     5 = Manschetteneinlass




Der Zusammenbau verlief dank verschraubbarem Gehäuse problemlos, was sich im normalen Blutdruck widerspiegelt. 





Noch funktioniert das Gerät, aber ...

Wofür sind die S3-Pins?
Was sollen die vielen Jumper (JP) ?
Was kann man mit den Pins 15-17 (serielle Schnittstelle) alles anstellen? 

Fragen, die noch eine Antwort suchen ...

Donnerstag, 18. Juli 2013

Innenansichten: Wetterstation TFA WS-9015

Bei einem stabilen Hoch ist man nicht auf eine Wetterstation angewiesen. Also kann man mal einen Blick riskieren ...

TFA WS-9015
 von TFA-Dostmann, Modell-Nr. 35.1018
 




















Geöffnet wird das Gerät rückseitig durch Entfernen von 4 Kreuzschlitzschrauben.
Zum Vorschein kommt eine Platine, die wiederum mit 10! (in Buchstaben: ZEHN) Schrauben an der Gehäusefront befestigt ist.


Ganz oben befinden sich die Bauteile des Empfängers für den Aussensensor. Unterhalb der Batterieklemmen ist der Feuchtigkeitssensor und ein Piezo für die Weckalarmierung zu finden. Im unteren Bereich sichtbar: der Temperatursensor und die Ferrit-Antenne zum Empfang des DCF77 Zeitzeichensignals.




Nach dem Lösen der 10 Schrauben und des Handkrampfes, kann die Displayseite der Platine besichtigt werden. Das Display ist mit zwei gummierten Kontaktleisten auf die Platine aufgesetzt und wird durch das Gehäuse am rechten Platz gehalten. Ein guter Grund 10 Schrauben zum Fixieren zu verwenden.




Oben wieder die Emfängerbauteile. Sehr gut zu erkennen ist die Antenne und der Schwingkreis aus einstellbarem Kondensator und Spule:





Rechts neben dem vergossenen Empfänger-IC befindet sich der Drucksensor.

Im unteren Drittel - ebenfalls vergossen - der Controller und das Uhren-IC. Die beiden Quarze haben keinen Aufdruck. Ich tippe beim Uhrenquarz jedoch auf die üblichen 32.768 Hz. Ganz Unten die 4 Taster zum Einstellen des Gerätes.




Dank der soliden Verschraubung war der Zusammenbau problemlos und das Gerät funktioniert weiterhin.
 
Hier findet man unter der Modellnummer die Bedienungsanleitung: http://tfa-dostmann.de
Oder direkt:  35.1018_g.pdf

Donnerstag, 11. Juli 2013

Musik - Schritt für Schritt (Teil 6): Einzug ins neue Gehäuse

Die Puzzleteile wurden zusammengefügt und an manchen Ecken musste noch gefeilt werden, damit es funktioniert - sowohl bei der Hardware, als auch bei der Software.



Die Frontplatte mit den Bedienelementen besteht aus Sperrholz und neigte zum Verbiegen unter Belastung. Eine umlaufende Einfassung in Alu-Profile gibt nun Stabilität und erleichtert das Befestigen an den Seitenteilen. Die Längsseiten habe ich noch offen gelassen, damit ich in der Testphase die Frontplatte nach oben aufklappen kann. 2 von 4 Befestigungsschrauben dienen als Scharnier.
Die Seitenteile sind vorerst aus MDF Plattenresten gefertigt. Wenn sich die Konstruktion als tauglich erweist, werde ich sie durch Massivholz ersetzen.



Beim Zuklappen des Gehäuses zeigt sich Widerstand durch die vielen Kabel am SPI-Board. Evtl. werde ich dieses Board durch eine gedruckte Schaltung ersetzen.



Während das SPI-Board an der Frontplatte verschraubt ist, sind Encoder-Board, Arduino und MIDI-Board am Boden verschraubt.
Auf dem Arduino ist ein Connector Board aufgesteckt, über das die Verkabelung der Komponenten erfolgt:





Schaltplan:



Bestückungsplan:




Ein Testprogramm sollte die Funktionen aller Komponenten prüfen und kann in die Step Sequencer Software als "Service Programm" integriert werden.



Bereits beim Erstellen fielen die ersten Hardwarefehler auf:

 1. Dank fehlender Masseverbindung versagten die Oktave-Taster und -LEDs ihren Dienst - schnell behoben. 

2. Das Connector Board hatte korrodierte Kontakte und entsprechend Kontaktprobleme. Die sogenannten "stackable Header" für den Arduino waren dann wohl doch nicht vergoldet, sondern eine preiswertere Legierung. Ich habe das Board gegen ein neues mit soliden vergoldeten Stiftleisten ersetzt.


 


3. Ein fehlender Pull-Up Widerstand an der RESET Leitung des SPI-Boards bewirkte unvorhersehbare Reaktionen der SPI ICs.

Kniffliger war das Problem mit  der MCP23S17 Library. Aber dank Hilfe auch das lösbar.

   


Um die weitere Programmierung zu vereinfachen, habe ich zuerst eine Header-Datei mit der Pin-Belegung des Arduino Megas erstellt. Abschließend ergab sich folgendes Programm zum Testen der gesamten Hardware:  Download

Hier ein Testablauf:





Tests erfolgreich bestanden! 
Nun kann die eigentliche Programmierung der Step Sequencer Routinen erfolgen.

[... wird fortgesetzt]


Musik - Schritt für Schritt (Teil 5): MIDI Board

... die Verbindung zur Aussenwelt.




Das MIDI Board ist quasi eine Verdopplung des MIDI-Shields: 2x MIDI In, 2x MIDI Out. Die Anbindung am Arduino Mega2560 erfolgt an den Pins von Serial2 (16, 17) und Serial3 (14, 15).

Serial(0) schied aus, da sie auch beim Software-Update angesprochen wird. Es käme bei MIDI Nutzung zu unschönen Effekten bei den angeschlossenen Geräten, die ich beim MIDI-Shield mit einem Schalter umgangen habe. Dies schien mir hier unpraktikabel.
Serial1 habe ich freigelassen, um evtl. die Interupts 4 und 5 noch später nutzen zu können. Eine Vorverkabelung ist jedoch schon vorhanden, so dass eine Erweiterung um ein 3. MIDI Interface möglich wäre.

Schaltplan:




 Bestückungsplan:




 Bauteilliste:





Downloads:    Eagle Files

[... wird fortgesetzt]

Freitag, 5. Juli 2013

Das Mega2560 und MCP23S17 Problem

Die Hardware des CSQ1 Step Sequencers hat sich weiterentwickelt. Nun stehen die Hardwaretests an und offenbaren auch das ein oder andere Software-Problem bzw. noch offene Bildungslücken.

Wie im Post Musik - Schritt für Schritt (Teil 4): Erste Gehversuche mit Koffer gezeigt, funktioniert das SPI-Board. Die Hardware ist nun aus dem Koffer ausgezogen und in ein "neues Heim" eingezogen.






Um mehr als nur eine MIDI Schnittstelle zu haben, habe ich den Arduino Uno gegen den Mega2560 getauscht. 

Jedoch das SPI-Board gab kein Lebenszeichen von sich. Spannungsversorgung und Verbindungskabel waren in Ordnung. Eigentlich hätte es funktionieren müssen. Testweise den Uno angeschlossen: geht.

Ein Anschließen eines Micro SD-Card Breakout an den Mega2560 zeigt, dass das SPI funktioniert. Ein Internet Recherche brachte keine Ergebnisse. Es hat den Anschein, als hätte noch niemand diese Hardware-Kombination betrieben, bzw. Probleme damit.

Es gab nur noch ein Glied in der Kette, dass ich nicht untersucht habe: die Software und hier speziell die MCP23S17 Class von Cort Buffington. Irgendwo in deren Tiefen muss die Ursache des Problems zu finden sein. 
Die Suche konzentrierte sich auf Angaben zu den verwendeten SPI-Pins, die sich zwischen Uno und Mega unterscheiden:

      UNO  MEGA
MOSI   11   51
MISO   12   50
SCK    13   52
SS     10   53

In der Datei MCP23S17.cpp fand  ich die Zeile:

#define    SS            (10)          // SPI bus slave select output to pin 10 - READ ARDUINO SPI DOCS BEFORE CHANGING!!!


Die (10) habe ich in (53) geändert, weil dies beim Mega mein Slave Select Pin ist. Aber auch nach dieser Änderung verweigerte das SPI-Board weiterhin den Dienst.

Erst eine Anfrage im Arduino Forum brachte den entscheidenden Hinweis. Ein freundlicher Mensch namens Nick Gammon aus Melbourne, seines Zeichens "Global Moderator" im Forum machte mich auf diese Zeilen im Code aufmerksam:


  PORTB &= 0b11111011;                                 // Direct port manipulation speeds taking Slave Select LOW before SPI action


  PORTB |= 0b00000100;                                 // Direct port manipulation speeds taking Slave Select HIGH after SPI action
}



Mit diesen Zuweisungen wird der Zustand von Port B (8 pins, B0-B7) direkt verändert.
&= bedeutet dabei eine bit-weise UND-Verknüpfung und |= eine bit-weise ODER-Verknüpfung.


Pin:   B7 B6 B5 B4 B3 B2 B1 B0
   UND  1  1  1  1  1  0  1  1
      -------------------------
     = B7 B6 B5 B4 B3  0 B1 B0

Pin:   B7 B6 B5 B4 B3 B2 B1 B0
  ODER  0  0  0  0  0  1  0  0
      -------------------------
     = B7 B6 B5 B4 B3  1 B1 B0



Ergebnis: durch diese Zuweisungen wird Pin B2 auf 0 bzw. 1 gesetzt, während der Zustand aller anderen Pins unverändert bleibt. Und ein Blick auf das Pin-Mapping des Arduino Uno Boards zeigt, dass Pin B2 dem Arduino Pin 10 entspricht.

Die Lösung: beim Arduino Mega2560 liegt Pin53 (SS) auf dem ATmega Pin B0. Ich musste demnach die entsprechenden Codezeilen in der Datei zu



  PORTB &= 0b11111110; bzw. PORTB |= 0b00000001;

ändern.
Gespeichert - getestet - geht!

Many thanks to Nick Gammon for support and also many thanks to all Arduino Forum members for spreading their knowledge. Keep it up!


Mittwoch, 19. Juni 2013

JY-MCU Bluetooth Modul am Arduino

Beim Chinesen um die Ecke (eBay) waren Bluetooth Module im Sonderangebot. Warum also nicht testen? - getreu dem Motto: "Everything is better with bluetooth.":


 Das "Platinchen" hat etwa die Breite eines kleinen Fingers und dessen halbe Länge:



Darauf befindet sich neben einen Spannungswandler für die Versorgung der ICs von links nach rechts:

MX29LV800CB
        8M-BIT [1Mx8/512K x16] CMOS SINGLE VOLTAGE 3V ONLY FLASH MEMORY

CSR BC417
        Single Chip Bluetooth® v2.0+EDR System

... und die markante Bluetooth-Antenne.

Auf der Rückseite ist die Anschlussbelegung ersichtlich. Die Pins VCC, GND, TXD und RXD sind mit einer gewinkelten Stiftleiste bestückt. Als Versorgungsspannung kommen die vom Arduino gelieferten 5V in Frage. Als Send-Empfangs-Pegel sind 3,3 V angegeben. Es wird sich zeigen, dass die Pins meines Moduls auch mit dem 5V Pegel zurecht kommen, ohne dass das Modul schaden nimmt.





Die Board Version wird mit V1.05 angegeben, beim Anmelden meldet sich das Modul als "HC-06" und verlangt die Eingabe des Codes "1234".

Links zu weiteren Informationen:
m2.img.dxcdn.com/CDDriver/sku.121326.pdf
http://air.imag.fr/mediawiki/index.php/Wireless_Bluetooth_RS232_TTL_Transceiver_Module

Der Versuchsaufbau


2 Leitungen zur Spannungversorgung, die beiden anderen Leitungen werden wie folgt angeschlossen:


          JY-MCU    Arduino Mega
            TXD <----> RX1 
            RXD <----> TX1 

Über die Serial 1 findet also die Kommunikation mit dem JY-MCU statt, die Serial 0-Schnittstelle wird zum Monitoring benutzt. 

Zum Testen des Datenaustauschs habe ich den MultiSerialMega-Sketch aus der Arduino-Beispielsammlung abgeändert:

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  // read from port 1, send to port 0:
  if (Serial1.available()) {
    int inByte = Serial1.read();
    if( inByte ){
      Serial1.write("*");
    }     
    Serial.write(inByte);
  }
 
  // read from port 0, send to port 1:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.write(inByte);
  }
}



Wenn nun das JY-MCU Modul auf dem Serial 1 Port via Bluetooth empfangene Daten an den Arduino liefert, werden diese am Serial Monitor sichtbar und zusätzlich via Bluetooth dem ursprünglichen Sender durch eine Anzahl von * quittiert,  die der Anzahl der empfangenen Zeichen entspricht.

Als Sender den PC zu nutzen, der auch am Arduino zum Monitoring hängt, erschien mir dann doch etwas langweilig. Stattdessen habe ich als Sender ein Android Smartphone mit der App LM BT Terminal benutzt. Das Finden und Anmelden funktionierte auch hier problemlos.


... und hier die "Empfangsseite" als Serial Monitor Ausgabe:



Hin- und Rückrichtung der Bluetooth Verbindung funktionieren demnach.
Danach habe ich mir die Schnittstellenpegel angeschaut. Leider bisher nur in Senderichtung. Das Programm habe ich so erweitert, dass der JY-MCU ständig das Zeichen "x" sendet. Für Android habe ich noch keine passende App gefunden, die ähnliches erlaubt oder mit der man eine ausreichend große Datei seriell übertragen könnte. Wer suchet, der findet ...

Messaufbau: einfach mit dem Oszilloskop am RXD Pin messen.


Einstellung: 5 V/cm vertikal und 0,2 ms/cm Zeitbasis horizontal



Das Signal im Detail:
Es handelt sich um einen asynchronen seriellen Datenstrom, mit 9600 bit/s, 8 Datenbits, ohne Paritätsbit, und einem Stopbit - kurz: 9600 8N1



Der Datenstrom wird also mit einem Spannungspegel von 5 V an das JY-MCU Modul übergeben.

Jetzt interessiert mich noch der Pegel, den das Modul an den Arduino liefert. Einerseits sollten es 3,3 V sein, aber das wäre nicht ausreichend für den Arduino. Andererseits funktioniert in der Praxis die Kommunikation. Sind es nun 5 V oder nur 3,3 V? 
Also weiter nach einer brauchbaren App suchen, um einen messbaren Empfangsbitstrom zu erzeugen. Wer eine kennt, bitte melden. (Sonst muss ich noch selbst eine programmieren).


[Fortsetzung folgt ...]

Samstag, 8. Juni 2013

GPS-Mouse RoyalTek RGM-2000

Ich habe sie beim Aufräumen wieder gefunden. Ursprünglich war die GPS-Mouse zum Anschluss an die Vpower Teleskopsteuerung gedacht. Da ich mich damals jedoch nicht entscheiden konnte, wo ich genau die Stecker an der Vpower anbringe (Handbox oder Hauptgerät), habe ich die Idee nicht weiter verfolgt.





Nun ist die RoyalTek RGM-2000 wieder aus der Versenkung aufgetaucht und hat meine Neugier geweckt.
Da der Stecker der GPS-Mouse nicht zu gebrauchen war, wurde er durch eine einfachere Zugangsmöglichkeit ersetzt:


Kabelbelegung der RGM-2000:


                           rot = +5 V
                       schwarz = GND
                          gelb = TX
                          weiß = RX


Die GPS-Mouse habe ich an den Arduino Mega angeschlossen, weil er hardwareseitig mehrere serielle Schnittstellen hat.

Anschluss:


GPS-Mouse TX --> Arduino Pin 18 (RX1)
GPS-Mouse RX --> Arduino Pin 19 (TX1)

Mit dem Programm "MultiSerialMega" und dem seriellen Monitor kann man ohne großen Aufwand die NMEA 0183 Datensätze sichtbar machen (NMEA = National Marine Electronics Association).



Bei mehreren Inbetriebnahmen der Schaltung dauerte es zwischen 50 s und 2 Minuten bis ein gültiger Datensatz generiert wurde.





NMEA 0183 definiert, dass der Sender die Daten gemäß RS-232 (z.B. serielle Schnittstelle am PC) bereitstellt. Die Übertragungsgeschwindigkeit beträgt 4800 bit/s. Die Daten werden im ASCII-Format (American Standard Code for Information Interchange) bereitgestellt.
Geliefert werden von der RGM-2000 zwei Datensätze:

$GPGGA,174916.918,4912.3456,N,00612.3456,E,1,05,1.8,183.9,M,47.8,M,0.0,0000*7A
$GPVTG,,T,,M,0.00,N,0.0,K*7E


Der Inhalt wird auf der Web-Site http://www.NMEA.de beschrieben. 
Das erste Datenfeld (Komma als Trennzeichen) bedeutet:

$GP = GPS
GGA = Global Positioning System Fix Data
VTG = Track made good and Ground speed

Der GGA-Datensatz setzt sich wie folgt zusammen:

174916.918 = Zeit (UTC) im Format hhmmss.sss
 4912.3456 = Breitengrad im Format XXYY.ZZZZ ⇒ XX°YY'(0.ZZZZ * 60)" 
         N = Nord
00612.3456 = Längengrad im Format XXXYY.ZZZZ 
         E = Ost
         1 = GPS Signalqualität (0 - fix not available, 1 - GPS fix,
             2 - Differential GPS fix )
        05 = Anzahl der empfangbaren Satelliten (00 - 12)
       1.8 = horizontale Abweichung
     183.9 = Höhe der Antenne über dem Geoiden (eine idealisierte Form 
             der Erde zu Messzwecken)
         M = Einheit des vorherigen Datenfeldes = Meter
      47.8 = Abweichung des  WGS-84 Ellipsoiden vom Geoiden
         M = Einheit des vorherigen Datenfeldes = Meter
       0.0 = Alter des differential GPS Datensatzes
      0000 = Differential GPS Referenz Stations ID, 0000-1023
         * = Ende des Datensatzes (Payload)
        7A = Prüfsumme des Datensatzes


Der VTG-Datensatz enthält folgende Felder:

leer = Richtung in ° (leer, weil sich der Empfänger nicht bewegt hat)
   T = True (geografische Richtung)
leer = Richtung in °
   M = Magnetic (Richtung gemäß Magnetfeld)
leer = Geschwindigkeit in Knoten
   N = Knoten
leer = Geschwindigkeit in km/h
   K = km/h
   * = Ende des Datensatzes (Payload)
  7E = Prüfsumme


Ein Programm, um die Daten zu visuallisieren ist VisualGPS.
Man kann nach Auswertung mehrerer Datensätze z.B. erkennen, dass die mittlere Genauigkeit - hier beim Empfang von 3 bis 5 Satelliten - ca. 6 m im Breitengrad und 5 m im Längengrad betrug: