afficheur 13 segments ... possible ?

Salut

je suis fan d'horloge, et je fabrique pour des amis, des trucs personnalisé, enfin, je me demande (pour un but de personnalisation si je peux remplacer un classique afficheur 7 segments par un autres 13 segments de ce type :

je viens de l'inventer ... chercher pas ... ca n'existe pas dans le commerce ...

je pense que je doit modifier dans mon code cette partie :

//Digits Matrix - 0 a 9
byte num[] = {
  B01111110, // Zero
  B00110000, // One
  B01101101, // Two
  B01111001, // Three
  B00110011, // Four
  B01011011, // Five
  B01011111, // Six
  B01110000, // Seven
  B01111111, // Eight
  B01111011, // Nine
};

mais pas seulement ...

c'est possible ?

Merci

Hey

Je vais pas vraiment répondre à ta question mais j'ai déjà vu des afficheurs 16 segments où tu as une flèche vers le haut et une vers le bas.

J'ai pas mon ordi sous la main pour te faire un schéma mais je ne sais pas si tu vois. Mais en tout cas tu pouvais afficher toutes les lettres de l'alphabet en minuscule majuscule et tout les chiffres.

vous parler peut être des afficheur alphanumérique de ce type :

oué je connais ... mais trop compliquer a a fabriquer soit même ... en + j'ai pas besoin d'afficher des lettres ... donc au final j'ai juste besoin de 13 segments ...

esloch:
Salut

je suis fan d'horloge, et je fabrique pour des amis, des trucs personnalisé, enfin, je me demande (pour un but de personnalisation si je peux remplacer un classique afficheur 7 segments par un autres 13 segments de ce type :

je viens de l'inventer ... chercher pas ... ca n'existe pas dans le commerce ...

je pense que je doit modifier dans mon code cette partie :

//Digits Matrix - 0 a 9

byte num[] = {
 B01111110, // Zero
 B00110000, // One
 B01101101, // Two
 B01111001, // Three
 B00110011, // Four
 B01011011, // Five
 B01011111, // Six
 B01110000, // Seven
 B01111111, // Eight
 B01111011, // Nine
};




mais pas seulement ...

c'est possible ?

Merci

bonjour
un afficheur c'est simplement un arrangement de led
par simplicité le choix est souvent de travailler en cathodes ou anodes communes pour faire du multiplexage.
dans ton cas il faut travailler sur 13 bits au lieu de 7 (ou 8 si le point est utilisé)
un byte (8 bits) ne suffit plus à la declaration , il faut passer pour confort à une déclaration de 16 bits

Artouste:
bonjour
un afficheur c'est simplement un arrangement de led
par simplicité le choix est souvent de travailler en cathodes ou anodes communes pour faire du multiplexage.
dans ton cas il faut travailler sur 13 bits au lieu de 7 (ou 8 si le point est utilisé)
un byte (8 bits) ne suffit plus à la declaration , il faut passer pour confort à une déclaration de 16 bits

eehhhh !! ... oui ... comment faire ?

Artouste:
bonjour
un afficheur c'est simplement un arrangement de led

Bonjour;

Oui c'est vrai, c'est un arrangement de led (ou de segments). Existe t'il une solution pour arranger (ou créer) soi même autant de segments que l'on veut (dans des tailles raisonnables).

le problème c'est plus compliquer .. je contrôle actuellement l'affichage de mon horloge (4 digits multiplexé) via deux 74HC595 ... les modifications risque d’être interminable !
non ?

esloch:
eehhhh !! ... oui ... comment faire ?

Déjà il faut definir le poids binaire de chaque segment et donc affecter arbitrairement ce poids.
ensuite definir les pins de sorties de ton MCU correpondant à chaque segment (tu veux utiliser quoi comme arduino ?)
avec l'exemple choisi arbitrairement pour l'exemple et pour

  • afficher le 0 , le code binaire arbitraire pourrait etre 0000000011111111
  • afficher le 1 , le code binaire arbitraire pourrait etre 0000101100000000

Artouste:
...
avec l'exemple choisi arbitrairement pour l'exemple et pour

  • afficher le 0 , le code binaire arbitraire pourrait etre 0000000011111111
  • afficher le 1 , le code binaire arbitraire pourrait etre 0000101100000000

bon ...

supposons que je reste sur votre proposition et éliminons cet "arbitraire" .. ceci implique :

//Digits Matrix - 0 a 9
byte num[] = {
  B1111111100000, // Zero
  B0000110011010, // One
  B0110111010101, // Two
  B1111110000100, // Three
  B0011000100101, // Four
  ...
};

c'est pas ce que vous proposer ... je place normalement un 1 pour un digit allumé non ? ... je place le B au début ??

esloch:
le problème c'est plus compliquer .. je contrôle actuellement l'affichage de mon horloge (4 digits multiplexé) via deux 74HC595 ... les modifications risque d’être interminable !
non ?

Pas vraiment interminables. Au pire il suffit d'ajouter un registre à décalage et tu gagnes 8 bits supplémentaires.

Il faut 1 HC595 de plus pour faire les 16 bits nécessaires aux 13 segments.

Remarques:

-vous voulez un 1 spécial avec 3 segments parmi les 13 qui ne serviront qu'à ce 1 et qui seront activés en même temps (que pour ce 1), es 3 ne font donc qu'un.

  • les 2 segments horizontaux du haut fonctionnent toujours en même temps, ils ne font donc qu'un.

  • Idem pour les 2 segments horizontaux du bas et du milieu.

-Vous avez un code pour le point, si vous n'utilisez pas le point il peut être affecté par exemple au 3 segments que vous avez inventé pour le 1.

Résultat, si je ne dis pas de bêtise, votre 13 segments ne fait en fait qu'un 7 ré arrangés.

jeanfranlec:
Il faut 1 HC595 de plus pour faire les 16 bits nécessaires aux 13 segments.

Remarques:

-vous voulez un 1 spécial avec 3 segments parmi les 13 qui ne serviront qu'à ce 1

ce segment est aussi utilisé pour le 2

jeanfranlec:
Il faut 1 HC595 de plus pour faire les 16 bits nécessaires aux 13 segments.

Remarques:

-vous voulez un 1 spécial avec 3 segments parmi les 13 qui ne serviront qu'à ce 1 et qui seront activés en même temps (que pour ce 1), es 3 ne font donc qu'un.

  • les 2 segments horizontaux du haut fonctionnent toujours en même temps, ils ne font donc qu'un.

  • Idem pour les 2 segments horizontaux du bas et du milieu.

-Vous avez un code pour le point, si vous n'utilisez pas le point il peut être affecté par exemple au 3 segments que vous avez inventé pour le 1.

Résultat, si je ne dis pas de bêtise, votre 13 segments ne fait en fait qu'un 7 ré arrangés.

bien vu jeanfranlec ... bravo ... mais j'ai pas tous dit :-[ ... mon horloge qui affiche aussi la température et l’humidité ... donc j'ai besoin d'afficher aussi un °C et un %

donc finalement ... la solution d'ajout d'un autres HC595 je pense est mieux adapter ... enfin si j'arrive à le faire ...

Edit : je pense que je dois suivre ce tutorial ... non ?

Pour le tuto;

Tu choisi judicieusement de faire du multiplexage car tu gére en réalité (d'aprés ce que j'ai vu de tes réalisations) 4 afficheurs x segments.

Donc tu a besoin de 4 bits pour adresser tes 4 afficheurs.

Alors, dans la théorie, si tu souhaite 4 afficheurs 13 segments, c'est bien 3 HC595 qu'il faut en serie car il te faut
13 bits pour choisir le segments de l'afficheur

  • 4 bits pour choisir l'afficheur

= 17 bits

Soit 3 registres (HC595) de 8 bits

Aprés, pour le codage je ne suis pas assez caler pour te dire comment remplir tes registres bit à bit (SoS J-M-L?)

Si tu pars du schéma actuel et de la librairie qui fonctionne déjà:

  • tu ajoutes un nouveau registre entre les 2 existants
  • dans la librairie, tu déclares tes caractères comme des unsigned int (au lieu de byte)
  • dans la librairie, dans la fonction qui envoyait le byte tu fais envoyer un unsigned int (donc il faut émettre 2 octets consécutivement)

Normalement, il n'y a pas d'autre modification à faire. Ne pas oublier de redéfinir la forme de tes caractères.

fdufnews:
Si tu pars du schéma actuel et de la librairie qui fonctionne déjà:

  • tu ajoutes un nouveau registre entre les 2 existants
  • dans la librairie, tu déclares tes caractères comme des unsigned int (au lieu de byte)
  • dans la librairie, dans la fonction qui envoyait le byte tu fais envoyer un unsigned int (donc il faut émettre 2 octets consécutivement)

Normalement, il n'y a pas d'autre modification à faire. Ne pas oublier de redéfinir la forme de tes caractères.

Bonsoir fdufnews
sympa l'idée du 595 en surnuméraire intermédiaire :grin:

fdufnews:
Si tu pars du schéma actuel et de la librairie qui fonctionne déjà:

  • tu ajoutes un nouveau registre entre les 2 existants
  • dans la librairie, tu déclares tes caractères comme des unsigned int (au lieu de byte)
  • dans la librairie, dans la fonction qui envoyait le byte tu fais envoyer un unsigned int (donc il faut émettre 2 octets consécutivement)

Normalement, il n'y a pas d'autre modification à faire. Ne pas oublier de redéfinir la forme de tes caractères.

c'est clair ... j'y reviens bientôt avec un test ...

Merci

fdufnews:
Si tu pars du schéma actuel et de la librairie qui fonctionne déjà:

  • tu ajoutes un nouveau registre entre les 2 existants
  • dans la librairie, tu déclares tes caractères comme des unsigned int (au lieu de byte)
  • dans la librairie, dans la fonction qui envoyait le byte tu fais envoyer un unsigned int (donc il faut émettre 2 octets consécutivement)

Normalement, il n'y a pas d'autre modification à faire. Ne pas oublier de redéfinir la forme de tes caractères.
[/quote]

1er étape ... j'ai un doute dans les liaisons entre les 74HC595 ... surtout entre les pins 9 et 14 ...

sais plus :frowning: ...

005.pdf (42.3 KB)

Bonjour;

J'aime bien l'expression "Ce n'est pas faux", et je dirais que ton schéma n'est pas faux.
En tout cas pour les pins 9 et 14 c'est OK
Après c'est toi qui vois comment tu désire arranger tes "mots" au niveau de ton codage.

Il faudra de toute façon que tu remplisse tes registres avec 3x8 = 24 bits alors que n'a besoin que de 13+4 = 17 bits.

Arranger tes mots veux décrit, pour moi, comment tu gère les vides, c'est à dire les bits qui ne te servent pas, ou les mets tu?
Au début, à la fin, un peu partout?

C'est juste pour te faciliter le travail au niveau de la compréhension du code.

Je reprends, si tu a un mot de 17 bits, tu eux imaginer, pour la facilité de ton code, et pour coller aussi avec le hard tout de même que tu remplisse tes regisytres de cette façon

a b c d e f g h - i j k l m 0 0 0 - A1 A2 A3 A4 0 0 0 0 = 3 mots de 8 bits pour décrire l'états de tes segments et de ton multiplexage.

Tu remplace les lettre par l'état 0 ou 1 selon que tu veuille activer ton segment ou afficheur
Tu peux imaginer toutes sortes d'autres arrangements plus ou moins judicieux.

La sortie Qa inutilisée des registres est éventuellement discutable. Pour la position des 4 anodes, le plus simple est de les laisser comme elles étaient dans la version précédente ainsi on limite l'impact sur la librairie.