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 wir auf der R├╝ckseite des Digispark mit Pattex angeklebt und mit GND verbunden. Der andere Anschluss des Taster 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

 


Besucherzaehler

Besucher seit
25.11.2000

>