schaltplan

Nachdem Ralf Schmitz sein neu erworbenes VIIc aus dem Nachlass von Andreas John fertig gestellt hatte, benötigte es noch einen Zweikanalschalter um die Beleuchtung zu schalten. Zuerst war angedacht, einen alten 7 Kanal Schalter von Conrad zu recyclen, aber der funktionierte irgendwie nicht so richtig und wurde folgedessen entsorgt.
Bisher hatte ich fast immer meine zusammengestümperten Kleinprojekte auf PICAXE Basis gebaut. Da die aber gerade im Bereich der Servosignalerzeugung Defizite haben und auch sonst recht langsam sind (Ok, in dem konkreten Fall hier brauchts wirklich keine Geschwindigkeit), wollte ich jetzt peu a peu auf Arduino umsteigen.
Die Anforderung war also jetzt ein einfacher Zweikanalschalter mit Memory Funktion. Basierend sollte das Dingen auf einem sogenannten Digispark Modul mit ATTiny85. Interessant ist hier, dass das Platinchen einen USB Anschluss hat und zum programmieren in eben diesen gesteckt wird. Kam meiner ärztlich diagnostizierten Faulheit extremst entgegen.

PXL 20231118 112547750

PXL 20231118 112527765

Das Grundgerüst, wie Variablen und Auslesen des Empfängers war recht einfach und schnell zusammengestrickt. Es finden sich dazu auch reichlich Beispiele im Netz. Der Trick war aber, dem Baustein die Memory Funktion (toggeln) beizubringen. Hier habe ich im Internet tatsächlich nichts fertiges gefunden, das ich für meinen Fall anwenden konnte. Also selber überlegen...
Die Lösung lag zuerst in der Abfrage der momentanen Stellung des Tasters. Hier wird gewartet, bis der Taster wieder losgelassen wird bevor der Code weiterläuft. Da dieses Umschalten eigentlich sofort erfolgt, man den Taster am Sender ja nicht andauernd festhält und die Schaltung sonst nichts anderes macht, ist diese Verzögerung im Code vernachlässigbar.
In einem Forum bekam ich von dem User N1d45 dennoch den Hinweis, wie man auch diese Verzögerung umgeht, sodass man das Programm als Teil eines anderen Programms übernehmen kann ohne das Hauptprogramm zu blockieren. Danke dafür! Das Ergebnis steht weiter unten...
Die Schaltzeiten für die LEDs liegen zwischen 0,9ms und 1,3ms, bzw 1,7ms und 2ms. Innerhalb dieser Zeiten werden die korrespondierenden LEDs angesteuert, alles andere führt zum abschalten der LEDs. Dies geschieht im case Statement "Default:". Natürlich kann man hier die Zeiten nach Gusto anpassen.
Zwischenzeitlich habe ich mir auch einen simplen Programmer für die ATTiny85 gebastelt, sodass die Chips direkt programmiert werden können.

PXL 20231118 112617547

PXL 20231118 112644847.MP

Spart Platz auf der Platine und die einzelnen Chips sind auch wieder günstiger als das Digispark Platinchen zu dem trotzdem ja noch "Drumrum" kommt. Natürlich gibts auch wieder einen Schaltplan/Platine zum Projekt.

layout

Der Code


/*zweikanalschalter mit digispark und memoryeffekt */

// Konstanten
const byte RC_CHANNEL_PIN {0}; // pin 0 vom digispark
const byte led1 {1}; // pin 1 vom digispark
const byte led2 {2}; // pin 2 vom digispark

// Variablen
bool button_pressed {false};


void setup()
{
digitalWrite(led1, LOW); //alle led aus
digitalWrite(led2, LOW);
pinMode(led1, OUTPUT); //leds als ausgänge deklarieren
pinMode(led2, OUTPUT);
}

void loop()
{
int ch_2 = pulseIn(RC_CHANNEL_PIN, HIGH, 25000); //rc impuls lesen, zwischen 970-1970

switch (ch_2)
{
case 1700 ... 2000: //1,7 - 2ms
if(!button_pressed) digitalWrite(led2, !digitalRead(led2)); //led einschalten bzw toggeln
button_pressed = true;
break;
case 900 ... 1300: //0,9 - 1,3ms
if(!button_pressed) digitalWrite(led1, !digitalRead(led1)); //led einschalten bzw toggeln
button_pressed = true;
break;
default:
button_pressed = false;
}
}

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.