Arduino Pushbutton Hack mit IC4066

Hallo Leute,

ich versuche aktuell einen Pushbutton Hack an einem DAB Radio durchzuführen, um die Tastenbelegung anzupassen, da ich die Platine in ein altes Radio einsetzen mag.
Die Steuerplatine des Radios ist seperat mit einem Kabel angeschlossen und besteht aus einem Widerstandsnetzwerk welches bei entsprechendem Tastendruck auf Masse geschalten wird.

Nun aber zu meinem Problem, imitieren der Tasten mittels Transistor funktionierte leider nicht, mittels Optokoppler PC817 funktioniert es, aber manchmal wird ein Tastendruck mehrfach oder gar nicht ausgeführt. Die Einschaltzeit habe ich variiert, trotzdem war das verhalten etwas merkwürdig. Masse wurde natürlich untereinander verbunden.

Für andere Projekte habe ich mir den IC 4066 besorgt, mit dem funktioniert das ganze, mehr oder weniger, gut. Im folgend angehangenen Bild habe ich einmal die Schaltung nachgezeichnet, die Led am Ausgang(Tastereinagng Radio) habe ich lediglich hinzugefügt, um das Schalten sichtbar zu machen, da das Radio keine Änderungen auf dem Display gezeigt hatte.
Lustigerweise funktionierte die Schaltung mit hinzufügen der Led dann sehr zuverlässig, keine Doppelbetätigung mehr, kein überspringen eines Klicks.
Ersetze ich die LED durch einen Widerstand funktioniert das ganze leider nicht mehr.

Hat da jemand eine Idee, was da noch fehlt?
Falls es nur mit einem anderen Baustein möglich ist, was sich nach meinen Recherchen aber als unwahrscheinlich darstellt, muss es unbedingt eine Lösung sein, welche sehr Platzsparend ist.

Eine Idee wäre, mal den Sketch zu zeigen.

void setup() {
  pinMode(7, OUTPUT);
}

void loop() {
  digitalWrite(7, HIGH); 
  delay(1000);                      
  digitalWrite(7 LOW);    
  delay(1000);                       
}

Das wäre der Code, ganz simpel und einfach, nur um den IC erstmal schalten zu lassen und die Grundfunktion zu testen

Keine Tasterabfrage im Code :confounded:

Jau habe ich grade gesehen.. Aber was ist das für eine komische Schaltung ? Wo geht der LED Pin hin? Nun auf 3,3V des Uno... Aber ?? mit etwa 1 K Ohm auf Masse ziehen? reicht da der Strom noch aus? Welcher Strom fließt denn an den Tastern des Radios? Dann ergibt sich ja was noch gemacht werden müsste.

Der Code soll nur das reine schalten ohne Tasterabfrage simulieren, bevor ich mir eine Schaltung zusammenbastel die ich noch 10 mal ändern muss.

Die Led geht auf die 3,3V vom Arduino, deren Masse liegt am Ausgang des 4066 an, an welchem Masse durchgeschalten wird. Die Led ist nur für mich zur kontrolle da, um mir zu visualisieren, dass wirklich eine Änderung am Ausgang des 4066 erfolgt.
Wo siehst du einen 1kOhm Widerstand?
0,3mA wenn ich die Masse mit dem Tastereingang ohne zwischengeschaltenen Widerstand verbinde, wie es auf der originalen Platine für die Powertaste geschalten ist.

Bist Du da ganz sicher?
Wenn's mit der LED geht, mit Widerstand nicht, dann drängt sich mit doch der Gedanke an eine mit Dioden entkoppelte Tastenmatrix auf. Aber ich seh ja nix :wink:

Noch ein Gedanke: nimm mal ein Relais und häng das so wie den 4066 in die Schaltung. Nur damit galvanische Trennung mal ganz eindeutig ist.

Und in Deinem "Schaltplan" stecke ein 7404, das verwirrt natürlich auch wenn Du im Text von nem 4066 schreibst.

Ich mache heute mal ein Bild von der Platine, man erkennt das doch recht gut, da sie nur einlagig ist und sehr simpel gestaltet, auf der Hauptplatine geht's auch direkt in den Microprozessor.

Und mit dem Baustein das ist mein Fehler, hatte den 4066 nicht in Fritzing und es hat die geänderte Beschriftung nicht übernommen :sweat_smile:
Ich teste es heute mal mit einem Relais, eine physische Verbindung über die Widerstände mittels Kabel funktioniert aber einwandfrei, saubere Tastendrucks und alles tasten funktionieren auch. Daher bin ich mal der Meinung, dass es definitiv funktioniert :sweat_smile:

Ich bin nicht ganz schlau geworden aus dem, was Du schreibst...

Wenn Du auf einen gedrückten Button reagieren willst und der nicht bouncen soll, dann musst Du eine zeit abwarten, bis Du wieder auswertest.

Da ich nicht verstanden habe, wie Du Deinen taster da angebaut hast, habe ich den internen Pullup verwendet und der Taster schaltet nach GND.

constexpr byte inputPin[] {2, 3, 4, 5};
constexpr byte pinNums {sizeof(inputPin) / sizeof(inputPin[0])};
constexpr byte outputPin[pinNums] {6, 7, 8, 9};

constexpr bool aus {LOW};
constexpr bool ein {!aus};

constexpr uint32_t bounceTime {40};
//
uint32_t lastSwitchTime[pinNums] {0};

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  for (byte b = 0; b < pinNums; b++)
  {
    pinMode(inputPin[b], INPUT_PULLUP);
    pinMode(outputPin[b], OUTPUT);
    digitalWrite(outputPin[b], aus);
  }
}
//
void loop(void)
{
  checkButton();
}
//
void checkButton()
{
  for (byte b = 0; b < pinNums; b++)
  {
    if (!digitalRead(inputPin[b]))
    {
      if (digitalRead(outputPin[b]) == aus)
      {
        digitalWrite(outputPin[b], ein);
        lastSwitchTime[b] = millis();
      }
    }
    else if (millis() - lastSwitchTime[b] > bounceTime)
    {
      digitalWrite(outputPin[b], aus);
    }
  }
}

Bitte beachte die Konstante àus.

1 Like

Zeichne mal einen Schaltplan der Tastatur.
Grüße Uwe

Also ich Versuche es nochmal etwas einfacher darzustellen, ich Frage keine Taste ab, ich gebe mit dem Code lediglich ein Signal aus, welches einen Tastendruck auf dem Keyboard des Radios simuliert.

Quasi einfach nur um die Schaltung zu testen und zu schauen wie zuverlässig die Aktion des Knopfdrucks ausgeführt wird.

Masse von Arduino, Ic4066 und Radio sind verbunden.
Arduino wird per USB mir Spannung versorgt, der Ic4066 mit 5V vom Arduino und das Radio hat noch eine 18650 Zelle verbaut, welche das Radio versorgt.

Arduino Pin7 geht auf Ic4066 Control 1 --> dieser Schaltet Input 1 (Masse) auf Output 1 durch --> durchgeschaltene Masse geht auf Widerstandsnetzwerk --> am anderen Ende des Netzwerks gehts auf den Tasteneingang des Radios

Die Widerstände wurden vom originalen Keyboard entnommen, also gemessen und auf dem Breadboard entsprechend nachgebildet. Bei physischer Berührung durch Kabel funktioniert "meine Tastatur" auch ohne weiteres.
Das ganze am Arduino funktioniert nicht, es funktioniert nur wenn ich eine LED zwischen den Output des Ic4066 und 3,3V des Arduinos schalte. Diese war NUR zu visualisieren des Tages gedacht, löste aber unverständlicherweise das Problem.

Die ganze Schaltung ist lediglich ein Test und soll keine wahre Funktion haben, außer das wiederholte drücken einer Taste zur Prüfung ob die grundlegende Schaltung so funktioniert.

Nun..., wenn Du erst mal einen Schaltplan zu deiner Hauptplatine erstellst dann wird Dir dein Fehler offenbart :wink: In deinem Post #1 z.B. was bringt es wenn Du GND über R+R+R+R auf GND schaltest? Ist die LED verbaut so kommt über die LED die Spannung x wenn der 4066 nicht geschaltet ist.

Da stehst Du nicht allein. :slight_smile:

Ich habe eine Reihenschaltung von Widerständen wie auf dem originalen Keyboard, je nach dem wo ich meine Masse in der Reihenschaltung anlege, diese Taster wird quasi gedrückt.
Ich könnte auch meinen Ausgang vom 4066 an den ersten Widerstand anlegen, dann bekommt das Radio aber einen anderen Befehl mitgeteilt. Auf der Platine ist es doch genau so geschalten, oder übersehe ich das tatsächlich so arg?
Und der 4066 schaltet ja die Masse über die 4 Widerstände auf den Tasteneingang des Radios durch, nicht auf Masse.

Vielleicht.
Vielleicht schaltet das DIng gar nicht nach GND.
Kannst Du ein Bild machen von der originalen Platine - Ober und Unterseite und wenn möglich mit allen Kabeln da dran.
Schön wäre, wenn man die Chips drauf erkennen könnte, damit man irgendwas hat, mit dem man Recherche betreibt.

Wie schon geschrieben !! Erstelle doch mal einen Schaltplan deiner Platine und Dir wird Erleuchtung kommen ;-). Und @my_xy_projekt wird auch dann erst Dir helfen können. So liegt bei uns allen nur eine Vermutung vor.
Taster
Das vermute ich :wink:

Das könnte passen - ich hab jetzt erst oben die Platinenunterseite gesehen.

Und dann ist das nämlich genau das, was ich meinte.
Da wird zwar GND aktivert, aber wenn da nix ist, was dagegenhält, dann ist das immer GND. :wink:
Allerdings schau mal nochmal, wohin R1 und R110 gehen.

1 Like

Also die Chips habe ich bereits gegoogelt, Spread Sp20, bekommt man einfach kein Datenblatt zu oder anderweitige Informationen.
Dass das Signal schwebt bei der Fernbedienung würde ich auch vermuten, aber ich muss dafür heute nochmal auf der Hauptplatine nachmessen, ob irgendwo ein Pullupwiderstand verbaut ist oder der kleinen Controller sogar einen internen hat, was man so leider nicht rausfindet.

Ich Versuche heute nochmal bessere Bilder der Hauptplatine zu machen, da auf dieser wahrscheinlich irgendwo Pullupwiderstände verbaut sein müssen.
Nach Ground schaltet die Fernbedienung übrigens durch, zumindest hat der Kontakt, welcher sich auf alle Taster aufteilt 0 Ohm gegen Masse am angeschlossenen Akku, daher bin ich mir da schon sicher :wink:



Ja und wozu hast Du dann die Wiederstände? einfach den 4066 parralel zu deinen Tastern und die Funktion ist gegeben :wink: Oder du musst die Leitung auftrennen und deinen Testaufbau da reinbasteln