K2000 : Apprentissage, programmation, réalisations...

=> A vos fer à souder ^^ :) ! Des questions en rapport avec un projet ou une de vos réalisation . Une réalisation/projet, à nous présenter au fur et à mesure de sa réalisation.
Rubrique spéciale "Réalisations finies".
MERCI DE NE PAS CRÉER UN DOUBLON DANS LA RUBRIQUE DE DESSOUS.
Termi87
Administrateur
Administrateur
Posts: 3630
Joined: 09 Jul 2006, 21:20
Location: Limousin

K2000 : Apprentissage, programmation, réalisations...

Unread post by Termi87 »

Bonjour à tous,

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 : D !

É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.
Image
- 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.
platine.jpg
_________________________________________________________
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 :
Schéma principe en fonctionnement.jpg
- 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 :roll: ).
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);
}
Le code de base se poursuit avec (mon exemple):

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
	}
}
2 : Modification de la platine pour un peut plus de créativité :
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 :
PicKit 2 (1).JPG
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 'classe' . N'ayant plus de rouge, et pour différencier ces deux sorties qui me faisait ch... j'ai mis 2 led bleu 'yeha" !
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 :roll: 'rhaa' !!

Edit : j'ai remis le titre dans l'ordre chronologique
You do not have the required permissions to view the files attached to this post.
schizophrene
Rang "3 LEDs"
Rang "3 LEDs"
Posts: 154
Joined: 05 Jul 2010, 18:34
Contact:

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by schizophrene »

Salut mon p'tit Termi87!

Très sympa ton projet, ça va donner à mon avis sur 1 mètre de long :)

Quelques idées:
- pour multiplier facilement tes sorties (mais de façon assez chère), tu peux utiliser des MAX7219/7221 pour du digital (allumé/éteint) ou des TLC5940 pour de l'analogique (PWM).
Les TLC5940 peuvent être branchés en série, jusqu'à 64 il me semble (64*16 = 1024 sorties commandables individuellement!), mais coûtent la bagatelle de 5~6 euros l'unité sur les sites français (beaucoup moins sur eBay).
- pour la sélection des animations, tu as essayé les interruptions?


Pour moi, l'avantage des PICs, c'est la possibilité de mixer langage Assembleur et C par exemple: c'est très puissant!
Mais j'avoue que j'aurais privilégié l'Arduino :)

Continue comme ça, je veux en voir plus!
Termi87
Administrateur
Administrateur
Posts: 3630
Joined: 09 Jul 2006, 21:20
Location: Limousin

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by Termi87 »

Salut Schizo' :) ,

Très intéressant tes composants là, mais alors j'ai du mal à visualiser leur fonctionnement. Les MAX sont à environ 5€, sa peut aller encore.
Oui j'ai essayé les interruptions, enfin je crois, mais le plus gros problème, c'est que j'ai essayé sur RA3, et RA3 est bien spécifique car c'est aussi la fonction MCLR... et les deux vont pas bien ensemble visiblement ^^ !

Merci de tes encouragement ;) , pour le moment, le but va être de réaliser le programme avec toute les animation, ensuite je me re-pencherais sur la prise en compte des entrées.
schizophrene
Rang "3 LEDs"
Rang "3 LEDs"
Posts: 154
Joined: 05 Jul 2010, 18:34
Contact:

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by schizophrene »

Hello!

Ces composants fonctionnent grâce à la liaison SDI, que tu dois je pense pouvoir retrouver sur ton PIC.
Sur Arduino, j'utilise 5 sorties + 2 fils pour l'alimentation pour utiliser un TLC5940, ensuite je peux les chainer pour multiplier mes sorties PWM (je n'ai pas encore reçu mes MAX7219, pas encore pu tester).

Les TLC5940, pour une led éteinte, renvoient une tension positive (jusqu'à 17V), il faut donc faire attention au branchement des leds (ou tout autre organe commandé) :).
Sur Arduino, une sortie PWM peut prendre 256 valeur (8 bits); sur une sortie du TLC5940, la valeur PWM peut prendre 4096 valeurs (12 bits). Le fondu de luminosité est encore plus fluide!

Et avec ma petite platine, et la librairie associée, je n'ai que des commandes très simples à envoyer pour faire varier la luminosité.

Un petit exemple d'animation sous PIC12F675:


Par contre, en faisant une petite recherche sous Google, j'ai beaucoup plus de mal à trouver des exemples de codes ou de librairies pour utiliser un TLC5940 avec un PIC :/
Termi87
Administrateur
Administrateur
Posts: 3630
Joined: 09 Jul 2006, 21:20
Location: Limousin

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by Termi87 »

Arduino est plus grand public j'ai l'impression quand même, et il est vrai que tout Microchip, pour trouver des exemples, c'est coton !

Très beau PWM, sa fait rêver ^^ ! :mrgreen: J'en suis loin encore !
Le chemin est long encore, je suis loin d'utiliser et de savoir utiliser des librairies... ^^ !
schizophrene
Rang "3 LEDs"
Rang "3 LEDs"
Posts: 154
Joined: 05 Jul 2010, 18:34
Contact:

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by schizophrene »

Arduino est certes grand public, mais n'est pas dénoué de capacités poussées! Bon allez, j'arrête d'en faire la pub :D

Pour ton projet, même si tu n'as pas les capacités pour faire du PWM ou utiliser des librairies pour l'instant, est déjà une belle avancée technique pour quelqu'un qui découvre l'électronique numérique.

Tu n'en es qu'à la pré-version 1.0. Pour la 2.0, tu intégreras d'autres fonctions :)
Termi87
Administrateur
Administrateur
Posts: 3630
Joined: 09 Jul 2006, 21:20
Location: Limousin

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by Termi87 »

Tout à fait : D !
Là je suis en version "vT" (Version Test :lol: ).
Le plus dur, c'est que ce genre de truc, il faut s'y consacrer des heures d'affiler pour avancer concrètement, sinon c'est pas la peine !
Comment on appel les pinces qui permettent d'enlever un pic "sans le tordre" ?
Oui parce que actuellement, le pic, je passe mon temps à le bouger de la platine de programmation à la platine de test ... et quand je vais me remettre intensivement à faire une modif, tester, une modif, tester....une modif, tester... le pic il va pas aimer ! (J'en ai déjà casser un :roll: )
schizophrene
Rang "3 LEDs"
Rang "3 LEDs"
Posts: 154
Joined: 05 Jul 2010, 18:34
Contact:

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by schizophrene »

Outil ou pince d'extraction de CI :)

http://www.conrad.fr/outil_d_extraction ... 214796_FAS
http://www.conrad.fr/outil_d_extraction ... 216410_FAS

Un conseil: pose ton PIC dans un support tulipe. Tu déplaceras l'ensemble à chaque fois, au moins tu ne risqueras pas d'abimer ton PIC :)
Termi87
Administrateur
Administrateur
Posts: 3630
Joined: 09 Jul 2006, 21:20
Location: Limousin

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by Termi87 »

schizophrene wrote:Un conseil: pose ton PIC dans un support tulipe. Tu déplaceras l'ensemble à chaque fois, au moins tu ne risqueras pas d'abimer ton PIC :)
Je suis naz, j'en avait acheté en plus ^^ ! Merci de me l'avoir rappelé ! :mrgreen:
schizophrene
Rang "3 LEDs"
Rang "3 LEDs"
Posts: 154
Joined: 05 Jul 2010, 18:34
Contact:

Re: K2000 : Réalisation, programmation, apprentissage ...

Unread post by schizophrene »

Termi87 wrote:Merci de me l'avoir rappelé ! :mrgreen:
Bah, j't'en prie :)

Tu avances dans la programmation?
Moi, pour mon projet (toujours pas fini, qui change toutes les 5 minutes ^^), je suis entrain de coder les animations simples (16 actuellement) et leur mode de 'lecture' (2 pour l'instant).

Mais faut savoir que j'utilise un TLC5940 pour avoir 15 sorties PWM, 3 lignes * 5 colonnes.

J'ai aussi créé l'animation de l'effet respiration (très simple), ça rend plutôt pas mal :D.

Dans les prochains temps:
- trouver des astuces pour/et programmer des animations plus complexes, déjà couchées sur le papier
- programmer l'acquisition de la puissance sonore et la restituer sur mes sorties (mais ça c'est pas compliqué du tout, j'ai pour l'instant la flemme et pas le temps de refaire mon petit montage d'acquisition du signal audio)
- programmer des animations en utilisant l'acquisition du signal audio (ça sera sympa à mon avis, mais y'a du boulot!)

Je mettrai des vidéos prochainement sur mon post, sur ma plaquette d'essai (15 leds au lieu des 135 prévues au final :))
Post Reply