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!