Programation de leds monochromes blanc ou rvb interactives pilotee par un microc
fightstar
Messages postés10Date d'inscriptionmercredi 29 avril 2009StatutMembreDernière intervention 3 juin 2009
-
29 avril 2009 à 01:40
fightstar
Messages postés10Date d'inscriptionmercredi 29 avril 2009StatutMembreDernière intervention 3 juin 2009
-
3 juin 2009 à 10:54
j'ai un projet de fin d'etudes et j'aimerais bien que vous m'aidiez si vous pouvez , je serais tres reconnaissant , je vous remercie d'avance
ils'agit de leds monochromes blanc ou rvb interactives piloteepar un microcontroleur et progrmmables
je dois donc creer un proto comprenant ces specifites par detection IR plus les plans d'execution pour fabrication en série
il faut aussi prendre en consideration la consomation d'energie , l'alimentation electrique , aussi optimiser et améliorer la technologie interactive et les composants en tenant compte de contraintes : design, poids, consommation d'énergie, programmation indépendantes des leds
créer un prototype fonctionnel composé d'au moins deux modules de 80 leds
réaliser les plans d'exécution pour une éventuelle production
avoir un cahier techniques des composants et leur coût
donc jai des problemes au niveau du programme que je dois mettre , et le plan d'execution aussi , et tout aide apart ça sera le bienvenu , je vous remercie pour toute propositions et conseils
A voir également:
Programation de leds monochromes blanc ou rvb interactives pilotee par un microc
pont
Messages postés198Date d'inscriptionsamedi 2 mai 2009StatutMembreDernière intervention16 novembre 20101 2 mai 2009 à 16:07
Bonjour figstar,
Je ne connais pas les leds "interactives programmables" où est la data sheet?
C'est un projet de fin d'études de quel diplôme? Il faut voir à quel niveau de qualité de programmation cela se situe. C'est vous qui faites les études, pourquoi ne faites-vous pas les exercices vous-même? Malade, pas le temps?
S'il y a un concours à passer, il faudra qu'on y aille à votre place?
Merci de vos précisions.
----------------------------------------------------------------------------------
Il suffit de passer le pont.
fightstar
Messages postés10Date d'inscriptionmercredi 29 avril 2009StatutMembreDernière intervention 3 juin 2009 2 mai 2009 à 16:32
Bonjour,
oui voilà, Le pic 18F4520 a l'air effectivement interessant (puissance, mémoire...), mais j'ai besoin de contrôler chaque led indépendemment l'une de l'autre. Comment pensez vous la maniere dont je peux cabler les leds ?
le probleme c que le responsable tech me conseille dutiliser l arduino atmega168 comme microcontroleur + le TLC 5940 , le microcontroleur fonctionne avec un langage autre que le c ,moi je lui ai proposé en voyant ca avec mes profs de le faire en c sous mplab avec du pic 18F4520 car je lai etudié , il m'a bien confirmé ce choix au niveau de la puissance du pic et sa memoire , mais le probleme c kil me demande comment je vais contrôler chaque led indépendemment l'une de l'autre. et Comment je peux cabler les leds ?
je ne sais pas exacement comment les cabler , je vous remercie en tt cas
cs_ramzi83
Messages postés7Date d'inscriptionvendredi 17 avril 2009StatutMembreDernière intervention 7 mai 2009 3 mai 2009 à 02:39
salut
je suis étudiant et j'ai projet , realiser une carte qui commande 32 diodes et chaques diodes serra allumer pendant un temps donner . cette carte communique avec le pc par le RS232 et je doit la programmer avec l'assembleur . je dois utiliser le 16f877 . alors si vous avez une idée sur la prgrammation de ce type de pic par l'assembleur je serrais tyrè reconnaissant . voici mon direct email
ramzi.bk@hotmail.com
merci
pont
Messages postés198Date d'inscriptionsamedi 2 mai 2009StatutMembreDernière intervention16 novembre 20101 3 mai 2009 à 05:11
Réponse à Figstar
Bonjour,
Je vois mieux le "bazar"!La vidéo est étonnante.
Il n'y a pas de leds interactives, c'est le panneau qui est interactif, il faut être précis en français.
Il y a 3 capteurs infrarouges indépendants, et quand on passe la main devant, ils allument plus fort les leds de leur zone, c'est très amusant. Et je dis chapeau à celui qui a fait cela avec un µC AVR à 8 pattes! Il arrive à commander 20 Leds séparément, visiblement en PWM multiplexé, c'est vraiment champion, je ne serais pas capable d'en faire autant!
Comment brancher les LEDs?
Vous utilisez un PIC 18F4520 version PDIP 40 pattes, plus besoin de multiplexer, car vous avez 4 ports à 8 bits et un port à 3 bits, donc pour brancher vos diodes, vous pouvez les brancher normalement, une diode par patte de port avec une résistance mais vous risquez de dépasser le courant maxi du µC donc il vaut mieux interfacer chaque port de 8 leds par un ULN2803 qui comporte 8 amplis, de cette façon, votre µC est protégé. Il est également utile de mettre aux leds des réseaux de 8 résistances avec le commun au +5V cela simplifie le câblage.
-----------------------------------------------------
Par contre, pour le programme, je ne vois pas comment faire pour que ce soit aussi joli que le 1er de Youtube, c'est vraiment chouette ces ondulations de lumière, vous aurez plus de facilité dans la commande puisque vous n'avez qu'à modifier le rapport cyclique de votre PWM de chaque diode actionnée directement par une broche de port. Il y a visiblemet en plus un effet de mémoire formant inertie car la lumière ne s'éteint pas immédiatement après le passage de la main. En C vous avez plus de facilité pour faire les multiplications pour calculer le rapport cyclique à donner à chaque diode.
Bon courage et merci de m'avoir fait voir ça, c'est étonnant, même si ça ne sert à rien.
Salut
pont
Messages postés198Date d'inscriptionsamedi 2 mai 2009StatutMembreDernière intervention16 novembre 20101 3 mai 2009 à 15:20
Rebonjour, (à Fightstar)
Je n'avais pas vu votre schéma, très joli, complètement multiplexé, et beaucoup trop de Leds, par contre, où sont les capteurs d'infra-rouges de la main?
Je ne crois pas personnellement que vous alliez au succès de cette façon, car il faut commencer petit, avec seulement 3 capteurs IR comme sur Youtube, et une seule LED. Le jour où vous aurez réussi à ce que cette LED soit bien pilotée, ce qui sera déjà un gros travail, vous pourrez essayer d'en commander deux., ce qui sera une étape nouvelle de complexité, etc...Et toujours SANS multiplexage, une bonne commande en PWM sur plusieurs diodes simultanément et indépendamment est déjà bien assez compliquée comme ça. Pensez que c'est le même problème pour piloter un moteur, et que les constructeurs ont beaucoup souffert pour y parvenir. Par ex, j'ai essayé un variateur Altivar 16 de La Télémécanique sur ma machine à scier l'acier, et cela n'a pas marché du tout, le moteur a chauffé, a vibré, ronflé, et manquait de couple, bref la PWM était loupée et on n'arrivait pas à l'époque à faire une onde sinusoïdale, et l'intensité avait une forme très mauvaise, bien étoignée de la sinusoïde idéale. Cela se faisait avec des thyristors dont la commande d'extinction est très difficile, j'ai essayé d'en faire une et j'ai grillé tout mon matériel, en raison des dI/dt trop violentes. (entraînant des surtensions)
Avec les transistors actuels de puissance c'est beaucoup plus facile, et Microchip fait des PICs avec 6, même 8 sorties PWM, cela simplifierait votre travail. Avec un dsPIC30F4012 à 28 pattes, il y a 6 sorties PWM, en mettant 2 diodes LED par sortie, ou même 3, ce qui ferait 18 LEDs vous auriez l'équivalent du panneau de Youtube, si vous arriviez à en faire autant, ce serait formidable.
Ce serait plus utile comme projet de fin d'étude, de faire une commande de puissance variable qu'un panneau de Leds amusant. C'est assez étonnant, c'est une formation de bricoleurs?
fightstar
Messages postés10Date d'inscriptionmercredi 29 avril 2009StatutMembreDernière intervention 3 juin 2009 3 mai 2009 à 15:48
mec merci d'avoir repondu à tut ça chapeau , c'est cool de votre part . oui en effet c'est amusant comme projet mais c'est compliqué. "je suis en DUT donc mes capacités sont limitées , je vais voir ce que je peux faire avec toute tes suggestions ,merci mec en tt cas , et pour le 18F4520 est ce ke tu vois kil peut jouer laffaire sans lintegration du TLC4950 et est ce ke ca va pas affecter sur le cablage des leds sans ce dernier? merci
pont
Messages postés198Date d'inscriptionsamedi 2 mai 2009StatutMembreDernière intervention16 novembre 20101 3 mai 2009 à 23:06
Bonsoir fightstar,
Oui, tu peux travailler avec le PIC4520, ce qui t'évitera de te taper la data sheet du PIC4012, qui est assez coriace, on monte un étage, mais en C tu ne t'en rends guère compte, c'est lui qui s'adapte, du moment qu'il est prévu pour ce µC . C'est quel C? C'est surtout en assembleur que d'avoir des sorties préparées pour la PWM, ça simplifie.
Le TLC4950, c'est inutile si tu ne multiplexes pas .
C'est sûr que dans le schéma que tu proposes, on ne voit guère où intégrer les capteurs, mais si tu fais comme je te dis, sans multiplexage, comme tu as 4 ports de 8 bits, plus un port E de 3 bits tu peux mettre en premier tes 3 capteurs IR (diodes noires) où tu veux, sur des entrées linéaires et ensuite tu mets en sortie une LED, et tu essaies de programmer, ce sera le gros du travail, de façon qu'en passant la main tu obtiennes une augmentation de lumière en forme d'onde synchrone avec la main. C'est à dire que tu auras résolu le fait de moduler la largeur de la PWM en fonction de l'info donnée par les trois diodes capteuses. Pour trouver le coefficient multiplicateur, il te faudra attribuer pour chaque LED trois valeurs, selon sa position, donc un tableau fixe de ces 3 valeurs par diodes. Si tu mets X Leds, le tableau aura 2 dimensions respectivement de 3 colonnes et X lignes, et au pt de vue logiciel, il te faudra forcément passer en revue (polling) chacune de tes diodes, relever ce que donnent les capteurs, faire les multiplications et envoyer ça sur la sortie de la LED. Ainsi chaque LED ne recevra pas la même chose, même pour un même état des 3 capteurs. Si on ne fait pas ça, ce sera moche, toutes les diodes faisant la même chose., il se peut même que l'amplification des capteurs ne soit pas linéaire pour privilégier un effet d'augmentation de la dynamique, c'est à dire qu'on peut faire ça par une multiplication parabolique, c'est à dire que tu multiplie par le carré de ce que donne le capteur..Ton C va bien t'aider.
Salut
fightstar
Messages postés10Date d'inscriptionmercredi 29 avril 2009StatutMembreDernière intervention 3 juin 2009 13 mai 2009 à 02:08
voilà ce que je suis arrivé à resoudre comme solution pour mon programme du pic , je l'ai compilé sur dev c++, j ai des problemes dedeclarattion de "tris, port...""j arrive pas a comprendre pourquoi", mais j'ai aussi du mal a integrer les lignes correspondantes auxleds des capteurs de mouvements , et le controle individuel de chaque led dans le programme.
donc ces 3 problemes me perturbent toujours et me genent enormement , je vous remercie d avance en tt cas pour toute suggestions, vous pouvez si vous voulez essayer à compiler afin de voir les erreurs qui correspondent aux declarations des tris et port A et B et C"
"je vous remercie en tt cas"
// Program à tester 7x5 deux couleur LED matrice display
// PIC 18F_2520 @ 4 MHz internal oscillateur
#pragma config OSC = INTIO7 // Internal oscillator block, CLKO on RA6, port on RA7
#pragma config PWRT = ON // PWRT (Power Up Timer) enabled
#pragma config BOREN = OFF // Brown-out Reset disabled in hardware and software
#pragma config WDT = OFF // WDT disabled (control is placed on the SWDTEN bit)
#pragma config MCLRE = ON // MCLR pin enabled; RE3 input pin disabled
#pragma config PBADEN = OFF // PORTB<4:0> pins configured as digital I/O on Reset
#pragma config STVREN = ON // Stack full/underflow will cause Reset
#pragma config LVP = OFF // Single-Supply ICSP disabled
// define 7x5 bitmaps for ASCII characters
#pragma romdata asciidata
char data[27][5] = {
{0x00, 0x00, 0x00, 0x00, 0x00}, // ' '
{0x7C, 0x12, 0x11, 0x12, 0x7C}, // A
{0x7F, 0x49, 0x49, 0x49, 0x36}, // B
{0x3E, 0x41, 0x41, 0x41, 0x22}, // C
{0x7F, 0x41, 0x41, 0x41, 0x3E}, // D
{0x7F, 0x49, 0x49, 0x49, 0x41}, // E
{0x7F, 0x09, 0x09, 0x01, 0x01}, // F
{0x3E, 0x41, 0x41, 0x51, 0x32}, // G
{0x7F, 0x08, 0x08, 0x08, 0x7F}, // H
{0x00, 0x41, 0x7F, 0x41, 0x00}, // I
{0x20, 0x40, 0x41, 0x3F, 0x01}, // J
{0x7F, 0x08, 0x14, 0x22, 0x41}, // K
{0x7F, 0x40, 0x40, 0x40, 0x40}, // L
{0x7F, 0x02, 0x04, 0x02, 0x7F}, // M
{0x7F, 0x02, 0x04, 0x08, 0x7F}, // N
{0x3E, 0x41, 0x41, 0x41, 0x3E}, // O
{0x7F, 0x09, 0x09, 0x09, 0x06}, // P
{0x3E, 0x41, 0x51, 0x21, 0x5E}, // Q
{0x7F, 0x09, 0x19, 0x29, 0x46}, // R
{0x46, 0x49, 0x49, 0x49, 0x31}, // S
{0x01, 0x01, 0x7F, 0x01, 0x01}, // T
{0x3F, 0x40, 0x40, 0x40, 0x3F}, // U
{0x1F, 0x20, 0x40, 0x20, 0x1F}, // V
{0x7F, 0x20, 0x10, 0x20, 0x7F}, // W
{0x41, 0x22, 0x1C, 0x22, 0x41}, // X
{0x03, 0x04, 0x78, 0x04, 0x03}, // Y
{0x61, 0x51, 0x49, 0x45, 0x43} // Z
};
#pragma romdata
void main (void){
short int i,d,r,c;
char string1[] = "COMPUTER ";
short int s1_length = 10;
char string2[] = "ENGINEERING ";
short int s2_length = 13;
char string3[] = "TECHNOLOGY ";
short int s3_length = 16;
OSCCON 0b01100000; // Int. Osc. 4 MHz
ADCON1 = 0x0F; // eteindre PORTA analog inputs
TRISA = 0; // PORTA is digital output
PORTA = 0; // initialiser PORTA
TRISB = 0; // PORTB est digital output
PORTB = 0; // initialisre PORTB
TRISC = 0; // PORTC is digital output
PORTC = 0; // initialiser PORTC
// display string1 en rouge
for (i=0;i<s1_length;i++){
// map undefined bitmap characters to ' '
if ((string1[i] < 64)||(string1[i] > 90)) string1[i] = 64;
// map defined ASCII character codes to bitmap lookup table
r = string1[i] - 64;
// d determine durée de character display @ d * 10ms
for (d=0;d<50;d++){
// display un charactere
PORTC = 0b00010000;// allumer une collone de gauche à droite
for (c=0;c<5;c++){
PORTB = data[r][c];
Delay1KTCYx(2); // 2 ms delay
PORTC = PORTC >> 1;
}
}
Delay1KTCYx(50); // 50ms delay entre characters
}
// display string2 en vert
for (i=0;i<s2_length;i++){
if ((string2[i] < 64)||(string2[i] > 90)) string2[i] = 64;
r = string2[i] - 64;
// d determine durée de character display @ d * 10ms
for (d=0;d<50;d++){
PORTA = 0b00010000;
for (c=0;c<5;c++){
PORTB = data[r][c];
Delay1KTCYx(2); // 2 ms delay
PORTA = PORTA >> 1;
}
}
Delay1KTCYx(50); // 50ms delay entre characters
}
// display string3 en vert+rouge
for (i=0;i<s3_length;i++){
if ((string3[i] < 64)||(string3[i] > 90)) string3[i] = 64;
r = string3[i] - 64;
// d determine durée du character display @ d * 10ms
for (d=0;d<50;d++){ TRISA 0xFF; PORTA 0b00010000; // eteindre et initialiser PORTA TRISC 0xFF; PORTC 0b00010000; // eteindre et initialiser PORTC
for (c=0;c<5;c++){
PORTB = data[r][c];
TRISA = 0x00; // allumer PORTA
Delay1KTCYx(1); // 1 ms delay
PORTA = PORTA >> 1;
TRISA = 0xFF; // eteindre PORTA
pont
Messages postés198Date d'inscriptionsamedi 2 mai 2009StatutMembreDernière intervention16 novembre 20101 13 mai 2009 à 09:25
Bonjour,
Ce qui m'étonne, c'est que vous ayez coupé le nom du PIC par un tiret dans le include, ne valait-il pas mieux mettre tout collé: PIC18F4520
Et je ne sais pas comment vous procédez pour programmer, mais il y a tellement de risques d'erreurs que j'y vais tout doucement, je mets un petit paquet d'instructions et je regarde si ça marche, et même pour tester la carte d'application, y faire dessus un petit programme spécial d'essai avec juste des clignotements sur les sorties et un petit potar pour tester une entrée linéaire.
Et vous débuguez avec quoi, un ICD2, un REAL ICE? Il ne faut pas trop compter sur le SIM qui ne sait pas ce qui se passe sur la carte d'application.
Je n'ai ni PIC4520, ni de C, juste le MPLAB avec ICD2, et des PIC16F88, et pas de carte d'application correspondant à votre projet, je n'ai pas branché d'afficheurs à Leds rondes. Ce me serait faisable, bien sûr, mais je suis lancé dans autre chose et je ne veux pas me disperser, juste vous donner un petit conseil, c'est de refaire un autre programme, le plus simple possible, pour tester la carte d'application, et pourquoi pas, plutôt le faire en assembleur, c'est bien là qu'avec le pas à pas on voit mieux ce qui se passe en regardant ce qu'il y a dans les registres à chaque pas.
Chacun fait comme il veut, mais je trouve que quand il y a des calculs complexes le C c'est bien, sinon pour le reste, l'assembleur c'est mieux, et si je faisais un petit journal à LEDs je ne ferais pas de multiplexage, je recréerais un bus style microprocesseur, avec une ligne ALE, comme sur les Motorola (adresse latch enable) On envoie une donnée sur le bus de données, une adresse sur le bus d'adresses, ou l'inverse et une impulsion de ALE, et l'octet est transmis et verrouillé éternellement; s'il n'a pas à être changé, on ne le change pas, aucun rafraîchissement à prévoir. Le hard est plus compliqué, mais il est facile à surveiller, on peut mesurer dessus. Et le programme est plus simple. Il y en a qui ont peur du fer à souder, ils préfèrent tout programmer, un petit programme évite des composants, c'est vrai quand ça marche.
Je reviens à ce que j'ai dit précédemment: essayer d'abord une "LED" réceptrice infrarouge pour calibrer une entrée analogique, ce sera déjà un gros boulot de fait, et deuxième boulot faire par programme une PWM sur une seule sortie, et troisième travail, accorder la led capteur avec la led de la PWM, quand ces deux trucs vont bien, alors aller plus loin, mais pas besoin de choses compliquées pour débuter, sinon on est certain de ne pas s'en sortir <<qui trop embrasse mal étreint>>
Salut
pont
fightstar
Messages postés10Date d'inscriptionmercredi 29 avril 2009StatutMembreDernière intervention 3 juin 2009 1 juin 2009 à 13:47
Bonjour "pont"
jai laisser tomber ce programme pour un autre maintenant j ai reussi a faire le schema sur la plaque en branchant le tlc avec la carte de mplab contenant mon pic , ainsi que jai pu acquerir pas mal dinfos afin de brancher les leds Ir sur les ports AN "emetrice et receptrice" mais je les ai pas encore fait marcher avec tout le schema, Maintenant j essaie de mettre les broches "sclk" , "SIN" "xlat" du TLC à la masse via les broches "RB0" "RD6" "RB1" du pic .donc je ne sais pas vraiment comment programmer ceci sur le pic.ça me perturbe vraiment . "jai deja essayé mais ça n'aboutit à rien" , je te remercie pour tout exemple du programme .
fightstar
Messages postés10Date d'inscriptionmercredi 29 avril 2009StatutMembreDernière intervention 3 juin 2009 3 juin 2009 à 10:54
bonjour
jai laissé tomber linterface de mplab et le pic pour recommencer le projet avec larduino : "jai deja poster ma question en anglais bon je pense que vous etes fort et que vous auriez pas de problemes :) , donc voila tout expilqué en anglais , merci ,vous pouvez repondre en francais :)
i gave up with PIC18F4520 and mplab, i have bought an arduino atmega 168 board , and i have done the circuit connecting it with a tlc 5049and 16 leds , i have found some libraries in arduino software it's very helpful than the mplab , now my circuit works and my leds blink ,but i have to connect the whole thing with 2 photo IR diodes, the first emmits and the second receives so as to get an interactive panel with leds blinking just by moving my hand upon the circuit , so my problem remains in how can i connect these IR photodiodes on the test board , ihave followed some instruction on some websites on how to connect them but , im not getting any results , please , my internship period of time is running out unfortunately , i have to get it done this week . thanks for any suggestions . thanks guys
i ve been based on many ancient projects similar to mine coz im using exactly the same components but unfortunatly it doesnt contain IRleds for interactivity , you can understand more , by seeing these links thanks http://code.google.com/p/tlc5940arduino/