Olá

Estou utilizando um 74HC595 junto com Atmega328 para expandir as portas de saída que serão utilizadas para ligar alguns reles.

O problema é que toda vez que o circuito é energizado, o 74hHC595 inicia com as saídas em HIGH, o que está causando acionamento dos reles indevidamente.

Alguém sabe se tem como contornar esse problema no 74HC595 ?

Obrigado.

Exibições: 171

Responder esta

Respostas a este tópico

Olá André.

Seu problema me causa estranheza, pois levei um tempo estudando o 595, fiz diversos testes e isso nunca aconteceu comigo.

Pode ser um problema na programação ou no circuito.

Para que os membros possam te ajudar melhor, eu recomendo você colocar uma foto do seu circuito e/ou anexar o sketch.

Obrigado pela resposta.

Então, ele faz isso mesmo desconectado do MCU. Apenas ligando a alimentação ele pisca algumas saídas. Tenho 2 CIs aqui e ambos estão fazendo isso.

Boa tarde AFL,

existe um pino no 595 que tem a função de desabilitar as saídas dele.

Este pino é o 13, OE Output Enable. Se ele estiver em LOW, a saídas estarão habilitadas.

Com um resistor de Pull-Up, mantenha este pino em HIGH e só coloque ele em LOW qdo quiser usar as saídas..

Depois conta o resultado pra gente.

RV

Rui, se eu manter o pino 13 em 1, com um pullup de 10k ele não pisca quando ligo. Problema resolvido, Porém em contrapartida, tive que utilizar mais um pino do MCU para controlar o pino 13 e habilitar a escrita.

Estou pensando em testar o PFC8574 que tenho aqui também.

É só adicionar 1 capacitor e voce tem um RC. Calcule o tempo que precisa para garantir que ele esteja desabilitado até que esteja pronto para obedecer aos comandos

Rui, o codigo completo tem bastante coisa (LCD gráfico, ADS IC2, etc) mas basicamente eu estou usando essa função que já peguei pronta em um canal no youtube.

André, caso seu problema não tenha sido resolvido, recomendo postar a ligação e o código.

Bom dia. Obrigado pela atenção.

A ligação que estou usando está abaixo.

O código estou utilizando uma função para facilitar o acionamento dos pinos, mas creio ser irrelevante, pois os acionamentos indevidos ocorrem antes do MCU "bootar". Mesmo eu desligando os pinos que comunicam o 74HC com o MCU continua ocorrendo os acionamentos indevidos.

Observei que se eu desligar a alimentação e esperar uns 10segundos, quando ligo novamente o problema não acontece, mas se eu desligar e já ligar logo em seguinda, o 74HC aciona as saídas e só desliga quando o MCU inicializa.

ps: não deixou eu anexar o código.

#define pinSH_CP 5 //Pino Clock
#define pinST_CP 6 //Pino Latch
#define pinDS 7 //Pino Data
#define qtdeCI 1

void saidaWrite(byte pino, bool estado);

void setup() {
pinMode(pinSH_CP, OUTPUT);
pinMode(pinST_CP, OUTPUT);
pinMode(pinDS, OUTPUT);
}

void loop() {

saidaWrite(1,1);

saidaWrite(2,1);
delay(500);
saidaWrite(2,0);
delay(500);

}

void saidaWrite(byte pino, bool estado) {
static byte ciBuffer[qtdeCI];
bitWrite(ciBuffer[pino / 8], pino % 8, estado);
digitalWrite(pinST_CP, LOW); //Inicia a Transmissão
digitalWrite(pinDS, LOW); //Apaga Tudo para Preparar Transmissão
digitalWrite(pinSH_CP, LOW);

for (int nC = qtdeCI-1; nC >= 0; nC--) {
for (int nB = 7; nB >= 0; nB--) {
digitalWrite(pinSH_CP, LOW); //Baixa o Clock
digitalWrite(pinDS, bitRead(ciBuffer[nC], nB) ); //Escreve o BIT
digitalWrite(pinSH_CP, HIGH); //Eleva o Clock
digitalWrite(pinDS, LOW); //Baixa o Data para Previnir Vazamento
}
}
digitalWrite(pinST_CP, HIGH); //Finaliza a Transmissão
}

Bem, sua ligação, se não estou enganado, é igual as que fiz.

Pessoalmente não entendo o que está acontecendo com o seu. Entretanto, existe uma questão adicional pois não utilizei relés.

Minha configuração era 100% para Leds, e logo no inicio do código eu tinha adicionado um comando para deixar todos os pinos em estado baixo (um anti-bug que costumo colocar em toda iniciação).

Na realidade estou utilizando leds para simular, não liguei os relés. Percebi que o problema acontece se eu desligo e ligo a alimentação muito rápido, mas agradeço a ajuda. Vou fazer mais uns testes e posso até usar algum recurso como um delay ao ligar a alimentação.

André,

Existe mais uma alternativa para o uso do 74HC595. 

Você pode montar um circuito de power on reset. Isto é quando o circuito é energizado, o pino (10) -SRCLR é mudado para o estado LOW por alguns milisegundos e depois volta para o estado HIGH. 

Quando ocorre isso, o shift register é zerado (cleared). 

https://www.ti.com/lit/ds/symlink/sn74hc595.pdf

Power on reset:

https://www.maximintegrated.com/en/design/technical-documents/app-n...

https://electronics.stackexchange.com/questions/312369/reset-circui...

Tentei fazer isso mas não rolou. Também estranhei, mas não se preocupe, estou vendo algumas outras possibilidades.
Obrigado pela atenção.

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2020   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço