Pages: 1 [2]   Go Down
Author Topic: recherche composant timer...  (Read 2506 times)
0 Members and 1 Guest are viewing this topic.
France S-O
Offline Offline
Edison Member
*
Karma: 41
Posts: 2189
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Dans le but de faire de la PWM avec, je suis pas sûr que ça soit vraiment capable, car ça fait vraiment beaucoup de fonctions logiques à enchaîner.

FPGA Cyclone II Ep2c5 dispo sur Ebay autour de 7/20 €.
Ecrire une PWM tient en très peu de lignes en langage Verilog, le VHDL est plus verbeux et moins aisé en prime abord.
Code:
/*    PWM   Essais préliminaire   09/09/2013   */
module PWM(h,set,st);
parameter M_bits = 8;   // Profondeur de réglage pour la PWM
input wire h ;
input [M_bits-1:0] set ;
output reg st = 1;
// variables internes
reg [M_bits-1:0] compteur =0;

always @ (posedge h)
begin
if (compteur < set) st<= 1 ;
else
st<=0 ;
compteur <= compteur +1;
end
endmodule

Cela se simule bien mais il reste a l'intégrer avec une interface I2C et une "vraie" gestion des horloges et I/O et ça c'est pas gagné.
Parce que le compilateur/simulateur IcarusVerilog associé à GtkWave c'est simple mais pour la synthèse et la programmation du  cyclone II d'Altera il faut passer par  le logiciel Quartus dont la prise en main  est complexe, le manuel fait 1700 pages.
D'autant que ce qui est simulable n'est pas forcément synthétisable : la simulation est proche du logiciel classique, la synthèse c'est du matériel pur.

Quote
Le problème c'est plutôt le prix. Un petit FPGA coûte déjà assez cher comparativement à un microcontrôleur. Et du coup il est plus économique de faire 10 PWM avec interface SPI dans 10 ATtiny que dans un FPGA.
Le prix sur Ebay un cyclone II avec un peu plus de 4000 élément logique, 16 multiplieurs, 2 Pll : entre 7 et 20€, d'accord les gros FPGA sont largement plus chers mais avec 4000 éléments logiques on peut déjà faire des choses.

Ce n'est bien évidement rentable que si on rempli un minimum le FPGA, si c'est juste pour 5 ou 6 PWM ce n'est pas intéressant mais il existe multitude de modèles de différentes fonctions sur le web : c'est là que j'y ai trouvé delui de la PWM  qui entre nous a un défaut elle ne descend pas à 0,  mais à 0001, mais il existe d'autre projets plus complexes qui fonctionnent parfaitement mais celui ci est suffisant pour apprendre à réaliser un FPGA.
Bien sur dans l'immédiat assembler des boîtiers "peut être plus économique", je mets des guillemets parce que si on ajoute le prix d'un PCB pour reporter les boîtiers ou même simplement une carte pastillée la différence de prix risque de s'amenuiser.

Quote
Un petit CPLD (pas un FPGA, faut rester calme hein  smiley-mr-green

J'avais compris qu'un CPLD est en gros un FPGA moins complexe et avec l'Eeprom intégré.
C'est vraiment plus simple à maîtriser ?
Parce que si c'est le cas pour me faire la main autant débuter avec les marches les moins hautes possibles.

D'accord pour le verilog : le VHDL de l'avis commun serait plus adapté pour les réalisations complexes où le verilog s’essoufflerait mais le verilog est plus simple à maîtriser ça c'est vérifiable dès l'écriture du premier module.

Et il n'est pas interdit de réver : il est possible de synthétiser un micro-controleur dans un FPGA, j'ai même vu un exemple de micro-controleur AVR, hélas ce n'était pas un ATMega  smiley-fat
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

FPGA Cyclone II Ep2c5 dispo sur Ebay autour de 7/20 €.
Oula du calme !
Pas la peine de sortir le tank pour aller chercher une baguette à la boulangerie smiley-mr-green

Cela se simule bien mais il reste a l'intégrer avec une interface I2C et une "vraie" gestion des horloges et I/O et ça c'est pas gagné.
Il n'est pas question d'I2C ou d'autre chose qu'un port parallèle avec une clock, à moins que j'ai raté un truc ?

Le prix sur Ebay un cyclone II avec un peu plus de 4000 élément logique, 16 multiplieurs, 2 Pll : entre 7 et 20€, d'accord les gros FPGA sont largement plus chers mais avec 4000 éléments logiques on peut déjà faire des choses.
Moi je suis plutôt Xilinx que Altera, mais c'est vrai que les prix des Cyclones II semblent plus attractif que les 15/20/30€ pour un Spartan-3E de Xilinx.

J'avais compris qu'un CPLD est en gros un FPGA moins complexe et avec l'Eeprom intégré.
C'est un FPGA avec beaucoup moins de macrocells, pas de PLL, pas de DSP. Juste le strict minimum pour faire de la logique.

C'est vraiment plus simple à maîtriser ?
Parce que si c'est le cas pour me faire la main autant débuter avec les marches les moins hautes possibles.
Pour te faire la main mieux vaut commencer avec une carte de démo style BASYS2 pour les FPGA Xilinx.
Si tu sait faire du code pour FPGA tu pourras faire du code pour un CPLD sans probléme smiley-wink
L'avantage des cartes de démo c'est que t'as tout dessus : fpga, mémoire, boutons, leds, programmateurs, ...
(j'ai une carte BASYS2 version 250K pour ma part)

Et il n'est pas interdit de réver : il est possible de synthétiser un micro-controleur dans un FPGA, j'ai même vu un exemple de micro-controleur AVR, hélas ce n'était pas un ATMega  smiley-fat
Au choix :
CPU 32bits : http://retrocade.gadgetfactory.net/index.php?n=Main.UserGuide#ZPUino
CPU AVR (compatible ATmega) : http://www.papilio.cc/index.php?n=Papilio.ArduinoCore
(plus d'info ici : http://papilio.cc/)
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France S-O
Offline Offline
Edison Member
*
Karma: 41
Posts: 2189
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Il n'est pas question d'I2C ou d'autre chose qu'un port parallèle avec une clock, à moins que j'ai raté un truc ?]
Non tu n'as rien raté , c'est moi qui est resté bloqué sur mon idée : utiliser l'I2C pour utiliser le moins de pins possible sur un 328P.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Super_Cinci: il te faudrait combien de sorties PWM ?
Avec les 72 macrocells du XC9572XL il semblerait qu'on puisse pas dépasser les 7 sorties @8bits.

Sinon pour les curieux voila à quoi ça ressemble un générateur de PWM 8 bits à 8 voies en Verilog :
(code testé sur carte physique et qui marche)
Code:
// Multi-channels PWM generator with parallel loading.
// By Fabien Batteix
//
// Tested on BASYS2 board
//
module PwmGenerator(
    output wire [7:0]Pwm, // PWM output (output only)
    input wire Reset,     // Reset signal (active LOW)
    input wire Load,      // Load signal (active LOW)
    input wire Addr,      // Load address if LOW or data if HIGH
    input wire Clk,       // Clock signal
    input wire [7:0]Data  // Data bus (input only)
   );

    // Internal PWM values (8 registers x 8bits)
    reg [7:0]channels[7:0];

    // Internal counter (8 bits)
    reg [7:0]counter;
   
    // Internal address pointer (3 bits = 8 registers)
    reg [2:0]address;

    // At each clock front
    always @(negedge Clk)
    begin
        if(!Reset) // Reset pulse
            counter <= 0;
        else // Increment the counter
            counter <= counter + 1;
    end
   
    // At each front of Reset or Load pins
    always @(negedge Reset or negedge Load)
    begin
        if(!Reset) // Reset pulse
            begin
                channels[0] <= 0;
                channels[1] <= 0;
                channels[2] <= 0;
                channels[3] <= 0;
                channels[4] <= 0;
                channels[5] <= 0;
                channels[6] <= 0;
                channels[7] <= 0;
                address <= 0;
            end
        else // Load pulse
            begin
                if(!Addr) // Load Address
                    begin
                        address[0] <= Data[0];
                        address[1] <= Data[1];
                        address[2] <= Data[2];
                    end
                else // Load data
                    channels[address] <= Data;
            end
    end
   
    // Assign PWM output signals
    assign Pwm[0] = (channels[0] > counter);
    assign Pwm[1] = (channels[1] > counter);
    assign Pwm[2] = (channels[2] > counter);
    assign Pwm[3] = (channels[3] > counter);
    assign Pwm[4] = (channels[4] > counter);
    assign Pwm[5] = (channels[5] > counter);
    assign Pwm[6] = (channels[6] > counter);
    assign Pwm[7] = (channels[7] > counter);

endmodule

+ Fichier de contrainte pour les broches (pour carte BASYS2) :
Code:
# Pins constraint for BASYS2 board

NET "Clk" LOC = "B8"; # Bank = 0, Signal name = MCLK
NET "Clk" CLOCK_DEDICATED_ROUTE = FALSE;

NET "Pwm<7>" LOC = "G1" ;  # Bank = 3, Signal name = LD7
NET "Pwm<6>" LOC = "P4" ;  # Bank = 2, Signal name = LD6
NET "Pwm<5>" LOC = "N4" ;  # Bank = 2, Signal name = LD5
NET "Pwm<4>" LOC = "N5" ;  # Bank = 2, Signal name = LD4
NET "Pwm<3>" LOC = "P6" ;  # Bank = 2, Signal name = LD3
NET "Pwm<2>" LOC = "P7" ;  # Bank = 3, Signal name = LD2
NET "Pwm<1>" LOC = "M11" ; # Bank = 2, Signal name = LD1
NET "Pwm<0>" LOC = "M5" ;  # Bank = 2, Signal name = LD0

NET "Data<7>" LOC = "N3";  # Bank = 2, Signal name = SW7
NET "Data<6>" LOC = "E2";  # Bank = 3, Signal name = SW6
NET "Data<5>" LOC = "F3";  # Bank = 3, Signal name = SW5
NET "Data<4>" LOC = "G3";  # Bank = 3, Signal name = SW4
NET "Data<3>" LOC = "B4";  # Bank = 3, Signal name = SW3
NET "Data<2>" LOC = "K3";  # Bank = 3, Signal name = SW2
NET "Data<1>" LOC = "L3";  # Bank = 3, Signal name = SW1
NET "Data<0>" LOC = "P11"; # Bank = 2, Signal name = SW0

NET "Reset" LOC = "A7";    # Bank = 1, Signal name = BTN3
NET "Load"  LOC = "M4";    # Bank = 0, Signal name = BTN2
NET "Addr"  LOC = "C11";   # Bank = 2, Signal name = BTN1
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4989
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Super_Cinci: il te faudrait combien de sorties PWM ?

Bonsoir skywodd
je crois qu'il a évoqué 32 sorties
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

je crois qu'il a évoqué 32 sorties
Ha ok, moi je croyais que c'était le DMX qui avait 32 canaux smiley-small

Mouai mouai mouai pour 32 canaux de PWM faudrait presque partir sur un petit ARM-CortexM0/3 en boitier 44/48 broches.
(histoire d'avoir un joli port 32 bits complet et un timer pour le refresh + SPI pour le contrôle)
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4989
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je crois qu'il a évoqué 32 sorties
Ha ok, moi je croyais que c'était le DMX qui avait 32 canaux smiley-small

Mouai mouai mouai pour 32 canaux de PWM faudrait presque partir sur un petit ARM-CortexM0/3 en boitier 44/48 broches.
(histoire d'avoir un joli port 32 bits complet et un timer pour le refresh + SPI pour le contrôle)
il confirmera

mais j'en suis là

Quote
...Dans mes données DMX, je reçois 1 valeur 8bits par canal (sur 512 possibles), donc une PWM 8 bits, c'est nikel. Côté nombre de sorties, j'imagine bien un truc genre 32 canaux...

perso et compte tenu de ce qui peut se passer en "spectacles" , je resterait sur du petit module basé sur du MCU tres abordable, facile a implanté, clock interne , en dip ,mais bon ça ce discute
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1392
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci les copains!

Pour le nombre de canaux, je n'ai pas encore choisi, tout dépend de mon stock et de ce que j'achèterai en plus (du RGB, ça serait top aussi!)

Le DMX, lui, il permet d'envoyer une trame de 512 données, soit adresser jusqu'à 512 canaux. Je n'irai pas jusque là. Mais j'ai déjà monté un UNO dans ma machine à fumée, et c'est à partir de ça que j'ai eu l'idée de monter un pupitre spécifique (émetteur qui insère des canaux dans une trame émise par une première console), et sur scène, des récepteurs, dont un qui va me gérer des leds.

j'aimerais monter ce genre de sunstrip : http://www.thomann.de/fr/showtec_sunstrip_active_dmx.htm, en général, on en met plusieurs à la verticale au fond de la scène. Ca sert à rien, mais on m'en demande tout le temps. Et vu le prix...

J'ai fait un premier montage, chaque plaque contient 20 modules de 300mW chacun, soit 6W (0,5A / 12V). Et ça pète grave, à 5m tu as encore du mal à les regarder en face.



Je compte donc pouvoir alimenter chaque plaque indépendamment, sur un strip, mais mettre des strips en // etc etc... Je dois avoir déjà de quoi monter 40 plaques dece genre, plus certainement bien d'autres encore, je n'ai pas ouvert tous les cartons...

Je regarde vos liens et vais tenter de me faire une idée. Le parallèle, c'est pour gagner du temps, car gérer un port série quand sur un autre y'a des données qui déboulent à 250kb/s en continu qu'il ne faut surtout pas mélanger ni rater (il n'y a pas d'adressage, il faut compter les octets reçus pour savoir où on en est, il y a juste un start tous les 512 octets)...
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Idée en l'air comme ça.

Des ATtiny 45/85 programmés pour écouter le signal DMX et extraire un seul canal pour générer un unique signal PWM.
C'est modulaire, certes un peu cher si tu fait des 10aine de cartes mais ça ce discute.

Un gros µc qui fait tout VS plein de petit µc qui font juste un morceau. A voir.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4989
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Idée en l'air comme ça.

Des ATtiny 45/85 programmés pour écouter le signal DMX et extraire un seul canal pour générer un unique signal PWM.
C'est modulaire, certes un peu cher si tu fait des 10aine de cartes mais ça ce discute.


on en avait un peu discuté sur un de mes projets en cartons, mais en clock interne, je crois que l'on était arrivé à la conclusion
que le DMX et PWM n'etait pas possible avec une clock interne..

a retrouver


http://forum.arduino.cc/index.php?topic=172898.msg1285348#msg1285348
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut les lumineux,
projet intéressant que voila, je n'ai pas de solution toute faite mais je controle 16 leds RVB (48 canaux) en DMX avec 3 TLC 5940 et un ATmega328 avec les Library http://code.google.com/p/tlc5940arduino/ pour le TCL et http://www.mathertel.de/Arduino/DMXSerial.aspx pour la partie DMX.
je n'ai pas le code avec moi mais je peu rechercher ca, par contre je ne pense pas que le TCL pourat piloter directement les LED que tu a montrer.

aller fondu au noir et a la prochaine !
Logged

@+
jerome

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1392
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le clock interne, on oublie en effet, faut être très précis sur des vitesses comme le DMX. pour gérer le dmx, il faut un timer à 4µs pour détecter le "start", puis un RX à 250kbauds.

mais monter un proc dans chaque barre (mais combien de voies et quel proc?) un 328 me permettrait de fournir 4 PWM. J'imagine que chez ATMEL, il y a quelques AVR plus fournis... le ATXMEGA16U4 par exemple mais va falloir le programmer celui-là...
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1392
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon, après un rapide tour d'horizon...

Je pense que je vais m'orienter vers le TLC5940. chacune de mes barres sera donc équipée d'un 328p et d'un TLC5940. Il faudra donc rajouter quelques petits transistors (Si je reste sur mes leds, un simple 2N2905 (NPN en collecteur ouvert) devrait pouvoir driver chaque bloc de led, et on reste compatible avec les sorties du TLC). Alimenté par une petite alim 12V apacher, il suffira de brancher chaque rampe sur le 220 et chaîner le DMX. Ce qui va me coûter le plus cher, ce sont les prises ou le boîtier (mais j'ai des copains bien placés)...

ça permettra de coupler les rampes au bon gré de mon plaisir sur les canaux DMX.

Reste à définir le nombre de voies sur chaque rampe, 8, 10, 12, 16... une question de taille aussi, longueur = 60mm x nbre modules... bah 16, c'est pas mal, ça fait une rampe de 1m pour 100W de leds...
Logged

Pages: 1 [2]   Go Up
Jump to: