Sari la conținut
ELFORUM - Forumul electronistilor

problema matrice led


bogdan666

Postări Recomandate

Am o problema la o matrice led si anume, am realizat circutul din schema, dar cand il alimentez se aprinde toata matricea, problema e ca in schema respectiva nu scrie cum vine conectat ledul, asa ca eu am facut cu anodul pe raand, si catodul pe coloane

Modificarile mele sunt urmatoarele

-am avut leduri doar pentru o matrice 8x16

-am folosit rezistori de 1k ca sa nu "fortez" pinii integratului 595 (nu e asa luminoasa matricea dar nu ma deranjeaza)

Aveti schema si codul in format txt mai jos, orice idee e binevenita.

8x24 LED Matrix 74HC595.jpg

8x24.txt

Link spre comentariu

Vezi ce semnal ai pe pinul ,,strobe,, fiindcă acela comandă multiplexarea afișării, adică se aprind secvențial anumite leduri la un moment dat, nu toate simultan...

Link spre comentariu

matricea este aprinsa complet, de atunci am modificat matricea in felul urmator, toate 595 sunt inseriate, si ultimul comanda randurile, mai ramane sa refac codul de la inceput

Link spre comentariu
  • 2 săptămâni mai târziu...

Am reusit sa fac o sageata pe matrice, ma poate ajuta cineva sa o fac sa se miste ?

codul este acesta 

 

#include <SPI.h>

#define LATCH 10
#define MULTIPLEX_PERIOD 1

SPISettings shiftRegister(10000000UL, LSBFIRST, SPI_MODE0);

unsigned int image[8] = {
  0b0000000000001000,
  0b0000000000001100,
  0b0000000000001110,
  0b1111111111111111,
  0b0000000000001110,
  0b0000000000001100,
  0b0000000000001000,
  0b0000000000000000
};

void setup() {
  SPI.begin();
  SPI.beginTransaction(shiftRegister);
  pinMode(LATCH, OUTPUT);
}

void multiplexDisplay() {
  static byte currRow;
  static unsigned long lastUpdate;
  unsigned long millisNow = millis();
  if (millisNow - lastUpdate >= MULTIPLEX_PERIOD) {
    lastUpdate = millisNow;
    SPI.transfer(128 >> currRow);
    SPI.transfer(~lowByte(image[currRow]));
    SPI.transfer(~highByte(image[currRow]));
    digitalWrite(LATCH, LOW);
    digitalWrite(LATCH, HIGH);
    if (currRow++ > 7) currRow = 0;
  }
}

void loop() {
  multiplexDisplay();
}

 

Link spre comentariu
On 4/14/2019 at 11:47 AM, bogdan666 said:

ma poate ajuta cineva sa o fac sa se miste ?

 

Pornind de la observația că în array-ul image acolo unde-i 1 ledul este ON si la 0 este OFF putem deduce că deplasând la stanga / dreapta acele valori cu 1 ... vom obține efectul dorit.

 

#define WAIT 300
unsigned long lastMove;
void loop() {
  multiplexDisplay();
  if (milis() - lastMove > WAIT) {
      lastMove = milis();
      for (int i=0; i<8; i++) image[8] = image[8] << 1; 
  }   
}

Cod netestat (posibil să trebuiască ajustată un pic și funcția multiplexDisplay).

Succes

Editat de rlodina
send incomplet
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări