Led's die oplichten met een lagere helderheid

Geachte

Ik heb een led matrix gekocht om te programmeren met Arduino.Ik heb alles ondertussen juist verbonden, maar ik stuit altijd op hetzelfde probleem.

Als ik in mijn testcode twee leds oplicht zijn er twee andere leds die ook branden met een lagere helderheid. Ik heb geprobeerd om de volledige matrix uit te schakelen tussen de loops, weerstanden verplaatsen van rijen naar kolommen, maar dit verhelpt het probleem niet.

// Datasheet and ledmatrix I used
//http://www.farnell.com/datasheets/1631380.pdf (703-0194)
//Source: http://www.local-guru.net/blog/2009/04/03/5x7-led-matrix-on-my-arduino


/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
---Diagram of led matrix---
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
The numbers are the pins of the led matrix. The "O" are the leds.

  14 13  12  11  10 9 8 
   O   O   O   O   O
   O   O   O   O   O
   O   O   O   O   O
   O   O   O   O   O
   O   O   O   O   O
  1  2  3  4  5  6  7 

%%%%%%%%%%%%
---Wiring---
%%%%%%%%%%%%
This is the syntax:
==> Arduino Digital OUT | MATRIX Pin in (row/column *number*) <==
2|9 (row 1)
3|14 (row 2)
4|8 (row 3)
5|12 OR 5, they're connected! (row 4)
6|1 (row 5)
7|7 (row 6)
8|2 (row 7)
9|13 (col 1)
10|3 (col 2)
11|4 OR 11, they're connected!(col 3)
12|10 (col 4)
13|6 (col 5)

You have to connect for example pin 2 with pin 9 of the led matrix (watch the scematic), that's the second from right
*/

int c1 = 9; //column 1, pin 9 of arduino
int c2 = 10;
int c3 = 11;
int c4 = 12;
int c5 = 13;

int r1 = 2; //row 1, pin 2 of arduino
int r2 = 3;
int r3 = 4;
int r4 = 5;
int r5 = 6;
int r6 = 7;
int r7 = 8;


//%%%%%%%%%%%%
//---Setup---
//%%%%%%%%%%%%

void setup() {
  //These are the columns
  pinMode( 9, OUTPUT );
  pinMode( 10, OUTPUT );
  pinMode( 11, OUTPUT );
  pinMode( 12, OUTPUT );
  pinMode( 13, OUTPUT );

  //These are the rows
  pinMode( 2, OUTPUT );
  pinMode( 3, OUTPUT );
  pinMode( 4, OUTPUT );
  pinMode( 5, OUTPUT );
  pinMode( 6, OUTPUT );
  pinMode( 7, OUTPUT );
  pinMode( 8, OUTPUT );

}

void loop() {
  
  //light up r1,c1
  digitalWrite(r1,LOW);
  digitalWrite(r2,HIGH);
  digitalWrite(r3,HIGH);
  digitalWrite(r4,HIGH);
  digitalWrite(r5,HIGH);
  digitalWrite(r6,HIGH);
  digitalWrite(r7,HIGH);
  
  digitalWrite(c1, HIGH);
  digitalWrite(c2, LOW);
  digitalWrite(c3, LOW);
  digitalWrite(c4, LOW);
  digitalWrite(c5, LOW);
  
  delay(10);
  
  //light up r5,c4
  digitalWrite(r1,HIGH);
  digitalWrite(r2,HIGH);
  digitalWrite(r3,HIGH);
  digitalWrite(r4,HIGH);
  digitalWrite(r5,LOW);
  digitalWrite(r6,HIGH);
  digitalWrite(r7,HIGH);
  
  digitalWrite(c1, LOW);
  digitalWrite(c2, LOW);
  digitalWrite(c3, LOW);
  digitalWrite(c4, HIGH);
  digitalWrite(c5, LOW);
  
  delay(10);
  
}

De onderstaande link is de link naar de datasheet.
http://www.farnell.com/datasheets/1631380.pdf (703-0194)

Er is een soort van traagheid waardoor die leds toch nog stroom krijgen. Komt dit door de led matrix, mijn Funduino Nano of iets anders?

Met vriendelijke groeten

Arduinoboy123
Eerst en vooral:
Je noemt jezelf "Arduinoboy" maar je komt af met een "funduino". Das als vloeken in de kerk he.

En dan je probleem
Ikzelf ken de ledmatrix niet en ik heb er geen ervaring mee. Wat ik wel zie is dat de 4 leds een vierkant maken. Wat ik zou proberen is kijken of ik met 1,2,3,4... leds ook hetzelfde probleem heb. Zorg wel dat elke led op een andere rij en kolom zitten(vb 1,2; 2,3; 3,4 ....).
Doe dan ook eens een test met de leds op dezelfde rij en kolom (1,1; 2,2; 3,3 ....).
Misschien gaat er dan een lichtje (ledje?) branden.
Met vriendelijke groet
Jantje

Jantje:
Arduinoboy123
Eerst en vooral:
Je noemt jezelf "Arduinoboy" maar je komt af met een "funduino". Das als vloeken in de kerk he.

En dan je probleem
Ikzelf ken de ledmatrix niet en ik heb er geen ervaring mee. Wat ik wel zie is dat de 4 leds een vierkant maken. Wat ik zou proberen is kijken of ik met 1,2,3,4... leds ook hetzelfde probleem heb. Zorg wel dat elke led op een andere rij en kolom zitten(vb 1,2; 2,3; 3,4 ....).
Doe dan ook eens een test met de leds op dezelfde rij en kolom (1,1; 2,2; 3,3 ....).
Misschien gaat er dan een lichtje (ledje?) branden.
Met vriendelijke groet
Jantje

Dank u voor het snelle antwoord.

Die Funduino is aangekocht door school vanwege de prijs :). De software blijft hetzelfde.

Ik heb al andere combinaties geprobeerd maar het blijft hetzelfde. (zie foto).

Met vriendelijke groeten

Je laat nu een LED oplichten, wacht heel even en laat vervolgens een andere LED oplichten.
Dat oplichten doe je door een voor een waardes te schrijven naar de uitgangen.
Dat gaat wel enorm snel, maar toch niet allemaal tegelijk.
Wat gebeurt er als je eerst alles wist voor je een nieuwe LED aanzet ?
Of beter alleen de waardes die aanstaan ?

Het is logisch dat als je zoals op de foto de buitens 2 leds in de hoeken laat branden dat de andere 2 in de andere hoeken ook oplichten. Dat komt om dat je de multiplex-techniek gebruikt. Zoek eens op POV, hiermee laad je de leds om en om knipperen waardoor er telkens maar 1 aan staat maar omdat je zo snel wisselt lijkt het of ze beide tegelijk branden.

MAS3:
Je laat nu een LED oplichten, wacht heel even en laat vervolgens een andere LED oplichten.
Dat oplichten doe je door een voor een waardes te schrijven naar de uitgangen.
Dat gaat wel enorm snel, maar toch niet allemaal tegelijk.
Wat gebeurt er als je eerst alles wist voor je een nieuwe LED aanzet ?
Of beter alleen de waardes die aanstaan ?

Dank u alweer voor de snelle reactie.

Als ik alles wis voor ik een nieuwe led aanzet, verminderen de twee led's die niet aanmoeten in helderheid. Maar het probleem is niet opgelost, want als ik ze volledig wil doven, beginnen de andere leds te knipperen.

Als ik alleen de leds aanstuur, linksboven en rechtsonder, branden de buitenste kolommen. Dit is met volgende code.

void loop() {
  
  //light up r1,c1
  digitalWrite(r1,LOW);
//  digitalWrite(r2,HIGH);
//  digitalWrite(r3,HIGH);
//  digitalWrite(r4,HIGH);
//  digitalWrite(r5,HIGH);
//  digitalWrite(r6,HIGH);
//  digitalWrite(r7,HIGH);
  
  digitalWrite(c1, HIGH);
//  digitalWrite(c2, LOW);
//  digitalWrite(c3, LOW);
//  digitalWrite(c4, LOW);
//  digitalWrite(c5, LOW);
  
  delay(10);
  
  //light up r5,c4
//  digitalWrite(r1,HIGH);
//  digitalWrite(r2,HIGH);
//  digitalWrite(r3,HIGH);
//  digitalWrite(r4,HIGH);
//  digitalWrite(r5,HIGH);
//  digitalWrite(r6,HIGH);
  digitalWrite(r7,LOW);
  
//  digitalWrite(c1, LOW);
//  digitalWrite(c2, LOW);
//  digitalWrite(c3, LOW);
//  digitalWrite(c4, LOW);
  digitalWrite(c5, HIGH);
  
  delay(10);
  
}

Stealth0113:
Het is logisch dat als je zoals op de foto de buitens 2 leds in de hoeken laat branden dat de andere 2 in de andere hoeken ook oplichten. Dat komt om dat je de multiplex-techniek gebruikt. Zoek eens op POV, hiermee laad je de leds om en om knipperen waardoor er telkens maar 1 aan staat maar omdat je zo snel wisselt lijkt het of ze beide tegelijk branden.

Als ik op "POV led" zoek kom ik meestal terecht op projecten met draaiende objecten. Een led display is toch aan te sturen via multiplex? Dus elk afzonderlijk maar snel na elkaar, zodat het lijkt alsof ze allemaal oplichten.

Omdat je nu meer handelingen doet, moet je de delay van 10 verkleinen.
Daarmee word ook het knipperen minder.

Met het branden van de buitenste kolommen, bedoel je dat alle LEDs van die kolommen dan aan zijn ?

Overigens zou ik het anders aanpakken, maar ik heb nog niet geprobeerd om een dot matrix aan te sturen.
Ik zou telkens een kolom selecteren, en dan de rijen waar ik een LED aan wil zetten.
Zo ben je dus als het ware aan het scannen of pollen, maar dan omgekeerd.
Als je maar 2 LEDs wil laten branden kun je het op jouw manier doen, maar als je er meer wil doen kom je in de problemen denk ik.

MAS3:
Omdat je nu meer handelingen doet, moet je de delay van 10 verkleinen.
Daarmee word ook het knipperen minder.

Met het branden van de buitenste kolommen, bedoel je dat alle LEDs van die kolommen dan aan zijn ?

Overigens zou ik het anders aanpakken, maar ik heb nog niet geprobeerd om een dot matrix aan te sturen.
Ik zou telkens een kolom selecteren, en dan de rijen waar ik een LED aan wil zetten.
Zo ben je dus als het ware aan het scannen of pollen, maar dan omgekeerd.
Als je maar 2 LEDs wil laten branden kun je het op jouw manier doen, maar als je er meer wil doen kom je in de problemen denk ik.

Als ik blanco's (dus led matrix volledig uit) dan brandt er nog altijd één led met verminderde helderheid (linksboven denkbeeldige rechthoek).

Dit is door volgende code.

void loop() {
  
  digitalWrite(r1,LOW);
  digitalWrite(r2,HIGH);
  digitalWrite(r3,HIGH);
  digitalWrite(r4,HIGH);
  digitalWrite(r5,HIGH);
  digitalWrite(r6,HIGH);
  digitalWrite(r7,HIGH);
  
  digitalWrite(c1, HIGH);
  digitalWrite(c2, LOW);
  digitalWrite(c3, LOW);
  digitalWrite(c4, LOW);
  digitalWrite(c5, LOW);
  
  delay(1);
  
  digitalWrite(r1,HIGH);
  digitalWrite(r2,HIGH);
  digitalWrite(r3,HIGH);
  digitalWrite(r4,HIGH);
  digitalWrite(r5,HIGH);
  digitalWrite(r6,HIGH);
  digitalWrite(r7,HIGH);
  
  digitalWrite(c1, LOW);
  digitalWrite(c2, LOW);
  digitalWrite(c3, LOW);
  digitalWrite(c4, LOW);
  digitalWrite(c5, LOW);
  
  delay(15);
  
  digitalWrite(r1,HIGH);
  digitalWrite(r2,HIGH);
  digitalWrite(r3,HIGH);
  digitalWrite(r4,HIGH);
  digitalWrite(r5,LOW);
  digitalWrite(r6,HIGH);
  digitalWrite(r7,HIGH);
  
  digitalWrite(c1, LOW);
  digitalWrite(c2, LOW);
  digitalWrite(c3, LOW);
  digitalWrite(c4, HIGH);
  digitalWrite(c5, LOW);
  
  delay(1);
  
}

Ja, ik bedoelde dat de led's buitenste twee kolommen branden.

Maakt dit uit of je nu eerst de rij of de kolom selecteerd. Dit werkt toch zoals een coördinatenstel?
Als ik deze code uitvoer. Komt de led die niet moet branden rechtsonder te staan. Ik heb gewoon eerst de kolom aangeduid en dan de rij en variaties, maar niets helpt.

digitalWrite(c1, HIGH);
  digitalWrite(c2, LOW);
  digitalWrite(c3, LOW);
  digitalWrite(c4, LOW);
  digitalWrite(c5, LOW);
  
  digitalWrite(r1,LOW);
  digitalWrite(r2,HIGH);
  digitalWrite(r3,HIGH);
  digitalWrite(r4,HIGH);
  digitalWrite(r5,HIGH);
  digitalWrite(r6,HIGH);
  digitalWrite(r7,HIGH);

De rest is idem. Het probleem wordt hierdoor dus niet opgelost, gewoon verplaatst.