voilà je me lance enfin dans la rédaction de ce sujet, pour vous expliquer le projet sur lequel je travail depuis déjà 1 an bientôt (j'avance vraiment pas vite depuis le temps par manque de temps, et parce que je bute sur certains points et manque de compétences aussi).
__________________________________________________________
But du projet :
- Réaliser un système K2000 (effet bien connu à l'avant de la voiture de KIT), avec bon nombre d'effets comme on en trouve sur la toile...
Bande annonce du K3000 (Knight Rider), version 2009 de K2000.
- Le système final se composera d'une barre de 1m de long environ, et serait disposé dans un salon, ou au dessus d'un bureau pc.
Contraintes :
- Que l'éclairage proposé ne soit pas trop puissant, mais suffisamment visible.
- Que les animations puissent être sélectionnables par interrupteurs ou poussoir.
- Que le système de pilotage puisse accepter "toute puissance de led".
- Qu'on puisse le brancher directement sur une prise 230V...
Et c'est déjà pas mal pour le moment

Équipements :
- Achat d'un PICKit 2 Permettant la programmation. Livré avec un PIC16F690 I/P, j'utiliserai donc ce dernier pour apprendre et réaliser mon k2000.

- Logiciel : MPLAB IDE v8.70, permettant la programmation en C, la compilation et le chargement du programme sur le pic, associé au compilateur CC5X.
- Une platine pour réaliser le montage. _________________________________________________________
N'ayant que très peut de connaissance en programmation électronique pur (pour par dire pas du tout), j'ai eu la chance d'avoir l'aide de CaZaE pour m'apprendre les bases, et m'aider dans mes débuts. Ainsi, la partie configuration du PIC, et du logiciel a été réalisé par lui à distance, et je reprend toujours la même base pour chacun de mes programmes. Un grand merci à lui, bien que tout mes problèmes ne soient pas résolus encore

_________________________________________________________
0 : Les bases du montages :
- Tension continu 12V. Le pic 16F690 s'alimentant en 5V, j'utilise un régulateur 7805CT pour faire passer la tension à 5V stable pour l'alimentation du PIC. Le 12V lui sert à la "puissance". Sur mon montage de test, le 7805CT est tout seul, et suffit comme cela car c'est un tension continu. Pour le montage finale, il faudra que je rajoute peut être un ou deux condensateurs.
- Afin de charger un tout petit peut chaque sortie de PIC, j'ai dû passer par l'ajout de transistors 2N2222A, permettant une charge de 800mA. Chaque sortie de PIC étant limité à 20mA, soit une led, cet élément est donc essentiel. Chaque transistor est piloté par le PIC, et commande 3 led.
Schéma de principe (et de test) du pilotage de ces transistors : - La platine PICKIT2 d'origine permet de piloter 4 led sur 4 sorties différentes, un poussoir, et une résistance variable.
1 : L'apprentissage du code :
Le langage est le C. Avant toute programmation, il faut indiquer au logiciel ce qu'on utilise comme PIC, donc moi le 16F690, indiquer ce qu'on utilise pour programmer, et éventuellement comme débogueur. Il faut configurer les bits correctement, et creer un new project, en créeant dans le dossier windows le fichier main.c (le fichier programme), et ajouter le fichier delay.c (là, je viens de vous faire un gros résumé unh

Chaque début de programme dans mon cas, commence par une description (configuration) de la "base de temps". Ben oui c'est bien beau d'indiquer que votre anime dure 50ms, mais il faut que le programme sache l'interpréter.
Le codage des chiffres est fait en hexadécimal, pour simplifié. Il y a des tableau d'aide à la conversion facilement trouvable sur le net.
Début du programme :
Code: Select all
#pragma CHIP 16F690 //équivalent du #include <16F690.h>
void delay_ms( uns16 millisec)
// Delays a multiple of 1 milliseconds at 4 MHz
// using the TMR0 timer
{
char next = 0;
OPTION = 2; // prescaler divide TMR0 rate by 8
TMR0 = 2; // deduct 2*8 fixed instruction cycles delay
do {
next += 125;
clrwdt(); // needed only if watchdog is enabled
while (TMR0 != next) // 125 * 8 = 1000 (= 1 ms)
;
} while ( -- millisec != 0);
}
Code: Select all
void main(void)
{
ANSEL = 0x00;//permet de desactiver les comparateurs
TRISA = 0x00;
TRISB = 0x00;
TRISC = 0x00;//TRISC=0 configure les port C en output, 1 en input.
while(1) // Le while(1) toujours dans le main
{
// ICI on peut mettre du programme, par exemple, mais on verra plus tard que j'ai procédé d'une autre manière
}
}
Tout ça, c'est bien beau, mais les 4 led de la platine ne suffisait pas à mes embitions. Mon objectif étant d'utiliser le maximum de sortie possible.
Sachant qu'il y en a qui sont uniquement des entrée, comme RA3, et d'autres qui servent à l'alimentation.
J'ai donc rajouté quelques éléments, qui bien qu’intéressants, n'ont vite plus suffit : 2.1 : Choix des composants clés pour la platine de test, et le futur montage :
- Régulateur 7805CT pour fournir le 5V. (+condensateurs 100nF plus tard)
- Transistors 2N2222A 800mA pour le pilotage des led via le pic.
- Résistances 1.3Kohm pour mettre entre chaque sortie et la commande du transistor.
- Résistances de 330 Ohm dans un premier temps, puisque j'ai des groupes de 3 led rouge 2V 20mA en séries.
+ interrupteurs ou poussoir et autres accessoires ...
3 : Les débuts d'animations sur 8 voies, soit 8 groupes de led :
La partie programmation sur 4 voies ayant été vite atteinte, je suis donc passé sur 8 voies.
Jusque là, pas trop de problèmes, les 8 voies étant toutes sur le PORTC, il n'y a pas de "mixage" entre les PORT.

Voici deux exemple de réalisation d'animation, pour le moment.
4 : Obtenir le maximum de voie utilisée en sortie :
Le but étant d'utiliser le maximum de voies, afin que mon K2000 soit le plus "large possible", et donc que l'animation soit sympa, j'ai refait mon montage afin de câbler tous les PORT restants. C'est là où je me suis rendu compte, après quelques test basiques, que je n'arrivais pas à utiliser certaine sortie. En effet, RA3 est destiné à n'être qu'une entrée, et une autre aussi qui est RB7 (il me semble, je ne suis plus sûr, mais en tout cas je ne l'ai pas utilisé).
J'arrive donc à un total de 16 sorties viables sur 20 "broches".
Sur ces 16, RA4 et RA5 m'ont causé pas mal de fil à retordre, car l'une était prise en compte dans l'animation et l'autre non. Après des heures de recherches j'ai visiblement trouvé ce qui ne fonctionnait pas puisque c'est bon. J'ai donc réalisé une animation sur 16 led, et là sa commence à être sympa

Animation :
On constate que deux groupes de led restent partiellement allumés ! ça fait tâche, et je ne sait pas d'où cela peut venir, si quelqu'un à une idée ?
Bilan au stade où j'en suis :
- je ne sais pas faire le PWM pour avoir des luminosité différente et ainsi faire une sorte de chenille 100% / 60% / 20%
- je n'arrive pas à prendre en compte une entrée (interrupteur ou poussoir), donc sur conseil de Cazae, j'ai acheté des 18F, sois disant plus simple à programmer sur ce point de vu. (à suivre...)
- l'idée maintenant, c'est de faire tout un ta de petit programmes "type" d'animation sur 16led, et enfin de coupler tout ça dans un seul programme, avec interrupteur pour sélectionner, ou poussoir, et là c'est pas gagner


Edit : j'ai remis le titre dans l'ordre chronologique