Frage zu POLOLU Switch

Hallo,

Ich habe nur gerade den Kartenleser und die Ladeenheit angesteckt (POLOLU, 327000 Akku, USB-C, etc wie hier beschrieben) und teste den Akku bzw die USB Lade-Verbindung.

Wenn ich den Akku anstecke und den POLOLU drücke geht die LED am Kartenleser für 2-3 Sekunden an und dann aus.
Wenn ich nun das USB Ladegerät anstecke blitzt die LED am Kartenleser nur kurz auf und es passiert nichts weiter.

Meine Frage lautet nur, was genau soll passieren wenn der Switch gedrückt wird?
Und wie kann ich messen, ob der USB Anschluss korrekt funktioniert bzw lädt??

Blöde Fragen, aber ich stehe im Moment auf dem Schlauch und bräuchte einen Schubs :wink:

Hallo,
mach bitte ein Foto von deinem Aufbau, dann werden wir schnell etwas finden

Trenne doch Mal die Verbindung zu Pin D7. Wenn der Tonuino dann an bleibt, ist in der Software der Pegel des Pin D7 falsch festgelegt. Im Setup muss der Pegel auf LOW festgelegt sein und der StandbyTimers muss den Pegel auf High schalten, damit der Pololu ausschaltet.

@ raznz_snasna

Klar, kann dir gerne Bilder schicken, aber… mmh schau selbst :wink:





Weiß nicht ob du daraus schlau wirst.
Aber eventuell steck ich alles nochmal extra auf ein Breadboard.

@Thomas-Lehnert

Leider ist mir das in meinem Aufbau so nicht möglich, aber ich habe im Setup diesbezüglich nichts eingestellt, nur die typischen, Drei-Button, DFPlayer Mini, etc Einstellungen. Ist das auch in der constants.hpp auszuklammern?

Hallo @Max1
Für den Pololu_Powerswitch musst du in dr Constants.hpp ein paar Ergänzungen machen.
Gleichzeitig an @Boerge1 , Das sollte man generell mit einfügen.

In der constants.hpp die folgenden Ergänzungen machen
Ich habe nur die einzufügenden Codeteile formatiert, so dass dass du sie leicht identifizieren kannst.

Den Part für den Pololu Powerswitch vor den DF-Player definitionen einfügen.
Zum aktivieren des Pololu Powerswitch die Kommentarzeichen entfernen.

#define FIVEBUTTONS
//#define BUTTONS3X3

// ######################################################################

/* If using Pololu Powerswitch uncomment the following lines
 * Wenn der Pololu Powerswitch verwendet wird, den Kommentare der folgenden Zeile entfernen.
 */
//#define Pololu_Powerswitch

// ######################################################################

/* If using Nano Every with connected DfPlayer Rx/Tx to D0/D1 uncomment the following lines

  • Wenn der Nano Every verwendet wird und Rx/Tx vom DfPlayer mit D0/D1 verbunden ist, den Kommentare der folgenden Zeile entfernen
    */
    //#define DFPlayerUsesHardwareSerial

// ######################################################################

.
.
.
.

Fast am Ende der Datei bei Classik folgendes einfügen (im Abschnitt tonuino)

/***************************************************************************
** Classic ****************************************************************
***************************************************************************/

#if defined(TonUINO_Classic) or defined(TonUINO_Every)
// ####### buttons #####################################

inline constexpr uint8_t buttonPausePin = A0;

#if defined(BUTTONS3X3)
inline constexpr uint8_t button3x3Pin = A3;
inline constexpr uint8_t buttonUpPin = A1;
inline constexpr uint8_t buttonDownPin = A2;
inline constexpr uint32_t button3x3DbTime = 50; // Debounce time in milliseconds (default 50ms)
#elif defined(FIVEBUTTONS)
inline constexpr uint8_t buttonUpPin = A1;
inline constexpr uint8_t buttonDownPin = A2;
inline constexpr uint8_t buttonFourPin = A3;
inline constexpr uint8_t buttonFivePin = A4;
#else
inline constexpr uint8_t buttonUpPin = A3;
inline constexpr uint8_t buttonDownPin = A4;
#endif

inline constexpr levelType buttonPinType = levelType::activeLow;
inline constexpr uint32_t buttonDbTime = 25; // Debounce time in milliseconds (default 25ms)

// ####### chip_card ###################################

inline constexpr uint32_t cardCookie = 0x1337b347;
inline constexpr uint8_t cardVersion = 0x02;
inline constexpr byte mfrc522_RSTPin = 9;
inline constexpr byte mfrc522_SSPin = 10;
inline constexpr uint8_t cardRemoveDelay = 3;

