Pages: [1]   Go Down
Author Topic: LCD de lecteur dvd de salon récupéré, besoin d'aide pour optimiser le code  (Read 625 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je vous présente tout d'abord le peit afficheur LCD récupéré sur un lecteur dvd de salon :

(image trouvée sur le net)
marque : KEHONG
modèle numéro : KHN70241
(source : http://sell.bizrice.com/selling-leads/928548/7-digits-led-display-Use-in-DVD-VCD.html)

Nous avons donc affaire à 7 afficheurs 7 segments dans un même afficheur, avec quelques leds supplémentaire (comme MP smiley-grin, play, pause, ...) smiley-grin

Après quelques mesures, il s'avère que l'afficheur n'est autre qu'une matrice à led, dont j'ai noté le fonctionnement :
On a 17 broches sous le composant.

Les pattes 10 à 16 correspondent aux 7 digits :
10 -> 3ème chiffre
11 -> 1er chiffre
12 -> 2ème chiffre
13 -> 4ème chiffre
14 -> 5ème chiffre
15 -> 6ème chiffre
16 -> 7ème chiffre

Les pattes 1 à 7 correspondent aux 7 segments de chaque chiffres.

La patte 17 correspond aux logos, et aux ':'.

D'autres paramètres sont possibles mais la liste est longue !

Les pattes 10 à 17 sont actives au 0v et les pattes 1 à 8 sont actives au +5v



Voilà pour ce qui est de la présentation de l'afficheur, maintenant, je passe à la pratique !
Je relie les pattes de 1 à 7 sur les sorties 12 à 6 (respectivement) de mon arduino nano.
Je relie les pattes de 10 à 16 sur les sorties 4,3,5,2,1(tx),0(rx) (respectivement)  de mon nano également, je n'utilise pas la patte 17 du LCD pour l'instant.



Maintenant, le code !
Et c'est là que j'aurais besoins de votre aide pour m'organiser !
Préoccupons nous uniquement des chiffre pour ce topic.

Etant donné que l'on ne peut allumer q'un seul segment à la fois, nous sommes obligé de passer par du multiplexage (charlieplexing), et n'ayant pas de multiplexeur ou autre composant spécial pour réaliser celà, je dois me débrouiller avec le code.

Donc, j'ai utilisé des fonctions pour chaque étapes, çà évite de taper un code de 30km de long pour écrire 3 mots...

Le problème par contre, c'est que du coup çà me fait un gros code en un bloc et qui n'est pas franchement optimisé, si vous y jetez un oeil, chaque fonction correspond à un caratère (chiffre ou lettre) que je peut assigner à un digit (D1, D2, D3, D4, D5, D6 ou D7), ce qui m'oblige à utiliser la fonction boucle pour incrémenter une variable it. Cette variable it sert à cadencer l'affichage de mes lettres (ex : si 0<it<100, on écrit 'hey'), on utilise une fonction reset à chaque opération pour faire du multiplexage, exemple :
Pour écrire la lettre o, on allume le segment g, puis on reset, puis le segmentc, puis on reset, puis segment d, puis reset et enfin segment e puis reset.

Mes questions :
Comment puis-je procéder pour éviter l'utilisation de la fonction reset ?
Comment puis-je convertir mes fonctions en librairie interne (dans nouvel onglet), car je n'ai pas compris les tutos trouvés sur le net.
Si quelqu'un peut m'aiguiller, ce serais vachement sympas !



Edit : voilà le code, je l'avais oublié : http://pastebin.com/ADcaWswu
« Last Edit: January 20, 2013, 04:07:55 pm by anthoo12 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

personne ?  smiley-surprise
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3230
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si, si, mais comme tu peux le constater, y a pas foule non plus, c'est pas le métro à Paris.... smiley-lol

Patience donc  smiley-mr-green
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3518
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Etant donné que l'on ne peut allumer qu'un seul segment à la fois
je dirais plutôt un seul digit à la fois. C'est manifestement un afficheur à cathode commune donc tu mets la cathode d'un des digits à zéro et tu appliques un niveau un sur les segments que tu veux allumer pour ce digit. Tu fais une petite pause pour que l'observateur ait le temps de voir les segments allumés. Ensuite tu passes au suivant et ainsi de suite.

Quote
nous sommes obligé de passer par du multiplexage (charlieplexing)
Ce n'est à priori pas du charlieplexing qui nécessite une disposition particulière des LED tête-bêche.

Si tu vas sur le Playground http://playground.arduino.cc//Main/InterfacingWithHardware#Output et que dans la page tu cherches "Seven segment displays" tu verras qu'il y a déjà des librairies qui existent. Avec un peut de chance ce que tu veux faire existe déjà.

Autrement concernant l'optimisation de ton code, si tu regardes les fonctions que tu as créées, elles sont toutes identiques la seule différences entre elles étant les segments allumés. Donc dans ces cas là tu te dis "pourquoi dupliquer le code si c'est seulement l'information qui change à chaque fois. Il faudrait peut être faire un tableau qui décrive les segments allumés ou éteint pour chaque caractère et passer en argument à cette fonction un index dans le tableau qui pointe sur le caractère à afficher."
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci beaucoup fdufnews !
Concernant la librairie, j'ai trouvé çà :
Quote
Multiplex7Seg is a small Arduino library allowing you to multiplex 1, 2, 3 or 4 digits using any one of the pins on your Arduino, that's a 9999 digit display. You also have the ability to enable zero leading blanking for low power requirements. Mail me at bester.juan@gmail.com for additional help on using the library.
je vais essayer.

Si non, c'est pas bête le tableau contenant les pins à allumer pour chaque lettre/chiffre, merci smiley-wink
Logged

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3518
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Multiplex7Seg is a small Arduino library allowing you to multiplex 1, 2, 3 or 4 digits
Il faudra peut être l'adapter un peu si tu veux utiliser tous les digits de ton afficheur. Mais je pense que cela peut faire une bonne base.

Commence par la faire tourner en l'état sur 4 digits de ton afficheur puis une fois certain qu'elle fonctionne comme tu le veux tu pourras la faire évoluer.
Logged

Pages: [1]   Go Up
Jump to: