Ciao ragazzi.
Sto realizzando un progettino in cui è necessario gestire una matrice di matrici (9 matrici LED). Per parlarci chiaro, è un TRIS.
Ho delle difficoltà nel capire come mantenerle accese contemporaneamente e durante l'aggiornamento del loro stato ad ogni turno.
Sapreste darmi qualche suggerimento?
Banalmente per semplificarmi la vita e cercare di capirci un po' di più ho fatto delle prove cercando di mantenere attiva una matrice e un led bicolor (che passa da blu a rosso mentre la matrice alterna due stati per disegnare una X).
Il led "blinka" ma la matrice non rimane tutta accesa.
No hai ragione.
Allora le matrici sono indipendenti. Una matrice LED è gestita tramite 2 shift registers (74hc595n).
Vorrei che restassero sempre accese.
Scusa, ma sono proprio ignorante. Cosa intendi con reflash per via dei consumi?
Una volta inviati i dati allo shift register i led rimangono accesi fino al successivo aggiornamento dello shift.
Se non li mantieni accesi vuoi dire che aggiorni senza volerlo i valori dello shift register.
Devi a questo punto controlla il codice.
Ti posto il codice. Probabilmente è una porcheria ma ho cominciato a programmare con arduino meno di una settimana fa ( praticamente partendo da zero ).
const int latchPin = 8;//Pin connected to ST_CP of 74HC595
const int clockPin = 12;//Pin connected to SH_CP of 74HC595
const int dataPin = 11; //Pin connected to DS of 74HC595
int ledP= 5;
int ledN=6;
int tempo=500;
void setup(){
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
pinMode(ledP,OUTPUT);
pinMode(ledN,OUTPUT);
}
void loop (){
ics();
bicolor();
}
void ics(){
int dat = 0x18;
int dat2 = 0x81;
shiftOut(dataPin,clockPin,MSBFIRST,dat);
digitalWrite(latchPin,HIGH);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,dat2);
digitalWrite(latchPin,HIGH);
digitalWrite(latchPin,LOW);
delay(9);
//__________________________________________________________________________________
dat = 0x7e ;
dat2 = 0xe7;
shiftOut(dataPin,clockPin,MSBFIRST,dat);
digitalWrite(latchPin,HIGH);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,dat2);
digitalWrite(latchPin,HIGH);
digitalWrite(latchPin,LOW);
delay(9);
}
void bicolor()
{
delay(tempo);
digitalWrite(ledP,HIGH);
digitalWrite(ledN,LOW);
delay(tempo);
digitalWrite(ledP,LOW);
digitalWrite(ledN,HIGH);
}
Guarda io ho seguito lo schema di un tutorial della sunfounder per connettere la matrice, se è questo che intendi.
Inizialmente avevo cercato di prendere spunto dal loro codice per poter disegnare una figura desiderata ma senza successo.
Incominciamo dal principio:
Tu hai 9 display a matrice di LED 8x8 monocolore e vuoi disporrli 3x3 per avere una matrice di LED 36 x 36.
Ogni display ha 64 LED disposti 8x8 che devi pilotare in multiplex. Accendi sempre i led accesi di una riga e poi spegni e passi alla sucessiva riga. Questo devi farlo abbastanza veloce per non vedere lampeggiare i LED.
Il modo piú semplice per pilotare una matrice é usare un MAX7219 per matrice.
Lo schema che hai indicato é sbagliato. Un 74HC595 non regge 120mA su un uscita (somma delle corrneti se tutti gli 8 LED sono accesi). Servono dei transistori o un array di transistori ( ULN2803 o A2981 a secondo dove li metti)
Se vuoi pilotare le matrici da Arduino (senza dei MAX7219) devi stare attenti sulle tempistiche. I LEd devono essere accesi almeno 30 volte al secondo che vuol dire che una riga di un Display 8x8 sta accesa solo ca 4 mS.
Quindi c'è qualche problema nel circuito che ho indicato sopra?
Sono riuscita a disegnare delle figure (X ed O in questo caso) e non vorrei utilizzare l'altra componente ma piuttosto i registri che ho già a disposizione.
Per tempi così bassi la matrice led non ha un gran contrasto di luminosità tra uno stato e l'altro.