Komischer Effekt ProMini 3.3V MD_MAX72xx

Hallo,
ich fange gerade ein neues Projekt mit einem ProMini und LED-Matrixanzeigen an. Der Sketch ist bisher nur
ein Test und ist vollständig :

#define DATA_PIN 7
#define CS_PIN   8
#define CLK_PIN  9

#define NUM_MAX 16

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

//--------------------------------------------------------------------------------------------------
// Statische Variablen
//--------------------------------------------------------------------------------------------------

uint64_t sendQueue; // Variable Sendque


#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 16


#define SPEED_TIME  25
#define PAUSE_TIME  1000

MD_Parola p = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

#define ZAEHLER2 0
#define SAUF     1
#define ZAEHLER1 2

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

void setup()
{
  uint8_t channel;
  uint8_t queue;
  uint8_t cnt;

  pinMode(13,OUTPUT);

  for (cnt = 0 ; cnt < 10 ; cnt++)
  {
    digitalWrite(13,!digitalRead(13));
    delay(250);
  }
  digitalWrite(13,LOW);
 
  p.begin(3);
  p.setInvert(false);

  p.setZone(ZAEHLER2,0,3);
  p.setZone(SAUF,4,11);
  p.setZone(ZAEHLER1,12,15);
  p.displayZoneText(ZAEHLER2,"4 Pkt",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);
  p.displayZoneText(SAUF,"AUSTRINKEN",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);
  p.displayZoneText(ZAEHLER1,"1 Pkt",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);

}

int flag = 0;

void loop()
{
  while (!p.getZoneStatus(0))    p.displayAnimate();
  while (!p.getZoneStatus(1))    p.displayAnimate();
  while (!p.getZoneStatus(2))    p.displayAnimate();
  delay(5000);
  digitalWrite(13,!digitalRead(13));
  switch(flag)
  {
    case 0:
    {
      p.displayClear(SAUF);

      p.displayClear(ZAEHLER2);
      p.displayClear(ZAEHLER1);
      p.displayZoneText(ZAEHLER2,"4 Pkt",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);
      p.displayZoneText(ZAEHLER1,"1 Pkt",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);

      p.displayZoneText(SAUF,"AUSTRINKEN!",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);
    }
    break;

    case 1:
    {
      p.displayClear(SAUF);

      p.displayClear(ZAEHLER2);
      p.displayClear(ZAEHLER1);
      p.displayZoneText(ZAEHLER2,"9 Pkt",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);
      p.displayZoneText(ZAEHLER1,"12 Pkt",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);

      p.displayZoneText(SAUF,"NACHLADEN!",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);
    }
    break;

    case 2:
    {
      p.displayClear(SAUF);

      p.displayClear(ZAEHLER2);
      p.displayClear(ZAEHLER1);
      p.displayZoneText(ZAEHLER2,"3 Pkt",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);
      p.displayZoneText(ZAEHLER1,"2 Pkt",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);

      p.displayZoneText(SAUF,"Marcels Saufspiel",PA_CENTER,SPEED_TIME, PAUSE_TIME,PA_SCROLL_LEFT);
    }
    break;
  }
  flag++;
  if (flag == 3) flag = 0;
}

Der zeigt in 3 Bereichen von 4 Display verschiedene Strings an, macht Pause und zeigt neue an.

Ich hatte das ganze zuerst auf einen ProMini 3.3V 8Mhz geflasch und es funktionierte.
Aus Faulheit habe ich einen FTDI mit 5V benutzt. Ich war immer der Meinung ein 328 die 5V immer schluckt
und halt für 3.3V halt maximal 8Mhz machen kann.

Ich habe das auch eine ganze Zeit als Stablitätstest mit 5V laufen lassen. In der endgültigen Schaltung soll
der Prozessor allerdings wirklich mit 3.3V laufen weil da noch ein nrf24l01 angeschlossen werden soll der ja nur
3.3V ab kann. Auf einmal ging mein Aufbau nicht mehr. Das initiale Blinken der LED 13 war zu sehen und
dann war schluss ! Einen anderen Pro Mini 3.3V genommen. Das Selbe nur das das 5 sekündige Blinken
von LED13 zu sehen war. Noch einen Probiert. Das initiale Blinken OK und dann nur noch flimmern auf LED13.
Einen 5V pro Mini genommen → alles OK.

Alle 3 Pro minis 3.3 mal mit einem einfachen Sketch ausprobiert → scheinen zu gehen. Eine LED an immerhin 8
Ports mal blinken lassen.

Dann mal vernünftig aufgebaut → Spannungswandler 3.3V vor den Pro mini → Masse zusammen und die 5V auf die
LEDs. Der 5V Pro mini macht alles richtig sowohl mit 3.3V als auch mit 5V.
Die 3 anderen Pro minis funktionieren auch hier nicht !

Weiter im Takt → einen neuen 3.3V 8Mhz geflascht. Der funktioniert mit 3.3V am Prozessor und 5 an den LEDs.

Habe ich die 3 anderen 3.3V kaputt gemacht ist hier die Frage ? Ich habe sie der Reihe nach in eine andere
Schaltung gepackt die auch einen nrf benutzt und fast alle I/Os benutzt, sowie Stromsparen und Sleepmode.
(Das ist eine Funkfernbedienung für ein spezielles Projekt).

Alle 3 funktionieren einwandfrei !!

Habe ich die jetzt gehimmelt oder nicht ? Oder ist es Zufall das manchmal ein 8Mhz/3.3V läuft.
Ist die MD_MAX72xx nur für >8Mhz tauglich ? (habe dazu nichts gefunden).

Ich hoffe dieses Chaos einigermaßen verständlich rübergebracht zu haben.

Ulli

Ok, mal gucken ob ich das mit dem Bilder einfügen noch hinbekomme.
Viel an Schaltung ist da ja nicht.

Ulli

Ist es möglich das die 3.3V 8Mhz ProMinis Probleme mit SoftSpi haben ?

Ich habe die Pinne mal verändert. In gleicher Reihenfolge 4,5,6 (statt 7,8,9) tut es das zumindenst
auf 2 von denen auf denen es nicht mehr ging.
Auch 5,6,7 funktioniert. Bein 6,7,8 ist wieder Schluss ! Der 5V macht das auf allen Pinnen.

Einer von Vier 3.3Vern ist gar nicht zum arbeiten zu bewegen (spielt aber in meiner Fernbedienung ohne Probleme)
Wenn ich das via Serial.print austeste stürzt der schon im p.begin(3) ab.

Ich schau mal heute Abend was die bei Hardware SPI so machen.

Meine Schaltung kriege ich so ja stabil zum laufen. Was mich jetzt nur nervös macht. Soll ich die ProMinis
die Probleme haben aussortieren ? In der Fernbedienung tun die es ja alle. Mit fast allen IOs mit SPI
und allem Heck und Meck.

Deshalb suche ich einfach nach einer befriedigenden Erklärung.

Ulli

Ein Problem könnte sein, dass die LED-Matrix(en) bei nur 3,3V vom Pro mini auf der SPI-Schnitstelle die Signalspannung zu knapp wird. Und wie versorgst Du die Matrixanzeigen? Wieviel Spannung und vor allem: Wieviel STROM stellst du denen zur Verfügung?
Dann musst Du auch bei SPI auf die Kabellänge achten, dass die nicht zu lang sind, besonders wenn der Pro Mini nur auf 3,3V läuft.

LG Stefan

Mit den Matrixanzeigen habe ich schon beides gemacht -> mit 3.3V versorgt (da bin ich aber nicht sicher
was mein Spannungsregler da schafft) und auch mit 5V. Wenn die Konfiguration funktioniert,
dann funktionieren auch beide Varianten. Die 5V kommen aus einem Netzteil mit max 2500mA.

Aber ich liege doch richtig damit das ich einen 3.3V Pro Mini auch mit 5V betreiben darf, oder ?
3.3V heißt doch nur ->bitte bei 3.3V nur mit 8Mhz betreiben !?

(Wobei ich jetzt auch schon einige 16Mhzer testweise erfolgreich auch nur mit 3.3 betrieben habe)

Ulli

Auch mit HARD-SPI bleibt es komisch. Bei 2 von 4 3.3V ProMinis geht es.

Ich könnte zufrieden sein weil ich eine stabile Konfiguration habe, aber ich
will ja immer alles wissen >:( >:( >:( >:( >:(

Der 5V ProMini macht alles mit auch wenn ich ihn nur mit 3.3V betreibe !

Ulli

Nach 12 mal lesen des "Problems", und dem Wissen, dass ich nicht testen kann, kann ich aber behaupten.
Dass die Behauptung richtig ist, schätze ich auf 50%

Deine Minis werden auf dem Pin, welcher /CS bedient gnadenlos überlastet.
Dadurch reicht die Ausgangsspannung nicht mehr um alle /CS zu bedienen, denn die sind alle (16?) parallel geschaltet.
Gilt auch für den Clock pin. Wobei /CS sicherlich noch zusätzliche 10k Widerstände hat, also stärker belastet wird.

Dass es bei manchen Minis funktioniert, ist Bauteiltoleranzen geschuldet.
Tut also nur, weil Spitz auf Knopf genäht, plus Glück.

Das ist doch mal eine Erklärung die Einleuchtet. Das die ganzen CS'sse parallel liegen,
daran hatte ich nicht gedacht. Eventuell Transistor zum Schalten benutzen ?

Ulli

wegen Schaltung muss ich passen (über einen npn einen pnp schalten?), aber was ich auf alle Fälle machen würde, die Stromeinspeisung auch am Ende vom letzten Modul machen (wenn nicht auch mal in der Mitte).

Noch einmal die Frage nachgestellt : Den 3.3V Pro Mini darf ich auch mit 5V betreiben ?

Also Richtung ist eher so -> Weil der nur mit 8Mhz läuft reichen ihm auch 3.3V ?

Ulli

müsstest du mit einem echten Schaltplan deines Mini überprüfen ob dir da was im wege steht, aber grundsätzlich der Atmel läuft mit einem externen 8Mhz Quartz auch mit 5V.

Hi Ulli,

am Atmel wird es nicht liegen, maximal am AMS1117, der keinen Rückstrom verträgt, also der Fall Ausgang hat Spannung, der Eingang hat weniger, oder ist kuzgeschlossen. Das liegt aber an Deiner Beschaltung. Und unwarscheinlich aber möglich: Es gibt 4.0V Tantal-Elkos, das wäre auf Dauer ungesund.
Also persönliches Ermessen, wird vermutlich zu 99.9% mit 5V auch längere Zeit funktionieren, soll es aber "ewig" funktionieren würde ich es so nicht machen :wink:

Gruß André

Danke für die Antworten.

Die Lösung wird in Levelshiftern bestehen, denn nicht nur CS sondern auch die CLK Leitung
liegt ja parallel von allen 16 Chips an.

Wenn der Onboardspannungsregler hops geht das merkt man wenigstens "vernünftig" :slight_smile: :slight_smile:

Ulli

Habe jetzt alle 3 Leitungen über Pegelwandler geführt.
Der Effekt bleibt merkwürdig. Bei dem einen geht es bei einem anderen nicht.

Ich werde heute Abend mal die Spannungsversorgung etwas verbessern und auch die Panels
"zwischenspeisen".

Ulli

Den 3.3V Pro Mini darf ich auch mit 5V betreiben ?

Die originalen Minis haben eine Brücke um den Regler abzutrennen

Habe jetzt alle 3 Leitungen über Pegelwandler geführt.

Schaltplan geheim, Diagnose unmöglich.

Warum "Schaltplan geheim ?" Der ist doch am Anfang des Threads.

Nur das ich jetzt DIN,CLK und CS über einen bidirektionalen Levelshifter (bzw. 3) geschickt
habe.
Auf der einen Seite +5 auf der anderen 3.3V rein und die Datenleitungen angeschossen.
Das kann ich gerne noch mit rein zeichnen.
Bei den Pro Minis die funktioniert haben funktioniert es damit immer noch, die anderen
zicken weiter.

Ulli

über einen bidirektionalen Levelshifter

Ein bidirektionaler Levelshifter, kann doch nur ins Auge gehen, oder?

Es ist ok, wenn du den konkreten Aufbau, so wie er JETZT ist, geheim halten möchtest.
Aber dann MUSS dir auch klar sein, dass du damit weitere Analysen des Problems AKTIV unterbindest.

Daraus schließe ich, dass du nicht an einem zielführenden Dialog interessiert bist.
Du möchtest deine Probleme gerne behalten.
(aber dann verstehe ich nicht, dass du diese hier ausbreitest)

Also manchmal bin ich über die Reaktionen hier doch ein wenig ... verwundert.
Aber egal :

Als Levelshifter wurde dieser hier verwendet :

LevelShifter

Und noch einmal den aktualisierten Schaltplan:

Ulli

Jetzt ist wieder Kommunikation möglich!
Und ich kann dir mit Bestimmtheit sagen, dass der LevelShifter leider nicht geeignet ist.

Der kann nicht kräftiger runter ziehen, als der Arduino sowieso schon tut.
Denn da ist KEIN Stromverstärker drauf.
Und hoch drücken kann er sowieso nicht. I2C arbeitet da mit Pullups/OpenCollector, nicht wie SPI mit PushPull Digitalstufen.
Bringt also leider nix, das Ding.

Also manchmal bin ich über die Reaktionen hier doch ein wenig … verwundert.

Ich auch …

Wie soll man eine Situation beurteilen können, wenn die wichtigsten Fakten unterschlagen werden?
Welchen Sinn darf ich darin sehen?
Aber ok, die Info ist ja jetzt doch noch gekommen.

Und !? Gibt es eine Lösung ? Oder sind vier Anzeigen einfach zu viel.
Eventuell auf 2x2 umkabeln ?

Ulli