Pages: [1]   Go Down
Author Topic: Due 74HC595 in serie  (Read 717 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho un problema ad inviare la serie di bit a 2 shift register in serie.
Naturalmente ho collegato sia il pin del latch e del clock dei due shift assieme, e ho collegato il pin 9 del primo col 14 del secondo (ovvero il srial output col serial input)
Però non capisco come pilotarli assieme.
Ho provato semplicemente ad inviare una serie di 16 bit (8 per il primo e 8 per ilsecondo) ma non va bene.
Questo è il codice
Code:
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
   Serial.begin(9600);
}

void loop() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b0000000100000001); 
  digitalWrite(latchPin, HIGH);
  delay(500);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b0000000000000000); 
  digitalWrite(latchPin, HIGH);
  delay(500);
}
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non devi spedire 16 bit tutti insieme ma 2 byte da 8 bit ciascuno con il latch sempre giù:
Code:
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
  digitalWrite(latchPin, HIGH);
  delay(500);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  digitalWrite(latchPin, HIGH);
  delay(500);
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 252
Posts: 21283
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Spiegazione:
shiftOut() spedisce solo 8 bit alla volta. Per spedire 16 bit devi inviare 2x 8 bit. La stessa cosa vale per shiftIn():

Ciao Uwe
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah ok, vi ringrazio ^^

edit: ho provato come avete detto voi, ma si accende solo 1 volta l'ultimo led del 2° shift (ovvero il secondo byte inviato) e il primo byte no.
Inoltre poi rimane tutto spento, anche dopo il delay, i led (compreso quello che si era acceso) non si accendono più
Code:
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001); 
  digitalWrite(latchPin, HIGH);
  delay(1500);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000); 
  digitalWrite(latchPin, HIGH);
  delay(1500);
}
« Last Edit: June 07, 2013, 05:47:13 am by toti94 » Logged

piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 655
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 ciao
ho fatto piccole applicazioni con 74hc595 non ho mai avuto problemi a parte quelli dovuti alla inesperienza, mi viene da dirti di controllare bene i collegamenti

stefano
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nel mio ultimo progetto piloto 5 shift register in cascata spedendo 5 byte per volta e tutti i led fanno il loro lavoro come io comando  smiley-wink
Suggerisco anch'io di riguardare i collegamenti per bene.

Hai impostato anche il pin MR su High (collegato a 5V) ed il pin OE su Low (collegato a massa)?

PS:
replicando uno di questi progetti, ti funziona tutto?
http://arduino.cc/en/Tutorial/ShiftOut
Logged


Marche
Offline Offline
Edison Member
*
Karma: 33
Posts: 2261
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Piccolo OT nella discussione: ma il parametro MSBFIRST nella funzione shiftOut a che serve?
Io non l'ho mai messo e funziona tutto ugualmente
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

MSBFIRST vuol dire : more significative bit first, ovvero il bit più significativo per primo.
In una serie di bit abbiamo che il 1° partendo da sinistra è il più significativo, mentre l'ultimo è il meno significativo.
Infatti puoi anche scrivere LSBFIRST.
In pratica ti fa leggere il bit o da destra a sinistra o da sinistra a destra (in parole povere)
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6994
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Credo che serva per indicare la codifica Big-endian o Little-endian (http://it.wikipedia.org/wiki/Ordine_dei_byte)

--> http://it.wikipedia.org/wiki/Ordine_dei_bit
« Last Edit: June 07, 2013, 08:21:37 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho ricollegato il tutto ed ora si accendono, ma non rimangono accesi per 1 secondo e mezzo ma lampeggiano velocemente e poi rimangono spenti per 1 secondo e mezzo O.o?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

1) ti riferisci allo schema del link?
2) Pubblica il codice che stai usando
Logged


Offline Offline
Sr. Member
****
Karma: 0
Posts: 423
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b10000000);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b10000000); 
  digitalWrite(latchPin, HIGH);
  delay(1500);
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000); 
  digitalWrite(latchPin, HIGH);
  delay(1500);
}
i collegamenti vanno bene, perchè accendendoli solamente, funzionano
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai messo il condensatore tra il pin latch e massa? Aiuta molto, quando i led sballonzolano un pò.
Sarebbe buono avere anche foto e schema dei collegamenti.
Logged


Pages: [1]   Go Up
Jump to: