Forum: Mikrocontroller und Digitale Elektronik MAX7219CNG, Arduino Uno und Newbie


von Lars W. (thefrozen)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin Neuling in Sachen Elektronik und wollte - in erster Linie als 
Lötübung - eine Uhr basteln, die statt Ziffern LEDs hat.

Dazu sollen drei Ringe mit je 60 Einzel-LEDs über einen Arduino 
angesteuert werden.
Ich bin auf den Max7219CNG gestossen, der das eigentlich relativ einfach 
machen sollte.

Jetzt habe ich einen kleinen Teil des Ganzen mal auf einem Breadboard 
zusammengestöpselt und siehe da - es geht nicht, jedenfalls nicht 
richtig..

Ich habe folgende Probleme:

1. Alle LEDs leuchten im ausgeschalteten Zustand ganz leicht.
2. Schaltet in Row 0 eine LED ein, wird das schwache Leuchten der 
entsprechenden LED auf Row 1 noch schwächer.
3. Ich kann nur Row 0 ansteuern. Row 1 reagiert gar nicht..

Ich habe testweise mal die LEDs umgedreht, das führt zu keiner Änderung.
Angeschlossen sind je acht LEDs an SEGDP bis SEGG und die eine Reihe an 
DIG0, die zweite an DIG1.

Tausche ich DIG0 und DIG1 leuchtet die jeweilige LED-Reihe wie 
gewünscht. Ersetze ich im Code row = 0 durch row = 1 bleibt alles dunkel 
bzw. schwach leuchtend.

Ob ich die Kondensatoren in der Schaltung lasse oder nicht macht keinen 
Unterschied.

Der Quelltext nutzt LEDControl von Eberhard Fahle.


Was könnte das Problem sein?

Den Schaltplan habe ich beigefügt.

Arduino Sheet:
1
#include <LedControl.h>
2
#include <binary.h>
3
/* 
4
 * Now we create a new LedControl. 
5
 * We use pins 12,11 and 10 on the Arduino for the SPI interface
6
 * Pin 12 is connected to the DATA IN-pin of the first MAX7221
7
 * Pin 11 is connected to the CLK-pin of the first MAX7221
8
 * Pin 10 is connected to the LOAD(/CS)-pin of the first MAX7221   
9
 * There will only be a single MAX7221 attached to the arduino 
10
 * LedControl(int dataPin, int clkPin, int csPin, int numDevices);
11
 */
12
LedControl lc1=LedControl(2,4,3,1); 
13
int col = 1;
14
bool coldir = true;
15
int row = 0;
16
17
void setup() {
18
  // put your setup code here, to run once:
19
   //wake up the MAX72XX from power-saving mode 
20
   lc1.shutdown(0,false);
21
   //set a medium brightness for the Leds
22
   lc1.setIntensity(0,8);
23
   lc1.setRow(0,0,B11111111);
24
   delay(100);
25
   lc1.setRow(0,0,B00000000);
26
27
   Serial.begin(9600);  //Begin serial communcation
28
}
29
30
void loop() {
31
  // put your main code here, to run repeatedly:
32
 
33
  lc1.setLed(0, row, col, true);
34
  lc1.setLed(0, 1+row, col, true);
35
  delay(100);
36
  lc1.setLed(0, row, col, false);
37
  lc1.setLed(0, 1+row, col, false);
38
  delay(1000);
39
40
  coldir?col++:col--;
41
  if ( col> 6 ) { 
42
    coldir=false;
43
  }
44
  if ( col<1 ) { 
45
    coldir=true;
46
  }
47
}

Vielen Dank!

Viele Grüße,

Lars

von Klaus (Gast)


Lesenswert?

Lars W. schrieb:
> Lars W.
>         (thefrozen)

Bitte Zeichne deinen hingerotzten Schaltplan bitte neu.
Diesmal aber mit Vorwiderständen pro Led und Vollständiger
Bezeichnungen Leiterbahnen.
Da Blickt doch kein Mensch durch.

von Christian M. (Gast)


Lesenswert?

Klaus schrieb:
> Da Blickt doch kein Mensch durch.

Ist halt Fritzing...

Gruss Chregu

von Klaus (Gast)


Lesenswert?

Lars W. schrieb:
> Tausche ich DIG0 und DIG1 leuchtet die jeweilige LED-Reihe wie
> gewünscht. Ersetze ich im Code row = 0 durch row = 1 bleibt alles dunkel
> bzw. schwach leuchtend.

Also so wie ich es aus dem Datenblatt ersehe hast du deine LED's total
falsch Angeschlossen.

Hier mal ein Link: http:
//www.stefan-buchgeher.info/elektronik/max7219/max7219_dot_matrix_kap3.h 
tml

von Klaus (Gast)


Lesenswert?


von Fritzliebhaber (Gast)


Lesenswert?

Christian M. schrieb:
> Ist halt Fritzing...

Is halt sch.....

von Peter D. (peda)


Lesenswert?

Lars W. schrieb:
> Den Schaltplan habe ich beigefügt.

Da ist rein gar nichts zu erkennen.
An die DIGx kommt der -Pol der LEDs und an die SEGx der +Pol.
Der Stromsetzwiderstand am MAX beträgt 10k.

Klaus schrieb:
> Diesmal aber mit Vorwiderständen pro Led

Vor solchen Falschmeldungen sollte man besser mal ins Datenblatt 
schauen.

: Bearbeitet durch User
von Lars W. (thefrozen)


Lesenswert?

Vielen Dank für die Antworten.