// ####### mp3 #########################################

#ifdef DFPlayerUsesHardwareSerial
inline constexpr HardwareSerial &dfPlayer_serial = Serial1;
#else
inline constexpr uint8_t dfPlayer_receivePin = 2;
inline constexpr uint8_t dfPlayer_transmitPin = 3;
#endif

inline constexpr uint8_t maxTracksInFolder = 255;
inline constexpr uint8_t dfPlayer_busyPin = 4;
inline constexpr levelType dfPlayer_busyPinType = levelType::activeHigh;
inline constexpr unsigned long dfPlayer_timeUntilStarts = 1000;

// ####### tonuino #####################################

inline constexpr uint8_t shutdownPin = 7;

// Diesen Part für POLOLU POWERSWITCH einfügen
// diese Zeile vorher löschen
inline constexpr levelType shutdownPinType = levelType::activeLow;

// -------------------------------------------------------------

#if not defined (Pololu_Powerswitch)
inline constexpr levelType     shutdownPinType  = levelType::activeLow;
#endif
#if defined (Pololu_Powerswitch)
inline constexpr levelType     shutdownPinType  = levelType::activeHigh;
#endif

// ------------------------------------------------------------

inline constexpr uint8_t openAnalogPin = A7;
inline constexpr unsigned long cycleTime = 50;
#endif /* TonUINO_Classic or TonUINO_Every */

/***************************************************************************
** AiO plus ***************************************************************
***************************************************************************/

Und noch ein Hinweis, Auf jeden Fall auch den Standbytimer im Adminmenü konfigurieren, damit die automatische Abschaltung funktioniert.
Auch hier nochmal ein Hinweis an @Boerge1
Es wäre sinnvoll, den Standbytimer schon bei den Settings im Code auf 5min vorzukonfigurieren. Ausschalten kann man das über das Adminmenü ja immernoch, falls nicht gewünscht.

Herzlichen Dank, aber jetzt spuckt die Arduino IDE Fehler beim Kompilieren aus.

Folgende Ergänzungen habe ich gemacht:


Ergänzung2

Fehlermeldung der IDE:

In file included from C:\Users\NB04\Documents\Arduino\TonUINO-TNG\src\chip_card.hpp:8:0,
                 from C:\Users\NB04\Documents\Arduino\TonUINO-TNG\src\settings.hpp:8,
                 from C:\Users\NB04\Documents\Arduino\TonUINO-TNG\src\tonuino.hpp:4,
                 from C:\Users\NB04\Documents\Arduino\TonUINO-TNG\TonUINO-TNG.ino:1:
C:\Users\NB04\Documents\Arduino\TonUINO-TNG\src\constants.hpp:359:32: error: redefinition of 'constexpr const levelType shutdownPinType'
 inline constexpr levelType     shutdownPinType  = levelType::activeLow;
                                ^~~~~~~~~~~~~~~
C:\Users\NB04\Documents\Arduino\TonUINO-TNG\src\constants.hpp:357:32: note: 'constexpr const levelType shutdownPinType' previously defined here
 inline constexpr levelType     shutdownPinType  = levelType::activeHigh;
                                ^~~~~~~~~~~~~~~

exit status 1

Compilation error: redefinition of 'constexpr const levelType shutdownPinType'

:frowning: Was nun?

Entferne mal die Klammern bei
#if not defined (Pololu_Powerswtch)
und
#if defined (Pololu Powerswitch)

War mir nicht ganz sicher, ob die erforderlich waren oder nicht.

Du musst die alte Zuweisung
inline constexpr leveltype shutdownPinType …
unter dem neu eingefügten löschen.

Constants.hpp habe ich soweit angepasst, der Upload funktioniert auch :+1:, aber das Verhalten ist dasselbe.
Spannungen scheinen soweit korrekt zu sein. Eventuell probier ich das mit D7 mal aus.

[edit]
Hab jetzt D7 mal „abgeklemmt“ und nun bleibt der TonUINO tatsächlich an. Wie muss ich denn nun die constats.hpp korrekt einstellen?

In der constants.hpp musst du die Kommentarzeichen vor # define Pololu_Powerswitch entfernen. Dadurch wird der Code angewiesen, den Pin D7 im Setup auf LOW-Pegel zu setzen. Der Standbytimer (wenn aktiviert) setzt nach Ablauf D7 auf HIGH und dadurch wird der Pololu ausgeschaltet.
Wenn du ein Multimeter hast, überprüfe doch mal ob der Pegel an D7 stimmt.
Er muss beim und nach dem Einschalten auf LOW bleiben. Bei aktiviertem StandbyTimer muss der Pegel nach ablauf des Timers auf HIGH gehen.

Beim und nach dem Einschalten ist D7 gegen Masse auf LOW.
Wie funktioniert der bzw wie lang ist die Dauer des StandbyTimer/s?

Ich konnte meinen Feler auf dieses DIY Shield eingrenzen. Ich finde partout nicht den Feher. Vielleicht kann jemand kurz einen Blick drauf werfen? Ich habe mir auch extra die Mühe gemacht diese noch von händisch auf ordentlich umzusetzen, damit niemand etwas zu bemäkeln hat.

Zur Info der DFPlayer Mini ist auf einem anderen Shield, dass aber standalone problemlos funktioniert, es muss also an diesem liegen.

:pray:

Kontrolliere doch Mal, ob der Anschluss 7 auf deinem Board auch wirklich zum Pin D7 des Arduino geht. Eventuell liegt da schon der Fehler. Den StandbyTimer musst du über das Adminmenü konfigurieren. In der Software ist er nach dem Aufspielen nicht aktiviert.

Du kannst auch in der settings.cpp den Standbytimer vorkonfigurieren. Wenn du den Wert für standbytimer auf 5 setzt, so wie im Codeauszug unten, ist der Standbytimer auf 5 min voreingestellt. Zum Testen kannst du den Wert auch auf 1 für eine Minute setzen. Dann ist er immer automatisch gesetzt, kann aber im Adminmenü auch deaktiviert oder für eine andere Dauer konfiguriert werden.
Nach dem Aufspielen des geänderten Codes musst du die Settings durch gedrückt halten der drei Tasten beim Einschalten resetten, damit der neue Wert aktiv wird.

void Settings::resetSettings() {
  LOG(settings_log, s_debug, F("resetSettings"));
  cookie               = cardCookie;
  version              =  2;
  spkMaxVolume         = 25;
  spkMinVolume         =  5;
  spkInitVolume        = 15;
  eq                   =  1;
  dummy                =  0;
  standbyTimer         =  5;
  invertVolumeButtons  =  1;
  shortCuts[0]         =  { 0, pmode_t::none, 0, 0 };
  shortCuts[1]         =  { 0, pmode_t::none, 0, 0 };
  shortCuts[2]         =  { 0, pmode_t::none, 0, 0 };
  shortCuts[3]         =  { 0, pmode_t::none, 0, 0 };
  adminMenuLocked      =  0;
  adminMenuPin[0]      =  1;
  adminMenuPin[1]      =  1;
  adminMenuPin[2]      =  1;
  adminMenuPin[3]      =  1;
  pauseWhenCardRemoved =  0;
  hpMaxVolume          = 25;
  hpMinVolume          =  5;
  hpInitVolume         = 15;

  writeSettingsToFlash();
}

void Settings::loadSettingsFromFlash() {

Bist du schon weiter gekommen?
Prüfe Mal folgendes. Verbindung vom Pin D7 zum Pololu ist hergestellt. Multimeter an Ground und Pin Off vom Pololu. Tonuino einschalten, dabei Multimeter beobachten ob Pegel auf LOW bleibt. Ist das der Fall, und der Pololu schaltet trotzdem ab, könnte ein Störimpuls irgendwo auf dem Weg vom Arduino zum Pololu eingestreut werden. Um das abzufangen, kann man folgendes tun.
Füge einen Widerstand von 2,7 bis 4,7 kOhm auf deinem Shield in die Leitung Punkt 7 zum OffPin des Pololu ein. Hinter den Widerstand fügst du einen Elko von 1 bis 2,2uF gegen Ground ein. +Pol an Off Pololu, - an Ground. Das sollte auf jeden Fall irgendwelche Störsignale eliminieren.

Hallo,

ich habe mir eine kleine Auszeit gegönnt, um frische Energie zu sammeln, da ich einfach nicht weitergekommen bin.
Aber danke auch für die Tips und Unterstützung.

Also Frage 1 - Ja, D7 hat Durchgang.

Frage 2: Ich bin mir nicht sicher ob es am Code liegt, deswegen will ich da noch nicht rumpfuschen

Frage 3: Beim Einschalten ( im Batteriebetrieb und nicht am Netzteil) liegt auf GND - D7/POLOLU Off 0,05 V für ein paar Sekunden an

Hallo Max
Also, die Ergänzung in der constants.hpp für den Pololu hast du gemacht?
Mache bitte auch die Änderung in der settings.cpp indem du den Wert für den Standbytimer auf 5 änderst. Damit ist der Standbytimer schon aktiviert und du musst ihn nicht erst im Adminmenü konfigurieren…
Teste nun nochmal folgendes.
Die Verbindung D7 zum Off anschluss des Pololu trennst du auf, so dass der Tonuino erstmal an bleibt.
Das Multimeter schließt du an D7 und Ground an und beobachtest den Pegel.
Den Tonuino lässt du im Pausemodus. nach 5 Minuten sollte der Pegel an D7 auf High gehen. Wenn das funktioniert, ist das schon mal gut und die Bestätigung, dass der Timer funktioniert. Dann stelle die Verbindung D7 Pololu/Off erstmal provisorisch wieder her und teste erneut. Wenn alles richtig ist, sollte der Tonuino nach 5 min ausschalten. Wenn der Tonuino sofort wieder abschaltet, probiere mal die Variante mit dem Widerstand und dem Kondensator aus. Probiere auch mal aus, ob es was nützt wenn du den On Button länger drückst so 3 bis 5 sekunden.

Hallo Thomas-Lehnert,

ja die Ergänzungen in der constants.hpp habe ich bereits getan, wie in den vorherigen Posts bestätigt, auch die Korrektur.

Die settings.cpp habe ich eben geändert. Die Voreinstellung war ursprünglich auf 0 eingestelt und ist nun auf 1 geändert.
Testaufbau wie gefordert und mal laufen lassen im Akkubetrieb.
Spannung liegt bei etwa 170-180 mV und nach einer Minute kein Standby.

[edit]
Na super!!!

Hatte jetzt einen Versuch auf dem Breadboard aufgebaut und nun ist mir mal wieder der DFPlayer abeschmiert. Das geht mir jetzt langsam auf den Geist, die Dinger sind extrem empfindlich.

Wieder DFPlayer bestellen, die kann ich schon im 10er Pack kaufen :frowning: :grimacing:

Ich muss mal überdenken ob ich zu einer normalen Powerbank wechsel, da habe ich das Ärgernis nicht.
[/edit]

Du bist aber auch ein Pechvogel. Irgendwas ist da faul. Mir ist noch nie ein Player abgeraucht, aber das heißt ja nix. Kann es sein, dass dein Arduino eine Macke hat. Hast du Programmierkenntnisse? Dann würde ich empfehlen, ein kleines Testprogramm zu schreiben, dass nur den Pololu anspricht. Also etwa so:
Im Setup den Pin D7 auf Low setzen.
Dann einfach ebenfalls im Setup ein delay(10000);
Danach setzt die den Pin D7 auf High. In die Loop brauchst du gar nichts schreiben.

Die Funktion ist dann wie folgt. Du schaltest den Arduino über den Pololu ein. Nach 10 Sekunden wird über D7 der Pololu und damit auch der Arduino wieder ausgeschaltet.
Testen müsstest du das dann mit Akku. Wenn du den Test mit USB Kabel am PC oder Laptop machst, kannst du den Pegelverlauf auch mit dem Multimeter an Pin 7 beobachten, weil der Arduino dann nicht abschaltet, da über USB weiter mit Strom versorgt.

Hallo @Max1
Hier mal ein kleiner Testcode. Den spielst du auf deinen Arduino auf.
Deinen Tonuino kannst du so lassen wie er ist. Die Baugruppen werden einfach nicht angesprochen, nur der Pin D7 um den Pololu auszuschalten.
Im Ser Monitor kannst du erstmal sehen ob der Code durchläuft. Du kriegst da ein paar Meldungen angezeigt.
Zum Testen ob der Pololu wirklich über D7 ausgeschaltet wird, musst du den USB Stecker abziehen und nur mit Akku testen.
Pololu mit High am ON Pin einschalten. Nach 12 Sekunden muss er wieder ausgehen, wenn alles richtig funktioniert. Als Indikator kann die LED des RFID Readers dienen. Da siehst du, ob das an und Abschalten funktioniert.

#define ShutDownPin 7 

void setup() {
   Serial.begin(115200);
   Serial.println("Ich bin jetzt eingeschaltet");
  pinMode(ShutDownPin, OUTPUT);
  digitalWrite(ShutDownPin, LOW); // Voreinstellung des D7 beim Einschalten
  Serial.println("In 10 Sekunden soll ich wieder ausschalten " );
  delay(10000);                   // 10 Sekunden warten
  Serial.println("Die 10 Sekunden sind jetzt um " );
  Serial.println("Ich schalte jetzt  AUS " );
  delay(2000);                   // noch 2 Sekunden warten, dann ausschalten
  digitalWrite(ShutDownPin, HIGH);// Ausschalten des Pololu mit High Pegel an OFF

}

void loop() {
  // put your main code here, to run repeatedly:

}