Problem mit Arduino Pro Micro und LED Matrix

Guten Abend,

Ich verwende eine LED welche von einem MAX7219CNG angesteuert wird zusammen mit der LEDControl.h Library auf einem Arduino Pro Micro. Um es Bequem zuhaben habe ich die Pin's der LEDMatrix auf die Pin's 4,6,5 verlegt von 8,10,9 (sonst wäre ein PIN auf der anderen Seite des Arduino's). Das Problem welches bei mir besteht ist folgendes, sobald die Stromzufuhr einmal unterbrochen wird zeigt die LEDMatrix nur noch sehr langsam die Vorgegebenen Dinge an. Sobald ich allerdings das Programm erneut auf den Arduino Hochlade klappt alles Wunderbar.

Im Anhang ist noch das Programm, es soll die Lautstärke der Musik darstellen wie bei Stereoanlagen üblich (die Balken) und nach innen Verzögern. Klappt bis auf das oben beschriebene Problem ganz gut.

Lg Siki

Lautstaerke_ProMicro_V3.0.ino (6.44 KB)

Macht es das auch, wenn du die ursprünglichen Pins verwendest? Vielleicht werden diese unbedingt benötigt. Ich hatte mal ein Problem mit der RTC, weil ich das LCD zur Ausgabe auf einem doppelt verwendeten Pin angeschlossen hatte (SDA, SCL).

Ich vermute, die Pins werden durch die Library schon bestimmt. Evtl. wird ein bestimmter Timer benötigt.

Hm, irgendwie habe ich dein Problem nicht nachstellen können.
Vielleicht solltest du das Serial.begin auch auskommentieren, wenn du Serial nicht nutzt.
Ansonsten müsstest du eigentlich mitwhile (!Serial) ;auf die Schnittstelle warten, damit startet der Sketch allerdings erst nachdem eine Verbindung besteht.

Insgesamt ist dein Kode sehr kompliziert, nutzt in erster Linie globale Variablen, völlig unnötig floats und benutzt numerierte Variablen.

Ich finde meine Version deutlich übersichtlicher, die Intensität habe ich runtergedreht, um den Stromverbrauch zu senken (bei Betrieb des Displays ohne eigene Stromversorgung).

#include "LedControl.h"

const byte DataIn = 4;
const byte CLK = 5;
const byte CS = 6;
const byte NumberofMatrix = 1;
const byte right = A1;
const byte left = A2;

LedControl lc(DataIn, CLK, CS, NumberofMatrix);

byte voll = 0;
byte volr = 0;
byte disp[8];

void setup() {
  lc.shutdown(0, false); // wakeup call
  lc.setIntensity(0, 1); // very low value
  lc.clearDisplay(0);
}

void loop() {
  volr = readVolume(right);
  voll = readVolume(left);
  writeVolumes();
  delay(20); //something between 20 and 10 looks good
}

byte readVolume(byte port) {
  int volsum = 0;
  for (byte num = 0; num < 4; num++) {
    volsum += analogRead(port);
  }
  return volsum / 4 / 125;
}

void writeVolumes() {
  for (byte idx = 0; idx < 3; idx++) {
    disp[3 - idx] = disp[2 - idx];
    disp[4 + idx] = disp[5 + idx];
  }
  disp[0] = 0xFF00 >> volr;
  disp[7] = 0xFF00 >> voll;
  for (byte idx = 0; idx < 8; idx++) {
    lc.setRow(0, idx, disp[idx]);
  }
}

Das die Pin's von der Library bestimmt werden, habe ich mir auch schon überlegt, dann ergäbe die Möglichkeit zur Definition der Pin's keinen Sinn, denn diese ist von LedControl.h auch bei den Beispielen von Anfang an enthalten.
Trotzdem werde ich heute NM das ganze mal mit den Standadrpin's ausprobieren.

Das das ganze relativ Komplex ist gestehe ich zu, programmieren tu ich aber noch nicht allzulange und zum vereinfachen des Programms komme ich noch. Das war nur mal so, dass es funktioniert.

Der Stromverbrauch spielt keine Rolle, ich betreibe das ganze mit einem Netzteil welches genug Strom liefern kann.

Lg Siki

Siki:
Der Stromverbrauch spielt keine Rolle, ich betreibe das ganze mit einem Netzteil welches genug Strom liefern kann.

Wenn die LEDs ihren Strom vom Arduino beziehen und nicht direkt vom Netzteil, spielt das und die Spannung des Netzteils durchaus eine Rolle.

Dein Kode hat einen Fehler (der keinen Einfluss auf das Eingangsproblem hat), auf den der Compiler hinweist:

Lautstaerke_ProMicro_V3.0.ino: In function 'void writeVolumerightOnMatrix()':
Lautstaerke_ProMicro_V3.0.ino:152:36: warning: 'f[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]

Wenn du diese Warnung nicht erhältst, solltest du 'Compiler Warnings' in den Voreinstellungen überprüfen.

Danke für eure Bemühungen. Die Compiler Warnungen waren auf aus, habe jetzt auf alle umgestellt. Zum testen wegen den Pins bin ich noch nicht gekommen. Was mir noch in den sinn kam, ist das auch der Arduino selbst Mist baut mit den delay's und es deshalb nur so langsam angezeigt wird. Muss es wohl mal auch noch an einem anderem Arduino testen.

Lg Siki

Habe heute einen kleinen Test gemacht. Ein simples Ledblink Programm, sobald hochgeladen funktionierte es wie gewünscht, sobald die Stromverbindung getrennt wurde und wiederhergestellt dauerte die ganze Blink zeit viel Länger. Demnach kann es nur noch am Arduino selbst liegen da nur die LED auf Pin10 angeschlossen war und auch keine zusätzlichen Library's verwendet wurden.

Wahrscheinlich ist es einfach ein fertigungsfehler beim Arduino. Order habt ihr noch eine andere Idee?

Lg Siki

Habe heute einen kleinen Test gemacht. Ein simples Ledblink Programm, sobald hochgeladen funktionierte es wie gewünscht, sobald die Stromverbindung getrennt wurde und wiederhergestellt dauerte die ganze Blink zeit viel Länger.

  1. Kann nicht sein. :wink:
  2. Kann eigentlich kein "fertigungsfehler beim Arduino" sein.
  3. Da du dir das ja nicht zum Spass ausdenkst, wird es interessant.

Also:

  • Der Arduino ist Arduino/Genuino Micro kompatibel (atmega32U4 mit bootloader und USB-Schnittstelle)

  • Der Sketch ist das Standard-Blink auf Pin 13

  • Der Sketch wird über die IDE und das USB Kabel per bootloader hochgeladen
    . als Board hast du in der IDE den Micro ausgewählt ?

  • Der Sketch blinkt direkt nach dem laden mit 0.5 Hz ( wie programmiert, zwei mal delay(1000); )

  • Nach Entfernen des USB-Kabels und (was genau um ihn zu starten?) blinkt der Pin viel langsamer, (und zwar ?)

Dritte Frage: was passiert nach einem Reset, (wenn der Micro weiter am USB Kabel hängt) ?

oh, du hast wohl sowas, ohne RST Taster oder Pin, stimmts?

Ja ich habe den Pro Micro. Die Lösung das die Delay's nach einer Stromunterbrechung wieder korrekt sind habe ich heute gefunden. Wurde genau mit dem gleichen arduino im Englischsprachigen teil dieses Forums mal behandelt. Der Bootloader war der Störefried, sobald der einmal aktualisiert wurde (in meinem Fall Arduino Uno an PC dann 6 Kabel auf Pro Micro), war der Spuck der längeren delays nach einer Stromunterbrechung vorbei. Hier noch der Verweis auf das andere Thema mit dem Gleichen Problem: Arduino Pro Micro running slow after disconnect from USB - Installation & Troubleshooting - Arduino Forum
und hier die Lösung welche ich verfolgt habe: Tech @Joshfire // Upgrading the bootloader on Arduino Micro with...

Sich nochmal mit der Lösung melden ist super !

Guten Abend,

Ich wollte heute wiedereinmal etwas programmtechnisch modifizieren. Ich konnte ohne probleme Kompilieren aber wenn ich hochladen möchte kriege ich immer diese hübsche fehlermeldung:

Arduino: 1.6.10 (Mac OS X), Board: "Arduino/Genuino Micro"

Der Sketch verwendet 7.968 Bytes (27%) des Programmspeicherplatzes. Das Maximum sind 28.672 Bytes.
Globale Variablen verwenden 332 Bytes (12%) des dynamischen Speichers, 2.228 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.560 Bytes.
java.io.IOException: Cannot run program "REMOVE/bin/avrdude": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:485)
at processing.app.helpers.ProcessUtils.exec(ProcessUtils.java:11)
at cc.arduino.packages.Uploader.executeUploadCommand(Uploader.java:130)
at cc.arduino.packages.uploaders.SerialUploader.uploadUsingPreferences(SerialUploader.java:209)
at cc.arduino.UploaderUtils.upload(UploaderUtils.java:78)
at processing.app.Sketch.upload(Sketch.java:1187)
at processing.app.Sketch.exportApplet(Sketch.java:1160)
at processing.app.Sketch.exportApplet(Sketch.java:1132)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2409)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.(UNIXProcess.java:248)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 11 more
Beim Hochladen des Sketches ist ein Fehler aufgetreten

Was kann der Fehler hier für sein? Habe erstgerade gestern auf Arduino 1.6.10 aktualisiert und davor war ich 1.5Wochen weg.

Einen arduino UNO kann ich hingegen ohne weiteres Programmieren.

Lg Siki

Edit: Liegt anscheinend an der Arduino Version 1.6.10, mit 1.6.9 klappt es problemlos