Ich habe bereits viele viele Stunden Schaltpläne, Datenblätter und 
Tutorials gelesen. Die Links sind mir dabei auch untergekommen, haben 
mich aber leider nicht auf die richtige Spur geführt.

Die LEDs habe ich bereits andersrum angeschlossen, wie gesagt ohne 
Änderung.

Den Schaltplan fand ich morgens um halb zwei noch super, jetzt nach 
etwas Schlaf und Kaffee sieht das auch für mich anders aus. ;-) Ich 
werde ihn bei nächster Gelegenheit mit KiCAD neu zeichnen.
Ich bin eben Neuling und muss noch Erfahrungen mit den Tools sammeln.

RSET mit 33k sollte irgendwas bei 20mA und unter 1,5V ergeben, was 
ausreichend sein sollte, damit es leuchtet. Wenn alles soweit läuft 
kommt der richtige Widerstand (?) mit ca. 25,9k zum Einsatz.

LG,

Lars

von Axel R. (Gast)


Lesenswert?

>Hallo,

>ich bin Neuling in Sachen Elektronik und wollte - in erster Linie als
>Lötübung - eine Uhr basteln, die statt Ziffern LEDs hat.

dann das:
1
Autor: Klaus (Gast)
2
Datum: 06.02.2017 06:08
>Lars W. schrieb:
>> Lars W.
>>         (thefrozen)

>Bitte Zeichne deinen hingerotzten Schaltplan bitte neu.
>Diesmal aber mit Vorwiderständen pro Led und Vollständiger
>Bezeichnungen Leiterbahnen.
>Da Blickt doch kein Mensch durch.

Einfach nur frech und ungezogen. Obendrein sehr peinlich!

Wenn ich bei WoT meinen Teamkamerad derart anschieße, werde ich für 24 
Stunden gesperrt. So ewtas sollte man hier auch einführen...
(Nur wie, wenn sich unsere Gäste hier ungestraft auskotzen dürfen)

StromTuner

von Lars W. (thefrozen)


Angehängte Dateien:

Lesenswert?

So, der neue Schaltplan ist fertig. Ich hoffe, der hilft bei der 
Fehlersuche..

Vielen Dank!

von Lars W. (thefrozen)


Lesenswert?

Ich habs hinbekomnmen.
Ein Problem waren die LEDs die tatsächlich immer leicht leuchten.

Dazu kamen dann noch mit Müll gefüllte Register oder Timing-Probleme. 
Ich sollte mir villeicht noch einen 120nF Kondensator statt dem 100nF 
besorgen, damit hatte manch einer wohl gute Erfahrungen gemacht.

LG,

Lars

von Christian M. (Gast)


Lesenswert?

Lars W. schrieb:
> villeicht noch einen 120nF Kondensator statt dem 100nF
> besorgen

Nein, brauchst Du nicht, das ist völlig unkritisch. Vielleicht noch 
einen 1uF parallel dazu, die schlucken dann alles. Und NAHE zum IC!

Gruss Chregu

von Lars W. (thefrozen)


Lesenswert?

Vielen Dank, mach ich!

Beste Grüße,

Lars

von Peter D. (peda)


Lesenswert?

Lars W. schrieb:
> Ein Problem waren die LEDs die tatsächlich immer leicht leuchten.

Müssen ja komische LEDs sein. Ich hatte sowas noch nie beobachtet, 
selbst im völlig dunklen Raum.
Ein Leckstrom des MAX7219 kann es nicht sein, da der ausgeschaltete LEDs 
aktiv in Sperrrichtung schaltet.
Der MAX7221 kann bis zu 1µA Leckstrom haben, sollte aber auch nicht 
stören.

Lars W. schrieb:
> Dazu kamen dann noch mit Müll gefüllte Register oder Timing-Probleme.

Gehts irgendwie konkreter?
Timing ist unwarscheinlich, der MAX7219 kann bis 10MHz ab.

Lars W. schrieb:
> Ich sollte mir villeicht noch einen 120nF Kondensator statt dem 100nF
> besorgen

Ob 47nF, 100nF oder 220nF ist völlig schnurz.
Allerdings fließen durch den MAX doch recht große Impulsströme mit der 
Multiplexfrequenz. Ich schalte daher noch nen Elko 220µF parallel.

von Lars W. (thefrozen)


Lesenswert?

Peter D. schrieb:
> Müssen ja komische LEDs sein. Ich hatte sowas noch nie beobachtet,
> selbst im völlig dunklen Raum.

Das sind spezielle LEDs von Liteon, die praktisch zwei LEDs enthalten, 
eine die stets schwach leuchtet und eine normale. Eigentlich gar nicht 
mal unpraktisch. Ich bin noch unterwegs, kann aber gern die genaue 
Bezeichnung nachreichen.

> Gehts irgendwie konkreter?
> Timing ist unwarscheinlich, der MAX7219 kann bis 10MHz ab.

Die Initialisierung klappt sporadisch nicht. Es klappt häufiger nicht, 
wenn die serielle Kommunikation auch initialisiert wird. Ich habe die 
Kondensatoren so nah an den Chip geholt wie nur möglich und die 
Leitungen zum Arduino kürzer gemacht, seitdem klappt es fast immer. Den 
Rest erschlägt hoffentlich ein größerer Kondensator. Andernfalls nehme 
ich mir die Software genauer vor.

> Ich schalte daher noch nen Elko 220µF parallel.

Danke für den Tipp, ich besorg am Besten mal ein Sortiment. ;-)

LG,

Lars

von Axel R. (Gast)


Lesenswert?

Lars W. schrieb:
> seitdem klappt es fast immer

Es könnte am falschen SPI -Modus liegen. Phasenlage Daten-Takt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.