Elektronik_Header_3Lüftersteuerung mit ESP-01

 

Ausschalter für Raspberry Pi

Im Rahmen der Arbeiten für eine unterbrechungsfreie Stromversorgung für meine im Haus verteilten Raspberrys habe ich die Idee entwickelt, anstelle des AtTiny85 einen Digispark zu verwenden. Auf diese Weise wäre man der Notwendigkeit enthoben, dem AtTiny eine Platine spendieren zu müssen.

Die Firmware ist schnell umgestellt, es ist lediglich die Pinzuordnung passend zu setzen, denn beispielsweise die LED ist beim Digispark an PB1 angeschlossen, beim AtTiny_Daemon hingegen an PB4.

Es stellte sich aber heraus, dass durch die interne Beschaltung auf dem Digispark die Signale an PB3 und PB4 nicht auf ausreichende Pegel kommen, denn diese Pins sind mittels Zener-Dioden und Widerständen auf maximal 3,6 V beschränkt.

Diese spezielle Beschaltung schützt den USBPort des Rechners vor zu hohen Spannungspegeln. Um den Digispark dennoch einsetzen zu können, wurden zwei Widerstände entfernt, zusätzlich musste die Polarität der LED umgedreht werden und der LED-Vorwiderstand von GND nach P5V umgelötet werden.

Der so umgebaute Digispark hat dann zwar im Gespann mit dem AtTiny_Daemon auf dem RasPi funktioniert, da aber noch andere Bauteile auf dem Digispark vorhanden sind, die einem Energie sparenden Betrieb entgegen stehen, habe ich diese Idee nicht weiter verfolgt.


Mit der passenden Parametrierung des Daemon auf dem RasPi hingegen, kann selbst der nicht modifizierte Digispark prima als Ausschalter für den RasPi dienen.

Dem dem Digispark hinzugefügten Taster fällt dann die Aufgabe zu, dem RasPi die Aufforderung zum ordentlichen Shutdown zu übermitteln, so dass der RasPi auch ohne Bedienoberfläche heruntergefahren werden kann.

Das ordentliche Herunterfahren ist geboten, weil den Raspberrys zu eigen ist, beim Abschalten der Versorgung im Betrieb gerne mal die SD-Karte mit dem Betriebssystem zu zerschießen.

Um den Digispark am RasPi anschließen zu können, bekommt er einen 8-poligen Stecksockel, der direkt an den Spannungsanschlüssen angelötet wird. Die beiden Signale SCL und SDA der I²C Schnittstelle werden mit dünnen Drähten mit den IOs des AtTiny verbunden, zusätzlich wird der Taster auf die Unterseite des Digispark geklebt und ebenfalls passend verdrahtet. Er verbindet GND mit PB3.

Soweit mechanisch vorbereitet kommen wir zur Firmware für den Digispark.

Die Pinzuordnung wird im Programm angepasst, anschließend wird der Digispark über USB geflasht.

Leider funktioniert aber die Kommunikation über I²C zwischen AtTiny und RasPi  bestenfalls sporadisch, wenn überhaupt.

Die Untersuchung hat ergeben, dass die Taktfrequenz des Digispark mit 16,5 MHz prinzipiell ungeeignet ist. In der Firmware wird überprüft, ob der AtTiny mit 8 MHz betrieben wird. Ist das nicht der Fall, wird der Betrieb verweigert.

Hintergrund:
Der AtTiny-Daemon muss mit 8 MHz betrieben werden, da er im Normalfall mit der Akkuspannung von 3,7 V betrieben wird, was laut Datenblatt einen sicheren Betrieb bei 16 MHz ausschließt.

Die Möglichkeit, den Digispark einfach über USB zu programmieren hingegen, erfordert eine Taktfrequenz von genau 16,5 MHz, um das kritische Timing auf dem USB einhalten zu können.

Diese beiden Anforderungen schließen sich also prinzipiell gegenseitig aus.

Ein Ausweg aus dem Dilemma findet sich durch die Möglichkeit, die Taktfrequenz des AtTiny zur Laufzeit, also nach dem Upload der Firmware über USB, zu ändern. Hier bietet sich die Verwendung des OSCCAL Registers an. Über dieses Register kann die Frequenz des eingebauten RC-Oszillators in recht weiten Grenzen verändert werden.

Ein paar Versuche später findet sich ein passender Wert von 108 für OSCCAL, der im Anlauf angewandt, zusammen mit der Umstellung des “Clock division factor” auf 2, die Frequenz auf passende 8 MHz umstellt.

Diese Umstellung zur Laufzeit erfolgt in der vorhandenen Routine check_fuses().

Folgender Code wird zusätzlich eingefügt:

 if (fuse_low == 0xF1)
  {
  
clock_prescale_set(clock_div_2);  // clock_div_2 resolves to 1 resulting in 8 MHz at runtime
   OSCCAL = 108;                     // trim clock to exactly 8 MHz
  
return;
  }

0xF1 für fuse_low ist die Standard Einstellung für Digispark.

 

Die wesentlichen Parameter aus der Konfigurationsdatei auf dem RasPi, die den Betrieb als Ausschalter ermöglichen, sind:

  • button function = shutdown -> fahre den RasPi bei Tastendruck herunter
  • reset configuration = 1 -> EXT_V wird nicht beachtet
  • primed = 0 -> den RasPi nach dem Runterfahren nicht wieder starten

Die anderen Parameter bleiben unverändert gegenüber der Default Einstellung.

Wie die den Daemon für den RasPi bildenden Dateien auf den RasPi kommen und wo sie dort abgelegt werden müssen, ist im Wiki von Joachim ausführlich beschrieben. Es schadet im Übrigen nicht, den Rest des sehr umfangreichen Wiki ebenfalls zu lesen und zu verstehen.


Zum Schluss noch ein paar Baustufenfotos und den fertig aufgebauten Digispark.

Die Einzelteile Taster, Digispark und Stecker.

Digispark mit Zubehör

Der Stecker stammt von einem PC Motherboard und diente dem Zusammenfassen von mehreren einzelnen Steckern zum einfachen Anschließen. Der Stecker hat 10 Pole, alle bis auf zwei werden direkt oberhalb des Plastikkörpers abgeschnitten.

Stecker für Raspberry Pi

Die Drähte für SDA und SCL werden angelötet.

Stecker für Raspberry Pi

Der Taster wird auf der Rückseite des Digispark mit Pattex angeklebt und mit GND verbunden. Der andere Anschluss des Tasters wird mit einem Draht an PB3 angeschlossen.

Stecker und Taster am Digispark montiert

Fertig bestückt...

Stecker und Taster am Digispark montiert

... und an Ort und Stelle bereit für den Einsatz.

Ausschalter am Raspberry Pi montiert

 


Beim Aufruf dieser Funktion werden Daten an Google in USA übermittelt. Neben Ihrer IP-Adresse wird auch die URL der besuchten Seite übertragen.
Besucherzaehler

Besucher seit
25.11.2000