Electronique > Réalisations > Jeux de lumière > Chenillard 013

Dernière mise à jour : 05/02/2023

Présentation

Composé de 2 x 10 LED placées sur un axe symétrique horizontal, ce chenillard produit des figures lumineuses similaires à celles produites par le "système K2000".

   
chenillard_013_pcb_3d_front

   

Les figures sont codées en "dur" et ne peuvent pas être modifiées, sauf si vous retouchez au code source (fourni) et que vous le recompilez. La vitesse est ajustable au moyen d'un réglage matériel (potentiomètre) et/ou logiciel (boutons poussoir "plus vite" et "moins vite").

   

Schéma

Le coeur du montage est plus simple que celui du chenillard 006c qui a servi de base, mais il y a deux fois plus de LED.

chenillard_013

Si vous n'avez pas besoin d'accompagnement sonore, ne rien câbler sur la ligne RA4 du PIC.
Si vous souhaitez un effet sonore, voir § Ajout d'effets sonores.
   
Choix des LED
Les LED du schéma ci-avant sont représentées par deux bargraphes, mais il va de soi que des LED standards ou haute luminosité conviennent tout à fait, dès l'instant où leur courant nominal ne dépasse pas 20 mA. Si leur courant nominal est supérieur à cette valeur, il convient d'ajouter un transistor additionnel sur chaque sortie (un simple 2N2222 avec une résistance de base de 2,2 KO permet de monter à 500 mA sans problème).
   
Figures lumineuses
Elles sont définies par la mise à l'état logique haut des sorties 0 à 3 du port A et des sorties 0 à 5 du port B du PIC, via quelques lignes de code assez simples à comprendre :

procedure Out_RefreshPort;
begin
PORTA.0 := OutData.0;
PORTA.1 := OutData.1;
PORTA.2 := OutData.2;
PORTA.3 := OutData.3;
PORTB.0 := OutData.4;
PORTB.1 := OutData.5;
PORTB.2 := OutData.6;
PORTB.3 := OutData.7;
PORTB.4 := OutData.8;
PORTB.5 := OutData.9;
end;


Les états individuels de chacune de ces dix sorties sont stockés dans une variable de type word appelée OutData, qui elle-même est modifiée à intervales réguliers dans le corps principal du programme :

case idx of
0 : OutData := %0000000000000000;
1 : OutData := %0000000000000001;
2 : OutData := %0000000000000011;
3 : OutData := %0000000000000111;
4 : OutData := %0000000000001111;
5 : OutData := %0000000000011111;
6 : OutData := %0000000000111111;
7 : OutData := %0000000001111111;
8 : OutData := %0000000011111111;
9 : OutData := %0000000111111111;
10 : OutData := %0000001111111111;
11 : OutData := %0000001111111110;
12 : OutData := %0000001111111100;
13 : OutData := %0000001111111000;
14 : OutData := %0000001111110000;
15 : OutData := %0000001111100000;
16 : OutData := %0000001111000000;
17 : OutData := %0000001110000000;
18 : OutData := %0000001100000000;
19 : OutData := %0000001000000000;
20 : OutData := %0000000000000000;
21 : OutData := %0000001000000000;
22 : OutData := %0000001100000000;
23 : OutData := %0000001110000000;
24 : OutData := %0000001111000000;
25 : OutData := %0000001111100000;
26 : OutData := %0000001111110000;
27 : OutData := %0000001111111000;
28 : OutData := %0000001111111100;
29 : OutData := %0000001111111110;
30 : OutData := %0000001111111111;
31 : OutData := %0000000111111111;
32 : OutData := %0000000011111111;
33 : OutData := %0000000001111111;
34 : OutData := %0000000000111111;
35 : OutData := %0000000000011111;
36 : OutData := %0000000000001111;
37 : OutData := %0000000000000111;
38 : OutData := %0000000000000011;
39 : OutData := %0000000000000001;
end;
Out_RefreshPort;


Comme une variable de type word comporte 16 bits et que l'on travaille ici avec seulement dix sorties, les six bits de poids fort ne sont pas utilisés et restent positionnés à 0.

Vitesse de défilement
En mode automatique, la vitesse de défilement des LED est ajustable de deux façons combinées : de façon "matérielle" avec le potentiomètre RV1, et de façon "logicielle" avec les boutons poussoir SW1 (SpeedDown, ralentissement) et SW2 (SpeedUp, accélération). Pour diminuer la vitesse (rendre plus lent le défilement des leds), vous pouvez augmenter la valeur du condensateur C1, et/ou augmenter la valeur du potentiomètre RV1 (100K ou 220K, voire plus). Et pour augmenter la vitesse (rendre plus rapide le défilement des leds), vous pouvez diminuer la valeur du condensateur C1, et éventuellement descendre la valeur de R13 à 2,2 KO.

Procédure de réglage
- Placer le potentiomètre de réglage RV1 à mi-course.
- Appuyer une ou plusieurs fois sur les boutons SW1 et/ou SW2 pour atteindre la vitesse désirée, ou pour atteindre une vitesse "médiane".
Par la suite, la vitesse peut être augmentée ou diminuée grâce au potentiomètre RV1.
Si les boutons poussoir vous gênent (usage à vitesse fixe sur une voiture, par exemple), soyez rassurés : vous pouvez les supprimer une fois le réglage effectué. la dernière vitesse programmée par ces derniers est sauvegardée en mémoire (EEPROM) et est rappelé à chaque remise sous tension.

   

Ajout d'effets sonores

La ligne RA4 inutilisée dans le programme actuellement diffusé peut être mise à profit pour ajouter un son bref à des instants précis. Pour cela, il faut configurer cette ligne en sortie et se rappeler qu'il s'agit d'une sortie en collecteur ouvert et non d'une sortie TTL standard. Le plus simple consiste à relier un buzzer piézoélectrique passif ou actif, ou un haut-parleur classique avec une résistance série optionnelle (pour limitation de courant). Le mode d'activation de la ligne RA4 dépend alors du type de transducteur sonore utilisé :

   
Utilisation d'un buzzer actif 
Les modifications suivantes doivent être apportées au code logiciel du PIC proposé en libre téléchargement.
Lignes jaunes = code existant, ligne vertes = code à ajouter ou à modifier.
   
Dans la déclaration des variables, ajouter les suivantes :

var
...
OutData: word;
bDoSound: boolean;
Out_Sound: sbit at RA4_bit;

Dans la procédure Init, modifier la direction de la ligne RA4 (anciennement configurée en entrée) :

procedure Init;
begin
...
INTCON.RBIE := 1; // enable RB4..RB7 int
TRISA := %11100000; // RA0..RA4 as output, others as input
TRISB := %11000000; // RB0..RB5 as output, others as input
...
end;

Dans le corps principal du programme, ajouter les lignes suivantes :

begin
...
if bOutReadyToChange then
begin
...
if idx < 39 then
inc(idx)
else
idx := 0;
bDoSound := (idx = 0) or (idx = 20); // play short sound when all lights are off
Out_Sound := bDoSound;
...
end;
end;
...
end;

Dans l'exemple qui précède, la variable bDoSound est positionnée à 1 quand idx vaut 0 ou 20, ce qui dans les deux cas correspond à l'extinction totale de toutes les LED. A adapter en fonction de vos envies ;)

   
Utilisation d'un buzzer passif 
Les modifications suivantes doivent être apportées au code logiciel du PIC proposé en libre téléchargement.
Lignes jaunes = code existant, ligne vertes = code à ajouter ou à modifier.
   
Dans la déclaration des variables, ajouter les suivantes :

var
...
OutData: word;
bDoSound: boolean;
Out_Sound: sbit at RA4_bit;

Dans la procédure Init, modifier la direction de la ligne RA4 (anciennement configurée en entrée) :

procedure Init;
begin
...
INTCON.RBIE := 1; // enable RB4..RB7 int
TRISA := %11100000; // RA0..RA4 as output, others as input
TRISB := %11000000; // RB0..RB5 as output, others as input
...
end;

Dans le corps principal du programme, ajouter les lignes suivantes :

begin
...
if bOutReadyToChange then
begin
...
if idx < 39 then
inc(idx)
else
idx := 0;
bDoSound := (idx = 0) or (idx = 20); // play short sound when all lights are off
if not bDoSound then Out_Sound := 0;
...
end;
end;
...
end;

Dans la procédure Interrupt, ajouter les lignes suivantes :

procedure Interrupt;
begin
if TestBit(INTCON, T0IF) then
begin
inc(iTimerCount);
TMR0 := 0;
ClearBit(INTCON, T0IF); // reset T0 flag
if bDoSound then // play sound ?
Out_Sound := Out_Sound xor 1;
end;
...
end;

   
Utilisation d'un haut-parleur dynamique

Côté code logiciel, il faut procéder aux ajustements indiqués pour l'utilisation d'un buzer piezo passif. Si le HP possède une impédance inférieure à 100 ohms, il faut ajouter une résistance série de limitation de courant de sorte que la totalité des deux donne une valeur voisine de 100 ohms (ce n'est pas critique à l'ohm près). Avec un HP 8 ohms, le son sera bien amoindri par la résistance câblée en série.

Pour un besoin de "forte" puissance, il faudra insérer un petit ampli BF "logique". entre la sortie du PIC et le HP. Dans ce cas bien précis, n'oubliez pas d'ajouter une résistance de rappel (4k7 à 22k) entre le +Valim et la sortie RA4 qui pour rappel est de type "collecteur ouvert".

   
Sons différents selon sorties activées 

Diffuser un son différent en fonction de l'état des sorties est tout à fait possible, bien que moins simple que la solution proposé ci-devant. Pour ce faire, il faut utiliser l'état logique de toutes les sorties pour activer un ou plusieurs générateurs sonores externes. Dans ce cas de figure, la génération des sons ne se fait pas dans le PIC et aucune modification du logiciel n'est à prévoir.

    

Logiciel du PIC

Code source MikroPascal (Pro V2.50) et fichier binaire compilé (hex) prêt à charger dans le PIC avec le programmateur de votre choix.
Chenillard 013 - 16F628A.zip (version du 10/09/2009)

Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

   

Circuit imprimé (PCB)

Non réalisé. Vue 3D réalisée uniquement pour donner un aperçu des composants utilisés.

   

Historique

05/02/2023
- Ajout paragraphe expliquant comment ajouter un son.

10/09/2009
- Première mise à disposition.