Finalement, j'ai regardé les spécifications du PIC utilisé comme contrôleur. Malheureusement, je n'avais pas remarqué que les i/o acceptent un maximum de 50 pF, ce qui n'est probablement pas assez selon moi. Nous devrons probablement utiliser des Buffer I2C pour avoir la norme de 400 pF.
J'ai regardé sur internet et je vois que le P82B96 de Texas instruments revient très souvent.
Je dois cependant m'informer s'il est possible d'avoir seulement ces buffers sur le circuit du contrôleur sans toutefois avoir à les intégrer sur les 36 Drivers de LEDs ($$$). Si oui, ce problème sera vite régler et cela ne sera pas trop dispendieux. Cependant, si nous avons à les intégrer sur chaque Drivers, une autre solution devra être mise en oeuvre.
lundi 31 mai 2010
dimanche 30 mai 2010
Communication I2C
Le I2C n'est pas adapté pour être transmit sur un câble externe. On peut s'en apercevoir en observant son nom:
I2C - Inter-Integrated Circuit
En fait, ce protocole de communication a été établie pour lier des périphériques présents sur le même circuit.
Dans le cadre de notre projet, il y a des risques qui surviennent avec ce type de transmission. En effet, nous n'avions pas assez songé sur le fait qu'un BUS I2C ait une limitation d'une capacité maximale de 400 pF. Le plancher est de 12 pieds, donc il a de fortes chances que nous ne soyons pas en mesure de transmettre les trames convenablement a un débit satisfaisant.
J'ai fait la recherche de plusieurs solutions pour contrer cette limitation du BUS I2C
Pour éloigner ce problème, nous utilisons un câble plat de téléphone à 6 conducteurs pour la communication. Nous n'avons pas besoin de 6 conducteurs pour communiquer. Cependant, nous pouvons isoler le signal SDA et SCL entre des lignes de GND pour réduire l'effet capacitif que peut produire les lignes SDA et SCL entre elles.
Nous allons donc, tout simplement, diminuer la fréquence d'horloge des BUS i2C. J'ai lue sur internet qu'avec une fréquence de 100kHz, nous pouvons atteindre une longueur près de 100 pieds (C'est à confirmer).
Pour s'adresser a un Driver on doit nécessairement avoir :
1 start bit
1 octet d'adressage
1 octet pour le registre
1 stop bit
2 acquittements
---------------
20 bits
Pour contrôler une seule tuile on a :
1 octet pour le rouge
1 octet pour le vert
1 octet pour le bleu
---------------
27 bits
Un Drivers contrôle 4 tuiles, donc nous avons au total :
20 bits + (27 bits * 4) = 128 bits
Nous avons 6 Drivers par BUS I2C
128 bits * 6 Drivers = 768 bits
Nous nous retrouvons au final avec 768 bits a envoyer par BUS I2C.
Avec une fréquence de 100kHz ca prend un temps de :
768 bits * (1/100E3 Hz) = 7.68 millisecondes
Avec seulement 7.68ms nous pouvons avoir une fréquence de rafraichissement de 130 images par seconde ce qui est largement suffisant pour notre application.
Au final, nous ne devrions pas avoir de problème avec les limitations I2C si nous optons pour une fréquence d'horloge de 100 kHz.
I2C - Inter-Integrated Circuit
En fait, ce protocole de communication a été établie pour lier des périphériques présents sur le même circuit.
Dans le cadre de notre projet, il y a des risques qui surviennent avec ce type de transmission. En effet, nous n'avions pas assez songé sur le fait qu'un BUS I2C ait une limitation d'une capacité maximale de 400 pF. Le plancher est de 12 pieds, donc il a de fortes chances que nous ne soyons pas en mesure de transmettre les trames convenablement a un débit satisfaisant.
J'ai fait la recherche de plusieurs solutions pour contrer cette limitation du BUS I2C
Pour éloigner ce problème, nous utilisons un câble plat de téléphone à 6 conducteurs pour la communication. Nous n'avons pas besoin de 6 conducteurs pour communiquer. Cependant, nous pouvons isoler le signal SDA et SCL entre des lignes de GND pour réduire l'effet capacitif que peut produire les lignes SDA et SCL entre elles.
Pour augmenter cette spécification, nous pouvons avoir recours a I2C BUS Extender. Cette méthode permet d'augmenter le courant des signaux SDA et SCL par un facteur de 10. Bien que cette méthode serait la plus efficace, elle est cependant très couteuse dans notre cas. Nous avons un total de 36 Drivers de LEDs sur 6 BUS I2C en parallèles. Donc avec cette méthode, on se retrouve avec 36 + 6 pièces supplémentaires. À environ 3$ le circuit intégré, cette solution n'est pas envisageable.
Une autre façon serait de réduire le débit. Au départ, l'intention était d'avoir un débit d'environ 700 kbits/sec. Il faudra sans doute réduire ce débit si nous ne rencontrons pas les spécifications du BUS I2C au final.
Nous allons donc, tout simplement, diminuer la fréquence d'horloge des BUS i2C. J'ai lue sur internet qu'avec une fréquence de 100kHz, nous pouvons atteindre une longueur près de 100 pieds (C'est à confirmer).
Pour s'adresser a un Driver on doit nécessairement avoir :
1 start bit
1 octet d'adressage
1 octet pour le registre
1 stop bit
2 acquittements
---------------
20 bits
Pour contrôler une seule tuile on a :
1 octet pour le rouge
1 octet pour le vert
1 octet pour le bleu
3 acquittements
---------------
27 bits
Un Drivers contrôle 4 tuiles, donc nous avons au total :
20 bits + (27 bits * 4) = 128 bits
Nous avons 6 Drivers par BUS I2C
128 bits * 6 Drivers = 768 bits
Nous nous retrouvons au final avec 768 bits a envoyer par BUS I2C.
Avec une fréquence de 100kHz ca prend un temps de :
768 bits * (1/100E3 Hz) = 7.68 millisecondes
Avec seulement 7.68ms nous pouvons avoir une fréquence de rafraichissement de 130 images par seconde ce qui est largement suffisant pour notre application.
Au final, nous ne devrions pas avoir de problème avec les limitations I2C si nous optons pour une fréquence d'horloge de 100 kHz.
samedi 29 mai 2010
Schéma bloc du système électronique
- Le plancher
- Le contrôleur
- Le DSP
- L'ordinateur
Ici, les liaisons entre ces modules seront expliquées.
Fonctionnement du Contrôleur
Fonctionnement du Contrôleur
L'unique tâche du contrôleur est de recevoir de l'information du DSP et de la transmettre aux 36 Drivers de LEDs sur le plancher. L'information se compose en 8 bits de Rouge, 8 bits de Vert et 8 bits de Bleu, ce qui fait au total 24 bits de couleur par tuile. Au fur et à mesure que l'information est transmisse au contrôleur par la communication SPI, l'information est remisé dans une matrice de 144 cases de 24 bits qui composent le plancher. Lorsque la communication est terminée, le contrôleur envoie un signal au DSP pour indiquer qu'il est occupé BUSY. À ce moment, le contrôleur envoie ces trames sur le plancher. Ensuite, un TIMER est enclenché. Ce TIMER a pour but de varier le taux de rafraichissement du plancher. La valeur du TIMER peut être modifié par le biais de l'ordinateur ou bien désactivé. Pendant que le TIMER est en marche, le signal BUSY est reste actif (BUSY = 1), donc le DSP doit attendre pour envoyer les prochaines trame. C'est uniquement lorsque le signal BUSY devient inactif (BUSY = 0) que le DSP peut recommencer à communiquer avec le contrôleur. Cette routine est répété de façon infinie.
Fonctionnement du DSP
L'objectif du DSP est de pouvoir analyser un signal audio, d'effectuer des opérations mathématiques afin de décortiquer son contenu fréquentiel, mettre en oeuvre un algorithme d'affichage pour lier le signal audio avec le plancher et finalement, de transmettre ces informations au contrôleur.
Pour décortiquer un signal audio, le DSP comporte un module ADC . Ce module permet la conversion d'un signal analogique en un signal numérique pour qu'il puisse être traité par la suite. Lorsque le signal audio à été convertie, on effectue des transformées mathématiques (transformées de Laplace) pour sortir de l'information fréquentiel sur le signal audio. Par la suite, ces informations sont soumissent a un algorithme d'affichage pour rentre le tout visuel sur le plancher. À ce moment, l'information est transmisse dans une matrice et contenue jusqu'à ce que le signal BUSY du contrôleur devienne inactif (BUSY = 1). Lorsque le contrôleur se libère (BUSY = 0), on peut transmettre la matrice au contrôleur par le biais d'une communication SPI (SPI0).
Son deuxième objectif, est d'établir une communication entre le système et un ordinateur à l'aide d'un interface utilisateur.
Le circuit comporte une mémoire morte ROM qui contient les données d'une page Web. Le DSP peut y accéder avec un autre module SPI (SPI1). Cette page web est transférée dans un BUFFER et transmisse à un contrôleur ETHERNET lorsqu'un ordinateur se connecte sur ce dernier. Cette transmission est, une fois de plus, effectuée avec une communication SPI (SPI2). L'utilisateur aura le choix d'activer le module ADC (ENABLE = 1) ou bien d'envoyer ces propres trames au plancher (ENABLE = 0) image BMP comme exemple
vendredi 28 mai 2010
Drivers de LEDs - Schéma et PCB
Schéma et PCB des Drivers de LEDs
- Le connecteur I2C_IN est l'entrée du BUS I2C fournit par le Contrôleur.
- Le connecteur I2C_OUT est la sortie du BUS I2C qui va se lier au prochain Driver en série.
- Il y a 4 connecteurs aux coins du Board. Ils sont directement reliés aux LEDs. Il y a 4 pins par connecteur.
- 1 - GND
- 2 - PWM Red
- 3 - PWM Green
- 4 - PWM Blue
Il y a 4 connecteurs puisqu'un Driver de LEDs contrôle 4 tuiles en même temps.
- S1 est un DIP switch pour régler manuellement l'adresse d'un Driver.
- Finalement, U1 est le TLC59116 qui correspond au Driver de LEDs.
Le board fait environ 1 pouce par 2 pouce
Schéma du circuit du contrôleur
Liste des connecteurs
I2C5 : 12C0 -- Connecteur pour la liaison I2C entre les Drivers de LEDs (TLC59116) et le contrôleur
PROG -- Connecteur pour la programmation du PIC
DEBUG -- Connecteur pour déboguer à l'aide de la communication UART du PIC
vendredi 21 mai 2010
mercredi 19 mai 2010
Logiciel animation images
J'ai créé un logiciel qui transforme une série d'images BMP 24 bits en un fichier texte ayant les valeurs RGB de chaque pixel de chaque image. Ce logiciel a pour but d'envoyer des animations directement sur le plancher.
On a qu'à entrer:
- La grosseur du vecteur
- Le nom du fichier de l'image (.bmp)
- Le nom du fichier de sortie (.txt)
Il ne reste plus qu'à envoyer ce fichier texte au contrôleur pour qu'il puisse l'afficher sur le plancher.
De plus, on rajoutera un octet qui indiquera le nombre d'images par seconde.
On a qu'à entrer:
- La grosseur du vecteur
- Le nom du fichier de l'image (.bmp)
- Le nom du fichier de sortie (.txt)
Il ne reste plus qu'à envoyer ce fichier texte au contrôleur pour qu'il puisse l'afficher sur le plancher.
De plus, on rajoutera un octet qui indiquera le nombre d'images par seconde.
Câbles et connecteurs pour la communication
Les connecteurs que nous allons utiliser seront des RJ12 avec des câbles de téléphones tout-à-fait standard. Ce choix est assez simple:
- Disponibles partout
- Nécessite aucune soudure (gagne du temps)
- Solution pas très cher
- Esthétiquement satisfaisant
Nous allons retrouver cette liaison entre le contrôleur et les drivers. Et peu-être entre les LEDs et les Drivers (à confirmer).
- Disponibles partout
- Nécessite aucune soudure (gagne du temps)
- Solution pas très cher
- Esthétiquement satisfaisant
Nous allons retrouver cette liaison entre le contrôleur et les drivers. Et peu-être entre les LEDs et les Drivers (à confirmer).
Disposition des Drivers de LEDs
Chaque Driver de LEDs TLC59116F pourront contrôler 4 dalles. Un total de 144 dalles laisse place a 36 Drivers. Pour accélérer la communication, nous avons intégré 6 I2C dans le contrôleur fonctionnant en parallèle. L'adressage du plancher se fera au total sur 6 BUS I2C disposés en colonnes. L'utilisation de colonnes permettra l'assemblage du plancher de façon rapide et facile.
Contrôle des Drivers de LEDs
Cette semaine j'ai réussis à faire fonctionner les drivers de LEDs. J'ai rencontré un problème qui m'a fait perdre une bonne semaine de temps. Je m'explique:
Je devais fabriquer une communication I2C en respectant les timings donnés par le manufacturier du TLC59116F. Une fois réalisé, j'ai fait le montage du circuit sur un board prototype. Je fais mes tests... Rien ne fonctionne. Jusqu'à présent, c'est normal, ça fonctionne rarement (on peut dire jamais) du premier coup. J'ai vérifié mes timings I2C et vérifié à nouveau. J'ai douté de mon montage, douté de mes soudures, douté encore une fois des mes timings, douté de l'alimentation... Ceci répété en boucle.
Lundi matin, je décide de regarder les pages de spécifications d'un autres Drivers de LEDs de TEXAS Instruments pour voir s'il n'y a pas plus d'informations fournies. Voilà! L'erreur est trouvée. La broche #1 est nommée N.C. (no connection)... Je ne la branche pas bien sur! Sur le deuxième schéma, c'est identifié REXT... Résistance externe? Je branche une résistance... Ça marche! En fouillant en profondeur sur internet, j'ai rencontré aucune autre personne qui a rencontré ce problème.
Choix des LEDs
Le choix des LEDs est a prendre en très grande considération. J'ai regardé sur plusieurs sites internet pour retrouver celles qui pourront respecter nos attentes:
- Bonne intensité lumineuse
- Avoir un grand angle
- Un coût pas trop élevé
Premièrement, j'ai considéré l'option d'adopter des LEDs RGB. Celles-ci nous nous éviterais beaucoup de travail manuel puisque nous aurions 3x moins de LEDs à installer. Cependant, le coût est trop élevé.
Du côté des LEDs 5mm, elles offrent une intensité lumineuses très élevée et sont offertes à un bon prix en général. Là où elles font défaut, c'est l'angle... entre 10 et 25 degrés, il serait difficile, je crois, d'allumer une dalle de façon uniforme....
J'ai tout de même commandé un paquet de LEDs 5mm de couleurs assorties afin d'effectuer des tests.
Finalement, j'ai trouvé un marchand sur Ebay qui offre ces mêmes LEDs 5mm mais avec le dessus plat. Je crois que c'est le meilleur compromis jusqu'à présent. Le coût est un peu plus élevé que celui des LEDs 5mm standard, mais reste quand même abordable. Là où c'est intéressant, l'angle est beaucoup plus prononcé: 120 à 140 degrés.
Environ 45$ pour 1000
Donc, 45$ x 3 couleurs = 135$...
C'est environ le budget que nous avons accordé pour l'investissement des LEDs (130$).
J'ai donc commandé 50pcs afin d'effectuer des tests.
Au final, je dois attendre au moins 2 semaines avant de faire mes tests.
À suivre...
mardi 18 mai 2010
Techniquement...
Nous avons séparé le tout en plusieurs sections en ce qui attrait l'électronique (l'amplificateur audio n'est
pas encore prit en compte)
- L'éclairage
- Contrôle de l'éclairage
- Opérations mathématiques
- Module de communication
- L'interface
L'éclairage
L'éclairage est réalisé par des centaines de LEDs. Chaque dalle
du planché contiendra plusieurs LEDs de trois couleurs différentes:
Rouge
Vert
Bleu
Avec ces trois couleurs (RGB), nous pouvons former, en les mélangeant, toutes les couleurs dont nous avons besoin.
Toutes les dalles sont individuellement indépendantes l'une des autres. Donc, chacune de celles-ci auront une adresse unique. Afin de faire varier les couleurs, il n'est pas envisageable d'utiliser seulement un microcontrôleur. Nous devons avoir recours à des circuits intégrés ayant comme spécialité de contrôler les LEDs (Drivers).
Nous avons choisit d'utiliser le TLC59116F de la compagnie TEXAS Instruments.
Chaque Driver permet de contrôler 16 LEDs. Le contrôle se fait en envoyant une fréquence (PWM) que nous pouvons varier afin d'obtenir une luminosité précise. Nous pouvons obtenir une résolution de 8 bits soit 256 niveaux de luminosité différente pour chaque LED. Pour commander ce circuit intégré, nous devons employer le protocole I2C. Ce Driver peut fournir jusqu'à 120 mA ce qui est amplement suffisant pour notre utilisation.
Chaque TLC59116F va commander 4 dalles différentes.
OUT0 à OUT11 seront utilisés tandis que OUT12 à OUT15 ne seront pas utiles dans notre cas.
Au total, le plancher comportera 36 Drivers.
J'ai commandé 3 Drivers en échantillon (merci T.I.) ainsi que des "Sockets" TSSOP pour pouvoir faire des tests sur mon Proto Board.
Contrôle de l'éclairage
Ce module a pour tâche de commander les 36 Drivers de LEDs. Pour y arriver, nous avons fait le choix d'utiliser un microcontrôleur de la compagnie Microchip, un PIC18F2221. Ce choix s'est arrêté sur celui-ci puisque cette com
pagnie est bien familière pour moi. J'ai donc commandé ce programmeur/debugger (Pickit v2.0) sur Ebay à 39$ + 8,00$ (shipping). Il fonctionne très bien et permet de programmer la majorité des produits de Microchip.
Opérations mathématiques
...
Module de communication
...
L'interface
...
Ça devrait ressembler à quoi???
L'idée globale du projet est de faire réagir les dalles du plancher selon la musique...
Le plancher est de quelle grosseur? On est très ambitieux pour les moyens que nous avons... Nous pensons faire un plancher de 12x12 pieds carré. Jusqu'à présent, nous n'avons toujours pas changé d'idée. Ce plancher sera composé de 144 dalles individuelles.
C'est là que ca se complique...
C'est officiellement le plus grand défi du projet. Ceci impose un budget que nous n'avons pas, énormément de travail manuel... et beaucoup de temps libre! 144 dalles, c'est beaucoup.
Néanmoins, nous sommes convaincu que nous pouvons passer au travers de ce défi de taille.
Le plancher pourra être contrôlé par un interface utilisateur, accessible par n'importe quel ordinateur personnel.
De plus, nous avons imposé une contrainte intéressante. Le plancher doit être modulaire. C'est-à-dire, qu'il puisse être transportable facilement en ayant la possibilité de le démonter et le remonter en tout temps.
Le projet...
À chaque session, à l'université de Sherbrooke, en génie électrique, nous devons élaborer un projet d'équipe qui doit suivre des contraintes imposées dans un cadre d'apprentissage.
Le projet principal consiste a fabriquer un amplificateur audio. Ici, toutes les équipes font la même chose.
Le degré de liberté que nous avons est de faire réagir quelque chose selon la sortie de l'amplificateur audio. Pour notre part, nous avons choisit de faire interagir un plancher de danse selon les fréquences de la musique.
En fait, le plancher serait composé de plusieurs dalles indépendantes qui allument de toutes les couleurs. Cet effet produira une matrice de lumière directement au sol!
Un autre but que nous souhaitons réaliser est de pouvoir mettre en place ce plancher durant les soirées 5@8 de notre faculté universitaire.
Malgré le fait que l'on ait pratiquement reçu aucune information à propos du projet de la prochaine session, nous avons tout de même prit l'initiative d'entamer cette idée de projet... En avance!
On a très vite réalisé qu'il sera impossible pour nous de mettre à terme ce plancher disco si nous ne commençons pas tout de suite à travailler sérieusement...
Création d'un blog pour le projet
Nous avons décidé aujourd'hui de mettre en ligne un blog qui nous permettra de suivre l'évolution du projet. De plus, cette page web servira à exposer la documentation.
Inscription à :
Articles (Atom)