Arduino Forum

International => Italiano => Hardware => Topic started by: future1980 on Mar 09, 2018, 03:50 pm

Title: matrice led hef4094 arduino mega
Post by: future1980 on Mar 09, 2018, 03:50 pm
ciao a tutti, ho una barra di led 7x60 a bordo è  pilotata da hef4094 ed a comandarla aveva un microcontrollore zilog z86e40, ho trovato i pin data,clk,e stb, ma non riesco a scrivere mi si accendono led a caso.  qualcuno puo aiutarmi a capire ilperche?
Code: [Select]
//----------------------------------------------------------
// Test funzione shiftOut su shift register sipo CD4094
//----------------------------------------------------------
#define sipo_strobe  2
#define sipo_data    3
#define sipo_clock   4
//----------------------------------------------------------
byte counter = 0;
//----------------------------------------------------------
void setup()
{
    pinMode(sipo_strobe, OUTPUT);
    pinMode(sipo_data, OUTPUT);
    pinMode(sipo_clock, OUTPUT);
    digitalWrite(sipo_strobe, LOW); 
    digitalWrite(sipo_clock, LOW); 
}
//----------------------------------------------------------
void loop()
{
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter);
    digitalWrite(sipo_strobe, HIGH); 
    digitalWrite(sipo_strobe, LOW); 
    counter += 1;
    delay(100);
}
//----------------------------------------------------------




grazie
Title: Re: matrice led hef4094 arduino mega
Post by: realmeteo on Mar 09, 2018, 05:37 pm
HAI LETTO QUESTO?
http://www.farnell.com/datasheets/2051421.pdf
Title: Re: matrice led hef4094 arduino mega
Post by: brunello22 on Mar 09, 2018, 05:50 pm


Code: [Select]
    digitalWrite(sipo_strobe, HIGH) ;
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter);
    digitalWrite(sipo_strobe, LOW);


Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 09, 2018, 07:18 pm
si lo letto ma non mi aiuta se non conosco bene l'ic.   la barra dei led è 7x5 e sono 10 lettere.quindi dovrei concentrarmi solo su un carattere?  https://ibb.co/bYgga7 (https://ibb.co/bYgga7)


Title: Re: matrice led hef4094 arduino mega
Post by: Claudio_FF on Mar 10, 2018, 10:16 am
Quote from: brunello22
Code: [Select]
  digitalWrite(sipo_strobe, HIGH) ;
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter);
    digitalWrite(sipo_strobe, LOW);

L'errore sicuramente non è li. Il 4094 porta i dati sui latch di uscita quando strobe è alto e tiene bloccate le uscite quando è basso. Se si lascia alto tutto il tempo le uscite scorrono assieme ai dati in ingresso ma la configurazione finale raggiunta è la stessa.

Il problema secondo me è scoprire quali bit della sequenza comandano quali LED e in che ordine sono collegati in cascata i vari 4094.

Una volta scoperto, per esempio (non so se è così), che si tratta di 50 shift register in cascata, ciascuno che comanda una colonna di 7 LED, allora sapremmo che ci servono 5 byte per rappresentare i bit delle colonne di una cifra, per un totale di 50 byte da trasmettere con 50 shiftOut.

Come si fa a scoprire?

Si trasmettono un centinaio di bit a zero per pulire gli shift register, si immette solo un 1, e poi si danno lentamente colpi di clock per vedere come/dove si sposta questo 1.
Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 10, 2018, 11:09 am
L'errore sicuramente non è li. Il 4094 porta i dati sui latch di uscita quando strobe è alto e tiene bloccate le uscite quando è basso. Se si lascia alto tutto il tempo le uscite scorrono assieme ai dati in ingresso ma la configurazione finale raggiunta è la stessa.

Il problema secondo me è scoprire quali bit della sequenza comandano quali LED e in che ordine sono collegati in cascata i vari 4094.

Una volta scoperto, per esempio (non so se è così), che si tratta di 50 shift register in cascata, ciascuno che comanda una colonna di 7 LED, allora sapremmo che ci servono 5 byte per rappresentare i bit delle colonne di una cifra, per un totale di 50 byte da trasmettere con 50 shiftOut.

Come si fa a scoprire?

Si trasmettono un centinaio di byte a zero per pulire gli shift register, si immette solo un 1, e poi si danno lentamente colpi di clock per vedere come/dove si sposta questo 1.
ho caricato questo in arduino mega e se metto zero si spengono tutti i led, se metto 1 si accendono i 5 led in basso , 2 si accendono 2 strisce in modo binario.


Code: [Select]
//----------------------------------------------------------
// Test funzione shiftOut su shift register sipo CD4094
//----------------------------------------------------------
#define sipo_strobe  2
#define sipo_data    3
#define sipo_clock   4
//----------------------------------------------------------
byte counter = 0;
//----------------------------------------------------------
void setup()
{
    pinMode(sipo_strobe, OUTPUT);
    pinMode(sipo_data, OUTPUT);
    pinMode(sipo_clock, OUTPUT);
    digitalWrite(sipo_strobe, LOW); 
    digitalWrite(sipo_clock, LOW); 
}
//----------------------------------------------------------
void loop()
{
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter);
    digitalWrite(sipo_strobe, HIGH); 
    digitalWrite(sipo_strobe, LOW); 
    counter = 1;   
    delay(100);
}
//----------------------------------------------------------
Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 10, 2018, 11:50 am
sono 5 shift register 4094 7x5 led che formano il carattere  

sescrivo 1 si accendono cosi;





https://ibb.co/d8MA3S (https://ibb.co/d8MA3S)
Title: Re: matrice led hef4094 arduino mega
Post by: Claudio_FF on Mar 10, 2018, 12:03 pm
Confermi che con il valore 2 si accende invece la striscia successiva verso l'alto?

Se si allora si è trovata la corrispondenza dei bit in verticale, il bit 0 dei byte trasmessi è il LED in basso.
Adesso bisogna stabilire se le varie colonne vengono scritte da destra a sinistra o al contrario, per vedere questo basta aumentare il delay.

Confermi che la striscia in basso si accende piano piano da sinistra verso destra?

Se si allora per visualizzare una 'F' dovrebbe essere sufficiente inviare in sequenza i byte:

0b00000000
0b01000000
0b01001000
0b01001000
0b01111111


(si nota la F sdraiata formata dai bit 1)
Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 10, 2018, 12:15 pm
//----------------------------------------------------------
// Test funzione shiftOut su shift register sipo CD4094
//----------------------------------------------------------
#define sipo_strobe  2
#define sipo_data    3
#define sipo_clock   4
//----------------------------------------------------------
byte counter1 = (0b00000000,0b01000000,0b01001000,0b01001000,0b01111111);


//----------------------------------------------------------


come li invio?
Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 10, 2018, 12:28 pm
Confermi che con il valore 2 si accende invece la striscia successiva verso l'alto?

Se si allora si è trovata la corrispondenza dei bit in verticale, il bit 0 dei byte trasmessi è il LED in basso.
Adesso bisogna stabilire se le varie colonne vengono scritte da destra a sinistra o al contrario, per vedere questo basta aumentare il delay.

Confermi che la striscia in basso si accende piano piano da sinistra verso destra?

Se si allora per visualizzare una 'F' dovrebbe essere sufficiente inviare in sequenza i byte:

0b00000000
0b01000000
0b01001000
0b01001000
0b01111111


(si nota la F sdraiata formata dai bit 1)
si confermo, iled si accendono da sinistra a destra
Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 10, 2018, 12:40 pm
allora facendo la prova se trasmetto questo

byte counter1 = 0b01001000;
byte counter2 = 0b01001000;
byte counter3 = 0b01001000;
byte counter4 = 0b01000000;
byte counter5 = 0b01111111;



https://ibb.co/kRghHn

scrivo (F) 

Title: Re: matrice led hef4094 arduino mega
Post by: Claudio_FF on Mar 10, 2018, 01:12 pm
Quindi è risolto.

Ogni lettera sono 5 shiftOut con i valori opportuni come per la 'F'.

L'ultimo gruppo di 5 shiftOut è sempre la lettera a sinistra che sposta a destra tutte le altre.

Se non si vogliono vedere aloni durante la scrittura, l'impulso di strobe va dato solo una volta alla fine della scrittura di tutte le lettere.
Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 10, 2018, 01:37 pm
abbiamo capito come sono configurati i shift register, e ti ringrazio  ma come posso implementare un areatore con tutte le lettere e scrivere solo la frase che mi interessa e stamparla? Oppure ogni volta che premo un pulsante cambia frase da me creata dentro il loop.
Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 10, 2018, 10:01 pm

questo è perfetto fa al caso mio, ma non è 4094 ma è il max 7219  e non funziona.  :smiley-confuse:
Code: [Select]
/*
     8x8 LED Matrix MAX7219 Scrolling Text
         Android Control via Bluetooth

 


Title: Re: matrice led hef4094 arduino mega
Post by: future1980 on Mar 11, 2018, 11:00 pm
buonasera a tutti, sono arrivato a un bel punto :)  sono riuscito a fargli scrivere qualcosa :) vi posto il codice, vi voglio chiedere  ma ce un modo da farlo piu semplice?  io vorrei semplicemente scrivere una frase ti msg ("hello word ") senza creare tutte  quelle variabili.

Code: [Select]
//----------------------------------------------------------
// Test funzione shiftOut su shift register sipo CD4094
//----------------------------------------------------------
#define sipo_strobe  2
#define sipo_data    3
#define sipo_clock   4
//----------------------------------------------------------
word counter = 0b0000000;
word counter1= 0b1000001;
byte counter2 =0b1000001; //C
byte counter3 =0b1000001;
byte counter4 =0b1111111;
//---------------------------------------
word counter5= 0b0000000;
word counter6= 0b0000000;
byte counter7 =0b1111111;  //I
byte counter8 =0b0000000;
byte counter9 =0b0000000;
//--------------------------------------------------
word counter10= 0b0011111;
word counter11= 0b0101000;
byte counter12 =0b1001000;  //A
byte counter13= 0b0101000;
byte counter14= 0b0011111;
//--------------------------------------------------
word counter15= 0b1111111;
word counter16= 0b1000001;
byte counter17 =0b1000001;  //O
byte counter18= 0b1000001;
byte counter19= 0b1111111;
//--------------------------------------------------
word counter20= 0b0001000;
word counter21= 0b0001000;
byte counter22 =0b0001000;  //-
byte counter23= 0b0001000;
byte counter24= 0b0001000;
//----------------------------------------------------------
void setup()
{
    pinMode(sipo_strobe, OUTPUT);
    pinMode(sipo_data, OUTPUT);
    pinMode(sipo_clock, OUTPUT);
    digitalWrite(sipo_strobe, LOW); 
    digitalWrite(sipo_clock, LOW);
   
}
//----------------------------------------------------------
void loop()
{
    shiftOut(sipo_data, sipo_clock, MSBFIRST,counter20);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter21);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter22);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter23);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter24);




    shiftOut(sipo_data, sipo_clock, MSBFIRST,counter15);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter16);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter17);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter18);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter19);



       shiftOut(sipo_data, sipo_clock, MSBFIRST,counter10);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter11);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter12);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter13);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter14); 

       shiftOut(sipo_data, sipo_clock, MSBFIRST,counter5);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter6);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter7);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter8);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter9); 
     
    shiftOut(sipo_data, sipo_clock, MSBFIRST,counter );
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter1);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter2);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter3);
    shiftOut(sipo_data, sipo_clock, MSBFIRST, counter4); 
 digitalWrite(sipo_strobe, HIGH);
       digitalWrite(sipo_strobe, LOW);
       delay(100);
       
   //-------------------------------------------------------------------   
 
       
}



https://ibb.co/mWL4Xn (https://ibb.co/mWL4Xn)
Title: Re: matrice led hef4094 arduino mega
Post by: Claudio_FF on Mar 17, 2018, 09:14 pm
Quote from: future1980
io vorrei semplicemente scrivere una frase ti msg ("hello word ") senza creare tutte  quelle variabili.
Non c'è alcun motivo di creare quelle variabili (se proprio vuoi usare una variabile per il dato da passare a shiftOut ne basta una a cui assegni i vari valori), e neppure chiamarle counter, visto che non servono come contatori.

Una soluzione è un array di byte (5 byte per carattere), e poi puntare l'inizio del carattere voluto (indice chr*5) ed estrarre i 5 byte passandoli uno ad uno a shiftOut tramite un ciclo for di cinque iterazioni.