Go Down

Topic: utiliser un atmega sans arduino (Read 4794 times) previous topic - next topic

anthology

salut a tous
voila pour mon projet j'ai besoin de beaucoup de I/O en PWM ( + de 100 )
le soucis c'est que je me voit pas acheter 50 arduino pour avoir le bon nombre d'I/O donc je me suis dit que je pourrez utilisé un arduino pour programmer les atmega et ensuite mettre l'atmega directement sur un autre circuit ( 4? l'atmega donc plus rentables que un arduino a chaque fois )
le seul soucis c'est je me demandez si toute les I/O de l'atmega été utilisable en pwm et que mettre comme protection pour pas le cramé
sinon avez vous une solution d'une carte qui aurez beaucoup d'I/O ?
merci

erlik

L'atmega 328 gère de base 6 sorties PWM, mais il existe des scriptes pour convertir des sorties standards en sorties PWM

Cela dit, si tu as besoin de toutes ces sorties sur un meme circuit, le TLC5940 devrait t'interesser. Il permet de piloter 16 sorties PWM, mais tu peux en rajouter plusieurs a la suite. Donc, 7 circuits a la queue leu leu te donnent 112 sorties, avec seulement 5 pins de la carte utilisés.

anthology

#2
Nov 01, 2010, 10:54 pm Last Edit: Nov 01, 2010, 11:45 pm by anthology Reason: 1
interessant ca ^^
7 circuit avec 5 pin utilisé ? faut que tu mexplique la ^^
il ce pilote comment ? enfin comment je peux faire pour piloter des servo directement ?
une idée d'un bout de code ?
et au passage
pense tu que l'arduino arrivera a faire fonctionner 112 servo en meme temps ?
au niveau de l'alim je sais que non mais ca c'est déja fait avec de bon vieux régul mais sinon j'ai peur qu'il pedale un peu nan ?

encore un ptit truc ^^
c'est tu ou je peux en trouvé en france ??
avec les support bien sur
merci

Jean-François

48 servos maximum pour la Mega :

http://www.arduino.cc/playground/Code/MegaServo

c'est déjà pas trop mal  ::)
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

erlik

Le TLC5940 est "chainable", c'est a dire que plusieurs peuvent se brancher en parallèle, et fonctionnent comme un énorme circuit intégré modulable ( comme les registes à décallage type cd4094).

Il se pilote via une librairie:
http://www.arduino.cc/playground/Learning/TLC5940
Il gere aussi les servos (il y a un script d'exemple dans la lib)
Pour plus d'infos:
http://code.google.com/p/tlc5940arduino/
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1218174457


anthology

merci a toi erlik
je pense que je vais opté pour ca
il ce chaine comment ?
un adressage je présume ^^
mais toujours la grande question
ou en trouvé ??
le seul fournisseur que j'avais n'en a plus donc ca va va etre dur
et il me faudrait les support avec ^^
merci

erlik

Pour le cablage et l'adressage des données, tout est indiqué dans le playground et les sketchs de la librairie
http://www.arduino.cc/playground/Learning/TLC5940
Et encore un dessin si ça ne suffit pas
http://students.washington.edu/acleone/codes/tlc5940arduino/img/tlc5940arduino_wiring.png
Mais manque bien sur les éléments a piloter (leds, servos, autre)

Coté boutiques, y a de quoi faire sur le net (attention aux frais de ports,  et de douane hors UE)
http://www.sparkfun.com/commerce/product_info.php?products_id=10136
http://fr.farnell.com/texas-instruments/tlc5940ntg4/driver-de-led-16-voies-cms-dip/dp/1226306
http://www.earthshineelectronics.com/62-tlc5940-16-channel-led-driver.html

anthology

merci a toi
sparkfun n'en a plus
farnell c'est du CMS et j'en veut pas ^^
ensuite le dernier ne m'inspire pas du tout confiance ^^
sinon oui c'est pour piloter des servo ^^

anthology

#8
Nov 04, 2010, 10:27 pm Last Edit: Nov 04, 2010, 10:50 pm by anthology Reason: 1
j'ai enfin réussi a en trouvé ^^
il sont commandé en attente de les recevoir ^^
encore deux petites questions ^^
dans la libraires je trouve pas comment savoir a quel tlc envoyé les données enfin piloté le servo
genre si j'en mets 5 comment je fais pour envoyé le signal pwm au 5 eme servo du 3 eme tlc ?
vu qu'il ne sont pas programmé je voit pas comment je peux savoir au quel envoyé ^^
une idée ? un début de code ??
ensuite j'ai besoin de autant de sortie que d'entrées
donc j'ai environ 80 sortie mais il m'en faut autant en entrée !!
multiplexing me semble mais quoi utilisé pour faire ca
un nom de composants ? une idée de la librairies ?
merci beaucoup

erlik

#9
Nov 05, 2010, 04:10 pm Last Edit: Nov 05, 2010, 04:15 pm by erlik Reason: 1
Pour les sorties, il y en a 16 par circuits. Sur le 1er circuit, elles correspondent aux channels 0 à 15. Su tu en rajoutes un, les nouvelles sont numerotés 16 à 31, etc etc. Quand tu modifies la valeur d'un channel, la lib tente de répercuter cela au TLC5940 correspondant.
Donc, tes sorties vont de 0 à [16*Nbr TLC5940 - 1]
Dans la librairie, tu as un code d'exemple avec les servos ( et comment connecter la sortie à l'entre data du servo )
Code: [Select]

#define SERVO_CHANNEL   0
int angle = 25;
   tlc_setServo(SERVO_CHANNEL, angle);
   Tlc.update();

Ou SERVO_CHANNEL correspond à la sortie 0 (1er circuit)
Si tu avais mis "SERVO_CHANNEL  35", il aurait tenté de mettre à jour le channel 35, cad sortie 4 du 3ème circuit
0->15 = circuit 1
16->31 = circuit 2
32->47 = circuit 3
etc

Il n'y a donc rien a définir, juste ne pas se planter dans les branchements et les n° de channel. A noter qu'il n'y a pas d'erreur si tu tentes de mettre a jour la valeur d'un channel qui n'existe pas

Mais comme dit avant, regarde bien les exemples, abondamment commentés,  dans la librairie, ça te donnera toutes tes réponses.

anthology

merci a toi c'est pile ca que je voulais savoir ^^
ca me donne réponse a toute mes questions sauf une mais bon ^^
donc en gros quand je les chaines il comprends ca comme une extension sur le même tlc et non comme un autre tlc donc si je veut la 4 eme sortie du 3 eme tlc  ca me donne le 36 ( 16+16+4 )
normalement j'ai bien capté ^^
je commence le code mais il me faudrait une infos ^^
comment avoir autant de sortie que d'entrée ?
les TLC ne sont valable que en sortie donc il me faut du multiplexing je pense

erlik

#11
Nov 05, 2010, 08:02 pm Last Edit: Nov 05, 2010, 08:09 pm by erlik Reason: 1
Quote
donc en gros quand je les chaines il comprends ca comme une extension sur le même tlc et non comme un autre tlc donc si je veut la 4 eme sortie du 3 eme tlc  ca me donne le 36 ( 16+16+4 )

Oui, c'est ça. Mais attention, la numérotation commence de 0, donc fait attention dans les branchements

Quote
comment avoir autant de sortie que d'entrée ?
les TLC ne sont valable que en sortie donc il me faut du multiplexing je pense

Tu veux une 100ènes d'entrées ?... Ça dépendra surtout du signal entrant à lire.
Si c'est des changement d'états, tu peux tenter le PCF8575, un composant I²C qui peut gerer 16 entrées/sorties (interrupteurs), mais on ne peut en utiliser "que" 8 ( 128 entrées quand même ) sur un même bus I²C, at il n'existe qu'en SMD.
Sinon, il y a le PCF8574, du meme type que le précédant, mais gérant 8 I/O, et existant en boitier DIP. Et là, il existe en 2 "type": le PCF8574, et le PCF8574a. Ils sont strictement identique coté codage et présentation, mais leur header i2c est legerement différent. Donc, on peut en utiliser 8 de chaque par bus, soit 16 au total  ( 128 entrées totales aussi )

anthology

ouep tkt je vais faire gaffe sur les numérotations ^^
ca seré des signal d'un potar ^^
en gros j'utilise le principe de la position dun potar pour faire bougé un servo en consequence
donc potar de 10Kohms
j'ai déja le code et tout
il marche pour l'arduino en lui meme donc sans extension
aprés j'aten de recevoir les tlc pour pouvoir testé avec beaucoup plus de servo mais il me faut des entrées en plus ^^

erlik

#13
Nov 05, 2010, 08:21 pm Last Edit: Nov 05, 2010, 08:22 pm by erlik Reason: 1
Dans ce cas, je dirais:
- des registres de décallage type CD4094 (même principe de montage "en chaine" que le TLC5940 ), de manière a être sur de la sortie sélectionnée
- tes potars
- une entrée analogique

Tu relies chaque sortie des registres à un potar et toutes leurs sorties curseurs à l'entrée analogique choisie. Quand tu sélectionnes la sortie d'un des registres ( et une seule a chaque fois), elle alimente le potar et sa sortie curseur te donne la valeur analogique.

Mais ça devient une vrai usine a gaz ... Tu veux faire quoi avec tous ces servos ?...

anthology

hum non il faut que tout soit alimenté en meme temps
il faut que je recupere la sortie analogique de chaque potar en quasi temps réelle
je ne sais pas a l'avance quel potar va etre utilisé
donc voila mon soucis ^^
niveau multiplexing ca peut le faire me semble ^^

Go Up