Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

74hc595 et module 4 relais

Thu Apr 30, 2020 9:41 am

Bonjour

Après quelques jours de test et googlelisation je me tourne vers vous trouvez de l"aide

Je cherche à contrôler un module 4 relais via un convertisseur série/parallèle de type 74hc595

Une sortie du 74hc595 commande un transistor NPN 2222a qui met à la masse la PIN de contrôle d'un des relais
Le relai commute (j'entends bien le click) mais "saute" instantanément (1 fois sur 4 ou 5 il reste commuter !.!)

J'ai tester avec ou sans résistance 10K entre le relai et le transistor OU le transistor et la masse comme lut sur le forum en cas de masse non stable mais sans succès.

Auriez vous une idée de mon soucis ou une autre solution pour piloter le relai (Mais avec le 74hc595)

Merci d'avance de vos réponses.

Image

N.

jelopo
Posts: 1596
Joined: Wed Oct 17, 2012 7:53 pm

Re: 74hc595 et module 4 relais

Thu Apr 30, 2020 6:51 pm

Bonjour,

Êtes vous sûr que ce ne soit pas un problème logiciel ?
Avant de piloter un relais, une simple led + résitance sur la sortie, permettrais de visualiser le fonctionnement.

A+

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Thu Apr 30, 2020 9:12 pm

Bonsoir

Merci de votre réponse

J'ai bien pensé à utiliser la technique indiquer dans un post du site et tester chacune des parties séparement...

De plus, un test précédent sans les transistor fait biens s'allumer les différentes led du module 4 relais en fonction de la valeur envoyer...

Nipper

PS: Dans le doute, avant de cliquer sur "submit", je viens de placer une led avec résistance à la place du transistor et celle ci reste allumer en permanence.

danjperron
Posts: 3486
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: 74hc595 et module 4 relais

Thu Apr 30, 2020 9:51 pm

Es-tu certain que ton schéma est ok. Ton transistor est en envers!

Il faut mettre l'émetteur sur GND et le collecteur au relais.




Sii tu branches manuellement GND sur l'entrée du relais. Est-ce qu'il s'active.
Si tu branches 3.3V sur l'entrée du relais est-ce qu'il s'active.

Un transistor 2n2222 est un NPN donc le collecteur force à GND (si l'émetteur est à GND).
Si ton relais est activé par 3.3v il faudra utiliser un transistor PNP (émetteurr=3.3V) et le signal sera inversé

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Thu Apr 30, 2020 10:18 pm

Bonsoir

J'ai utiliser Kicad pour le schéma et je ne suis pas sur du sens de celui ci "pour ce qui est du schéma"

Quand je force la pin de contrôle du relai à GND il commute et reste commuté, quand je "set" le pin via le 74hc595 il commute (mais ne reste pas commuter sauf 1 fois sur 3 ou 4 de manière aléatoire)

Je test de ce pas avec un 3.3V et un transistor PNP au cas ou...

Merci

Nipper

[EDIT]
Je ne sais pas si cela a un sens mais les "symptômes" sont les même avec un NPN 2222a ou un PNP s8550
Le relai commute à GND, rien ne ce passe à 3.3V
[/EDIT]

totoharibo
Posts: 4416
Joined: Thu Jan 24, 2013 8:43 am

Re: 74hc595 et module 4 relais

Fri May 01, 2020 9:12 am

je suis un peu con et je m'en excuse
Pour piloter le 595 il faut 4 pins :
DS, SHCP, MR, OE
pour commander 4 relais je ne vois pas le gain en nombre de pins en commandant directement par les GPIO ...
Sans doute un challenge ?

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Fri May 01, 2020 12:13 pm

Bonjour

Non, une augmentation progressive de la "maquette" afin de valider chacune des parties

A terme, LES 74hc595 commanderont 16 relais plus des LED + divers (j'ai prévue 4 74hc595)

De plus , il y aura du calcul de RPM et du PWM... donc un max de PIN du Raspberry doivent ester dispo.

Nipper

totoharibo
Posts: 4416
Joined: Thu Jan 24, 2013 8:43 am

Re: 74hc595 et module 4 relais

Fri May 01, 2020 1:52 pm

pourquoi pas le PCF8574 en I2c
avec des PWM : PCA9685 toujours en I2c
Les PWM en soft ...ça prend du temps machine.

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Fri May 01, 2020 2:19 pm

Bonjour

A l'origine, le 74hc595 devait contrôler directement les relais mais les relais ne commutais pas (alors que les leds de status sur la carte relai s'allumaient/s'éteignaient en fonction de la valeur envoyer)
Quand je parle de commutation, je parle bien du "clique" significatif du relai, pas de la led de status.

C'est suite à ce soucis et un post trouver ou ce problème était indiquer que j'ai décider de rajouter le transistor.

Ne vais-je pas avoir le même soucis avec un PCF8574?

Je garde ces composants comme idée (histoire de diminuer la taille final de ma maquette mais j'avoue que j'aimerais bien comprendre ce problème quand même...

Pour le PWM et le PCA9685, je garde ça dans un coin de ma tête, c'est l'étape suivante de mon projet et si je peu économiser des PIN du rasp, je prend.

Merci

totoharibo
Posts: 4416
Joined: Thu Jan 24, 2013 8:43 am

Re: 74hc595 et module 4 relais

Fri May 01, 2020 5:27 pm

le PCF8574 est plus simple pour commander les relais.
Je l'utilise pour commander un affichage LCD 4 lignes
Pour faire PWM : zéro
Si tu n'as pas de problème vraiment temps réel (avec des relais ...) l'I2C permet de gagner des pins.

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Tue May 05, 2020 9:10 pm

Plusieurs test et toujours pas de solution...

Je viens de recevoir des PCF8574... J'ai vais tester pour voir.

Nipper

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Fri May 08, 2020 10:11 am

totoharibo wrote:
Fri May 01, 2020 5:27 pm
le PCF8574 est plus simple pour commander les relais.
Je l'utilise pour commander un affichage LCD 4 lignes
Pour faire PWM : zéro
Si tu n'as pas de problème vraiment temps réel (avec des relais ...) l'I2C permet de gagner des pins.
Bonjour

Je me suis basé sur ce post pour tester le PCF8574 et rien. Les autres post que j'ai pus trouver sont d'accord avec celui ci
https://www.instructables.com/id/Contro ... d-PCF8574/

Je tente d'allumer une led pour le moment (j'ai tester mon circuit, la led s'allume si connecter au 5V)

Ou je suis poissard ou j'ai rater un détails

Pourrais tu me donner qqs indices s'il te plait

PS:
i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
... ... ...


i2cdump -y 1 0x20
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f .???????????????
10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f ????????????????
20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f !"#$%&'()*+,-./
30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 0123456789:;<=>?
40: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f @ABCDEFGHIJKLMNO
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f PQRSTUVWXYZ[\]^_
60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f `abcdefghijklmno
70: 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f pqrstuvwxyz{|}~?
80: 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f ????????????????
90: 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f ????????????????
a0: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af ????????????????
b0: b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf ????????????????
c0: c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf ????????????????
d0: d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df ????????????????
e0: e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef ????????????????
f0: f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff ???????????????.


Désolé et merci d'avance.

Nipper

totoharibo
Posts: 4416
Joined: Thu Jan 24, 2013 8:43 am

Re: 74hc595 et module 4 relais

Fri May 08, 2020 1:35 pm

le dump n'a rien à faire avec le 8574 : il n'a pas de registres ...

Regardes la doc pour voir comment il est foutu et comment il répond.
Il comporte 8 bascules et on lit ou écrit les 8 d'un coup.
Il y a un bit dans l'adresse qui dit si on veut lire ou écrire.
On peut pas faireplus simple :lol:

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Sun May 10, 2020 12:45 am

Bonsoir

Merci de ta réponse mais j'ai peur d'être coincer...
J'ai fais le fainéant et ai pris le modèle pré-cablé...

Image

Je creuse, je creuse...

Nipper

totoharibo
Posts: 4416
Joined: Thu Jan 24, 2013 8:43 am

Re: 74hc595 et module 4 relais

Sun May 10, 2020 8:16 am

RTFM
et biglo pour sonner ...
pourtant chez moi ça fonctionnait. Ils ont peut-être changé les PCF8574 :lol:
j'utilise pour commande un afficher LCD
Ton lien instructable est bizarre ... son seul défaut est de fonctionner

Si ça peut t'aider : le code (en C désolé)

Code: Select all

///**********************************************************************
//* Filename    : I2CLCD1602.c
//* Description : Use the LCD display data
//* Author      : freenove
//* modification: 2017/04/18
//**********************************************************************/
//compilation par 
//gcc -o <sortie> <fichier.c> -lwiringPi -l WiringPiDev

//////////////////// adresse 0x38 //////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <wiringPi.h>
#include <pcf8574.h>
#include <lcd.h>
#include <time.h>
#include <string.h>
#include <unistd.h>


//#define pcf8574_address 0x27        // default I2C address of Pcf8574 (CMS)
#define pcf8574_address 0x3F        // default I2C address of Pcf8574A (DIL)
//#define pcf8574_address 0x38        // default I2C address of Pcf8574A
#define BASE 64         // BASE is not less than 64
//////// Define the output pins of the PCF8574, which are directly connected to the LCD1602 pin.
#define RS      BASE+0
#define RW      BASE+1
#define EN      BASE+2
#define LED     BASE+3
#define D4      BASE+4
#define D5      BASE+5
#define D6      BASE+6
#define D7      BASE+7

int lcdhd;// used to handle LCD

#define FILENAME "/tmp/LCD"



/*
 * print_ligne_8:
 *	imprime une ligne sur l'afficheur 2*8 caracteres
 *********************************************************************************
 */
void print_ligne_8 (char *chaine) 
//imprimer une ligne en deux bouts
//afficheur en 2*8 caracteres
{
	int i=0;
	char ligne[]="01234567890123456789";

	lcdHome(lcdhd);
	usleep (20000);
	strncpy(ligne, chaine,16);
	ligne[16]=0 ;
	lcdPosition(lcdhd,0,0);
	while (ligne[i] !=0 )
		{
		if (i == 8) 
		{
		    lcdPosition(lcdhd,0,1);
		}    
		lcdPutchar(lcdhd,ligne[i++]) ;
		}
	if (i < 16)
		{
		for( ; i<16 ; i++)
			{
			if (i == 8) lcdPosition(lcdhd,0,1);
			lcdPutchar(lcdhd,' ');
			}
		}
}
/*
 * print_ligne:
 *	imprime une ligne sur l'afficheur 2*16 caracteres (pas de decoupage de ligne)
 *********************************************************************************
 *********************************************************************************
 */
void print_ligne_16 (char *chaine) 
//imprimer une ligne complete
//afficheur en 2x16 caracteres
//ne va que sur la premiere ligne
{
	int i;
	char ligne[]="012345678901234567";
	i = 0 ;
	//lcd_4_PutCommand (LCD_HOME) ;
	//sleep (1);
	strncpy(ligne, chaine,16);
	ligne[strlen(chaine)]=0 ;
	while (ligne[i])
		lcdPutchar(lcdhd,ligne[i++]) ;
	if (i < 16)
		for( ; i<16 ; i++)
			lcdPutchar (lcdhd,' ');

}
//***************************************************
// fichier tampon FILENAME
//un argument :
//	pas de FILENAME -> c'est le premier appel de LCD
//		- afficher argument ligne 1
//		- sauver ligne 1 vide
//		- sauver argument dans ligne 2
//	FILENAME ligne 2 vide ("")
//		- afficher sur ligne 2
//		- sauver lige 1 vide
//		- sauver argument dans ligne 2
//  FILENAME 2 lignes pas vides
//		- afficher ligne 2 sur ligne 1
//		- sauver ligne 2 dans ligne 1
//		- sauver argument dans ligne 2 

//deux arguments (pas de lecture FILENAME)
//		- afficher les 2 arguments
//		- sauver les deux arguments 
//***************************************************
int main(int argc, char* const argv[]){
    int i;
    FILE *prog;    
    char buf0[20], buf1[20];


    if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen
        printf("setup wiringPi failed !");
        return 1; 
    }
    pcf8574Setup(BASE,pcf8574_address);// initialize PCF8574
    for(i=0;i<8;i++){
        pinMode(BASE+i,OUTPUT);     // set PCF8574 port to output mode
    } 
    digitalWrite(LED,HIGH);     // turn on LCD backlight
    digitalWrite(RW,LOW);       // allow writing to LCD
	// initialize LCD and return “handle” used to handle LCD
	lcdhd = lcdInit(2,16,4,RS,EN,D4,D5,D6,D7,0,0,0,0);
    if(lcdhd == -1){
        printf("lcdInit failed !");
        return 1;
    }
/////////////////////////////////////////////////
//traite les arguments
switch (argc - 1) {
    case 0 : 
		//printf("pas d'argument\n");
		//mode d'emploi
		printf("afficheur LCD deux lignes \n");
		printf("pour effacer l'afficheur mettre 2 arguments \"\"  \"\"\n");
		printf("l'adresse I2C du LCD est 0X%X\n",pcf8574_address); 
		return(0);
		break;
    case 1 : //décale la ligne 2 vers la 1 écrit l'argument en ligne 2;
		{
			printf("un argument d'entrée\n");
		//lire ligne de FILENAME
		if ((prog = fopen(FILENAME,"r"))!=NULL)
			{
			//printf ("%s\n",FILENAME);
			fgets(buf0,20,prog); 
			fgets(buf1,20,prog);
			printf("buf0-%d-->%s\n",strlen(buf0),buf0);
			printf("buf1-%d-->%s\n",strlen(buf1),buf1);
			//buf1[strlen(buf0)-1]=0;
			print_ligne_16(buf0);
			fclose(prog);
			lcdPosition(lcdhd,0,0);
			buf1[strlen(buf1)-1]=0;
			print_ligne_16(buf1);
			lcdPosition(lcdhd,0,1);
			print_ligne_16(argv[1]);
			//remplit fichier
			printf("buf  @%[email protected]@%[email protected]\n",buf0,buf1);
			printf("argument 1 %s\n",argv[1]);
			prog = fopen(FILENAME,"w");
			fprintf(prog,"%s\n",buf1);
			fprintf(prog,"%s\n",argv[1]);
			fclose(prog);	
			}
		else			
			{
			printf ("pas de /tmp/LCD : premier appel\n");
			lcdPosition(lcdhd,0,0);
			print_ligne_16(argv[1]);
			//remplit fichier
			prog = fopen(FILENAME,"w");
			fprintf(prog,"\n");
			fprintf(prog,"%s\n",argv[1]);
			fclose(prog);
			}
		break;
	}
	case 2 : //écrit les 2 arguments et affiche
		printf("deux arguments\n");
		//arg 1 sur LCD
		lcdPosition(lcdhd,0,0);
		print_ligne_16(argv[1]);
		//arg 2 sur LCD (va  à la ligne)
		lcdPosition(lcdhd,0,1);
		//lcdSendCommand(lcdhd,0xC0); 
		print_ligne_16(argv[2]);
		//ouvre /tmp/LCD écrit les arguments 
		//ferme /tmp/LCD
		prog=fopen(FILENAME,"w");
		fprintf(prog,"%s\n",argv[1]);
		fprintf(prog,"%s\n",argv[2]);
		fclose(prog);
		break;
    default : //pas correct
		printf ("mauvais nombre d'arguments\n");
		exit(1);	
		}
	
///////////////////// OLD ////////////////////
    //affiche la ligne
//   lcdHome(lcdhd);
//	print_ligne_8(argv[1]);
    return 0;
}

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Sun May 10, 2020 10:40 am

Bonjour

Pour commencer, merci de tes réponses

Alors... J'ai honte...

Il semble que la tension en sortie du PCF8574 soit si faible que la résistance que j'utilise pour tester mes circuits habituellement soit disproportionner par rapport à la tension délivrée par le PCF8574.

Du coup, la lumière émise part les (led Jaune et verte) était si faible que sous les condition de très fort éclairage de mon "atelier", elle ne ce distinguait pas...
Je m'en suis rendu compte par hasard en laissant mon travail en plan pour aller manger (en coupant la lumière). Ce n'est qu'a mon retour que j'ai pus distinguer la légère lumière émise... (je me sens tout con)

Dans la fouler, test avec le modules relai (pour une fois que j'aurais du commencer par ça) et miracle... ça commute...

Merci chaleureusement pour ton support et ton aide.

Nipper

totoharibo
Posts: 4416
Joined: Thu Jan 24, 2013 8:43 am

Re: 74hc595 et module 4 relais

Sun May 10, 2020 1:36 pm

pas de honte !
normal plus c'est gros moins ça se voit :lol:
J'ai passé 3 jours sur un "bug" : il y avait un ";" mal placé et ce n'est pas la première fois.
C'est pourquoi un café résout les problèmes

Nipper1er
Posts: 10
Joined: Thu Apr 30, 2020 9:16 am

Re: 74hc595 et module 4 relais

Fri May 15, 2020 4:49 pm

Bonjour

Puis me renseigner sur la lib que tu utilise pour faire tourner ton pca9685? (je parle bien du PCA9685 que tu ma conseiller pou le PWM)

Au cas ou l'info est nécessaire, j'ai ce modèle
Image

D'avance merci

Nipper

Return to “Français”