bogdan666 Postat Martie 25, 2019 Partajează Postat Martie 25, 2019 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.txt Link spre comentariu
validae Postat Martie 25, 2019 Partajează Postat Martie 25, 2019 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
bogdan666 Postat Martie 26, 2019 Autor Partajează Postat Martie 26, 2019 semnalul ar fi acesta. Link spre comentariu
deejay2k1 Postat Martie 31, 2019 Partajează Postat Martie 31, 2019 nu cumva iti apare 'imaginea' in negativ pe matrice Link spre comentariu
bogdan666 Postat Aprilie 3, 2019 Autor Partajează Postat Aprilie 3, 2019 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
bogdan666 Postat Aprilie 14, 2019 Autor Partajează Postat Aprilie 14, 2019 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
rlodina Postat Aprilie 15, 2019 Partajează Postat Aprilie 15, 2019 (editat) 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 Aprilie 15, 2019 de rlodina send incomplet 1 Link spre comentariu
bogdan666 Postat Aprilie 17, 2019 Autor Partajează Postat Aprilie 17, 2019 mersi tare fain, merge Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum