Sari la conținut
ELFORUM - Forumul electronistilor

Arduino - shift register 74HC595


Vizitator

Postări Recomandate

  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

  void trasferSerial(uint8_t datele_tale){  shiftOut(data_pin, clock_pin, MSBFIRST,datele_tale);  digitalWrite(latch_pin, LOW);  digitalWrite(latch_pin, HIGH); }

bitWrite(datele_tale,0,digitalRead(pin_buton_1));

bitWrite(datele_tale,1,digitalRead(pin_buton_2));

....

bitWrite(datele_tale,7,digitalRead(pin_buton_8));

transferSerial(datele_tale);

 

ori pui definitiv OE la masa, ori printr-un pin arduino, ca sa-si activeze iesirile 595-ul

Editat de deejay2k1
Link spre comentariu

Multumesc deejay2k1.

De compilat se compileaza, dar nu merge.

Am o problema in program.

int data_pin = 8;   //pin 14 on the 75HC595int latch_pin = 9;  //pin 12 on the 75HC595int clock_pin = 10; //pin 11 on the 75HC595const int pin_buton_1 = 2;     // the number of the pushbutton pinconst int pin_buton_2 = 3;     // the number of the pushbutton pinconst int pin_buton_3 = 4;     // the number of the pushbutton pinconst int pin_buton_4 = 5;     // the number of the pushbutton pinconst int pin_buton_5 = 6;     // the number of the pushbutton pinconst int pin_buton_6 = 7;     // the number of the pushbutton pinconst int pin_buton_7 = 11;     // the number of the pushbutton pinconst int pin_buton_8 = 12;     // the number of the pushbutton pin/////// aici cred ca este o greseala ///////////////  int  datele_tale;  #define transferSerial(datele_tale);////////////////////////////////////////////////////void setup() {  pinMode(data_pin, OUTPUT);  pinMode(latch_pin, OUTPUT);  pinMode(clock_pin, OUTPUT);  pinMode(pin_buton_1, INPUT_PULLUP);  pinMode(pin_buton_2, INPUT_PULLUP);  pinMode(pin_buton_3, INPUT_PULLUP);  pinMode(pin_buton_4, INPUT_PULLUP);  pinMode(pin_buton_5, INPUT_PULLUP);  pinMode(pin_buton_6, INPUT_PULLUP);  pinMode(pin_buton_7, INPUT_PULLUP);  pinMode(pin_buton_8, INPUT_PULLUP);    }  void trasferSerial(uint8_t datele_tale){  shiftOut(data_pin, clock_pin, MSBFIRST, datele_tale);  digitalWrite(latch_pin, LOW);  digitalWrite(latch_pin, HIGH);  }void loop() {    bitWrite(datele_tale, 0, digitalRead(pin_buton_1));  bitWrite(datele_tale, 1, digitalRead(pin_buton_2));  bitWrite(datele_tale, 2, digitalRead(pin_buton_3));  bitWrite(datele_tale, 3, digitalRead(pin_buton_4));  bitWrite(datele_tale, 4, digitalRead(pin_buton_5));  bitWrite(datele_tale, 5, digitalRead(pin_buton_6));  bitWrite(datele_tale, 6, digitalRead(pin_buton_7));  bitWrite(datele_tale, 7, digitalRead(pin_buton_8));  transferSerial(datele_tale);}
Editat de Vizitator
Link spre comentariu

Sterge linia:

#define transferSerial(datele_tale);

nu inteleg la ce folosesti acest define.

 

Si ca sa fim extrem de exacti - linia:

int  datele_tale;

ar trebui sa fie:

uint8_t datele_tale

daca tot nu merge verifica: ori pui definitiv OE la masa, ori printr-un pin arduino, ca sa-si activeze iesirile 595-ul

Link spre comentariu

la cererea colegului, draft-ul de program

#define transferInterval 100 //trimitem datele o data la 100ms#define data_pin A1#define oe_pin A0#define latch_pin A3#define clock_pin A2int arrayButoane[] = {2, 3, 4, 5, 6, 7, 8, 9};    //pinii la care sunt legate butoanelelong lastTime = 0L;uint8_t butoane = 0x00;void transferData(uint8_t butoane) {  shiftOut(data_pin, clock_pin, MSBFIRST, butoane);  digitalWrite(latch_pin, LOW);  digitalWrite(latch_pin, HIGH);}void setup () {  for (int i = 0; i < 8; i++) {    pinMode(arrayButoane[i], INPUT_PULLUP);   //legi butoanele catre masa  }  pinMode(data_pin, OUTPUT);  pinMode(clock_pin, OUTPUT);  pinMode(latch_pin, OUTPUT);  pinMode(oe_pin, OUTPUT);  digitalWrite(oe_pin, LOW);  transferData(0x00);   //trimitem 0 catre toate iesirile la inceput}void loop () {  if (millis() > lastTime + transferInterval) {    for (int i = 0; i < 8; i++) {      bitWrite(butoane, i, digitalRead(arrayButoane[i]));    }    transferData(butoane);  }}
Link spre comentariu

 

la cererea colegului, draft-ul de program

#define transferInterval 100 //trimitem datele o data la 100ms#define data_pin A1#define oe_pin A0#define latch_pin A3#define clock_pin A2int arrayButoane[] = {2, 3, 4, 5, 6, 7, 8, 9};    //pinii la care sunt legate butoanelelong lastTime = 0L;uint8_t butoane = 0x00;void transferData(uint8_t butoane) {  shiftOut(data_pin, clock_pin, MSBFIRST, butoane);  digitalWrite(latch_pin, LOW);  digitalWrite(latch_pin, HIGH);}void setup () {  for (int i = 0; i < 8; i++) {    pinMode(arrayButoane[i], INPUT_PULLUP);   //legi butoanele catre masa  }  pinMode(data_pin, OUTPUT);  pinMode(clock_pin, OUTPUT);  pinMode(latch_pin, OUTPUT);  pinMode(oe_pin, OUTPUT);  digitalWrite(oe_pin, LOW);  transferData(0x00);   //trimitem 0 catre toate iesirile la inceput}void loop () {  if (millis() > lastTime + transferInterval) {    for (int i = 0; i < 8; i++) {      bitWrite(butoane, i, digitalRead(arrayButoane[i]));    }    transferData(butoane);  }}

 

Felicitari deejay2k1. :aplauze

Functioneaza perfect.

 

Sterge linia:

#define transferSerial(datele_tale);

nu inteleg la ce folosesti acest define.

 

Si ca sa fim extrem de exacti - linia:

int  datele_tale;

ar trebui sa fie:

uint8_t datele_tale

daca tot nu merge verifica: ori pui definitiv OE la masa, ori printr-un pin arduino, ca sa-si activeze iesirile 595-ul

 

Am facut si modificarile tale rlodina. :aplauze

int data_pin = A1;   //pin 14 on the 75HC595  (8)int latch_pin = A3;  //pin 12 on the 75HC595  (9)int clock_pin = A2; //pin 11 on the 75HC595  (10) int pin_buton_1 = 2;     // the number of the pushbutton pin int pin_buton_2 = 3;     // the number of the pushbutton pin int pin_buton_3 = 4;     // the number of the pushbutton pin int pin_buton_4 = 5;     // the number of the pushbutton pin int pin_buton_5 = 6;     // the number of the pushbutton pin int pin_buton_6 = 7;     // the number of the pushbutton pin int pin_buton_7 = 8;     // the number of the pushbutton pin int pin_buton_8 = 9;     // the number of the pushbutton pinuint8_t datele_tale;void setup() {  pinMode(data_pin, OUTPUT);  pinMode(latch_pin, OUTPUT);  pinMode(clock_pin, OUTPUT);  pinMode(pin_buton_1, INPUT_PULLUP);  pinMode(pin_buton_2, INPUT_PULLUP);  pinMode(pin_buton_3, INPUT_PULLUP);  pinMode(pin_buton_4, INPUT_PULLUP);  pinMode(pin_buton_5, INPUT_PULLUP);  pinMode(pin_buton_6, INPUT_PULLUP);  pinMode(pin_buton_7, INPUT_PULLUP);  pinMode(pin_buton_8, INPUT_PULLUP);    }  void trasferSerial(uint8_t datele_tale){  shiftOut(data_pin, clock_pin, MSBFIRST, datele_tale);  digitalWrite(latch_pin, LOW);  digitalWrite(latch_pin, HIGH);  }void loop() {    bitWrite(datele_tale, 0, digitalRead(pin_buton_1));  bitWrite(datele_tale, 1, digitalRead(pin_buton_2));  bitWrite(datele_tale, 2, digitalRead(pin_buton_3));  bitWrite(datele_tale, 3, digitalRead(pin_buton_4));  bitWrite(datele_tale, 4, digitalRead(pin_buton_5));  bitWrite(datele_tale, 5, digitalRead(pin_buton_6));  bitWrite(datele_tale, 6, digitalRead(pin_buton_7));  bitWrite(datele_tale, 7, digitalRead(pin_buton_8));  trasferSerial(datele_tale);}

Functioneaza perfect si asa.

 

https://www.youtube.com/watch?v=3ufpnDaB_98

Editat de Vizitator
Link spre comentariu

Am completat codul cu recomandarea ta deejay2k1, functioneaza perfect.

Codul, deja l-am adaptat pt un mic proiect. A suferit multe schimbari, deoarece nu am nevoie ca intrarile sa fie citite, si apoi transferate. Dar mai aveam nevoie de o singura iesire pt un proiect, realizat cu un Nano. Din acest motiv, a terbuit sa modific proiectul, si sa folosesc un 74HC595.

Proiectul inceput este acesta:

https://www.youtube.com/watch?v=nynfHIkcWp4&index=6&list=PL7yEqAHOmrzIA9vhZujzrubPxgeHaGba7

Editat de Vizitator
Link spre comentariu

Dupa mai multe cautari pentru extinderea iesirilor, care sa utilizeze circuitul 74HC595, atasez codul:

// Exemplu preluat de pe saitul// http://www.zem.fr/decouverte-du-composant-74hc595-8-bit-shift-register/int SER_Pin = A1;   //pin 14 on the 75HC595  8int RCLK_Pin = A3;  //pin 12 on the 75HC595  9int SRCLK_Pin = A2; //pin 11 on the 75HC595  10//How many of the shift registers - change this#define number_of_74hc595s 1  //do not touch#define numOfRegisterPins number_of_74hc595s * 24 // *  8 pentru  8 biti                                                  // * 16 pentru 16 bitiboolean registers[numOfRegisterPins]; void setup(){  pinMode(SER_Pin, OUTPUT);  pinMode(RCLK_Pin, OUTPUT);  pinMode(SRCLK_Pin, OUTPUT);   //reset all register pins  clearRegisters();  writeRegisters();}                //set all register pins to LOWvoid clearRegisters(){  for(int i = numOfRegisterPins - 1; i >=  0; i--){     registers[i] = LOW;  }}  //Set and display registers//Only call AFTER all values are set how you would like (slow otherwise)void writeRegisters(){   digitalWrite(RCLK_Pin, LOW);   for(int i = numOfRegisterPins - 1; i >=  0; i--){    digitalWrite(SRCLK_Pin, LOW);     int val = registers[i];     digitalWrite(SER_Pin, val);    digitalWrite(SRCLK_Pin, HIGH);   }  digitalWrite(RCLK_Pin, HIGH); } //set an individual pin HIGH or LOWvoid setRegisterPin(int index, int value){  registers[index] = value;} void loop(){   setRegisterPin(0, LOW);  setRegisterPin(1, HIGH);  setRegisterPin(2, LOW);  setRegisterPin(3, HIGH);  setRegisterPin(4, LOW);  setRegisterPin(5, HIGH);  setRegisterPin(6, LOW);  setRegisterPin(7, HIGH);    setRegisterPin(8, LOW);  setRegisterPin(9, HIGH);  setRegisterPin(10, LOW);  setRegisterPin(11, HIGH);  setRegisterPin(12, LOW);  setRegisterPin(13, HIGH);  setRegisterPin(14, LOW);  setRegisterPin(15, HIGH);    setRegisterPin(16, LOW);  setRegisterPin(17, HIGH);  setRegisterPin(18, LOW);  setRegisterPin(19, HIGH);  setRegisterPin(20, LOW);  setRegisterPin(21, HIGH);  setRegisterPin(22, LOW);  setRegisterPin(23, HIGH);  writeRegisters();  //MUST BE CALLED TO DISPLAY CHANGES  //Only call once after the values are set how you need.      delay(1500);    setRegisterPin(0, HIGH);  setRegisterPin(1, LOW);  setRegisterPin(2, HIGH);  setRegisterPin(3, LOW);  setRegisterPin(4, HIGH);  setRegisterPin(5, LOW);  setRegisterPin(6, HIGH);  setRegisterPin(7, LOW);    setRegisterPin(8, HIGH);  setRegisterPin(9, LOW);  setRegisterPin(10, HIGH);  setRegisterPin(11, LOW);  setRegisterPin(12, HIGH);  setRegisterPin(13, LOW);  setRegisterPin(14, HIGH);  setRegisterPin(15, LOW);    setRegisterPin(16, HIGH);  setRegisterPin(17, LOW);  setRegisterPin(18, HIGH);  setRegisterPin(19, LOW);  setRegisterPin(20, HIGH);  setRegisterPin(21, LOW);  setRegisterPin(22, HIGH);  setRegisterPin(23, LOW);    writeRegisters();  //MUST BE CALLED TO DISPLAY CHANGES  //Only call once after the values are set how you need.    delay(1500);}

 

Editat de Vizitator
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