Galera, Gostaria da ajuda de vocês para brincar com o CI 74HC595

A ideia é mesmo é a multiplicação de portas!

preciso por exemplo de 9 CIs interligados um ao outro e como teste inicial vou fazer acionamento de LEDs e suas portas de saídas.

adicionarei puch-buttons como chaves para quando pressionar o primeiro botão ou a primeira chave, acione o primeiro LED do Primeiro CI, e quando pressionar a chave 2 seja acionado o 2º LED do primeiro CI. E assim por diante sucessivamente.

Primeiramente eu criei um exemplo no proteus, para simular isso vou adicionar aqui o conteúdo.

Imagem e skatch em uso...

Gostaria de um exemplo para poder prosseguir!

Dez de já agradeço à vocês meus amigos!

Exibições: 1801

Anexos

Responder esta

Respostas a este tópico

Grande RV!

São botões puch button.

quero que ao manter pressionado o led fique acesso se não apague 

Oi MAP, este CI que indiquei deve servir pra você.

'A cada pulso no clock, ele põe a saída na condição do data (FlipFlop CD)

Rui

Galera ai está o esquemático que eu fiz, e vou adicionar o skatch que estou testando.

O programa aciona o LED que eu quero, mas apenas uma vez e apenas um, não consigo desligar ele e nem acionar mais que um.

O Skatch, eu usei o exemplo de array que está nesse endereço: https://www.arduino.cc/en/Tutorial/ShftOut23

e mudei o valor das variáveis binárias para acionar apenas um led por vez.

Estou usando a Serial para digitar o numero da porta do CI que vai ser acionado

Sei que algo está errado e por isso gostaria da ajuda dos senhores.

Obrigado!


int latchPin = 8; //Pino connectado no ST_CP (entrada de dados - 74HC595
int clockPin = 12; //Pino connectado no SH_CP (Registrador de Deslocamento - 74HC595
int dataPin = 11; ////Pino connectado no DS (registrador de armazenamento - 74HC595
int pin_vcc = 7; // Pino que envia 5V para o CI
int pin_gnd = 6; // Pino que permanece em nivel baixo para fazer o GND

byte dataRED;
byte dataGREEN;
byte dataArrayRED[10];
byte dataArrayGREEN[10];

void setup() {
Serial.begin(9600);
pinMode(pin_vcc, OUTPUT);
pinMode(pin_gnd, OUTPUT);

digitalWrite(pin_vcc, 1);
digitalWrite(pin_gnd, 0);

//definindo os pinos como de saída
dataArrayRED[0] = 0x00; //00000000
dataArrayRED[1] = 0x01; //00000001
dataArrayRED[2] = 0x02; //00000010
dataArrayRED[3] = 0x04; //00000100
dataArrayRED[4] = 0x08; //00001000
dataArrayRED[5] = 0x10; //00010000
dataArrayRED[6] = 0x20; //00100000
dataArrayRED[7] = 0x40; //01000000
dataArrayRED[8] = 0x80; //10000000

dataArrayGREEN[0] = 0x00;//00000000
dataArrayGREEN[9] = 0x01; //00000001
dataArrayGREEN[10] = 0x02; //00000010
dataArrayGREEN[11] = 0x04; //00000100
dataArrayGREEN[12] = 0x08; //00001000
dataArrayGREEN[13] = 0x10; //00010000
dataArrayGREEN[14] = 0x20; //00100000
dataArrayGREEN[15] = 0x40; //01000000
dataArrayGREEN[16] = 0x80; //10000000

}
void loop() {
while(Serial.available()>0){
String valor = Serial.readString();
Serial.print("Valor Informado: ");
Serial.println(valor.toInt());
//load the light sequence you want from array
switch(valor.toInt()){
case 0 :
dataRED = dataArrayRED[0];
break;
case 1 :
dataRED = dataArrayRED[1];
break;
case 2 :
dataRED = dataArrayRED[2];
break;
case 3 :
dataRED = dataArrayRED[3];
break;
case 4 :
dataRED = dataArrayRED[4];
break;
case 5 :
dataRED = dataArrayRED[5];
break;
case 6 :
dataRED = dataArrayRED[6];
break;
case 7 :
dataRED = dataArrayRED[7];
break;
case 8 :
dataRED = dataArrayRED[8];
break;
}
//move 'em out
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, 1);
}
}

void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first,
//on the rising edge of the clock,
//clock idles low

//internal function setup
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);

//clear everything out just in case to
//prepare shift register for bit shifting
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);

//for each bit in the byte myDataOut
//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or "1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);

//if the value passed to myDataOut and a bitmask result
// true then... so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1i) ) {
pinState= 1;
}
else {
pinState= 0;
}

//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}
//stop shifting
digitalWrite(myClockPin, 0);
}
//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
void alimentacao(){
if((pin_vcc = 0)&&(pin_gnd = 1)){
digitalWrite(pin_vcc , 1);
digitalWrite(pin_gnd , 0);
}

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço