FORUM Syndrome-OC - Jacky-PC


  Electronique


  Montage


  Servo Pod, en picbasic !

 




Pyre, Kr3st Electronique : replica Le salon de discussion : Deton@tor, 1 utilisateur anonyme et 15 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Servo Pod, en picbasic !

n°57291
andreq
Posté le 31-03-2005 à 23:37:49  profilanswer
 

Bonjour,
 
J'ai eu pendant bien longtemp comme projet de contôler ma webcam a distance. J'ai d'abord essayer de controller des moteur pas à pas sur port parallel... mauvaise idée et pas très pratique.
 
Ensuite, ...en faite, apres bientôt 6 mois (faut dire que j'avais presque laissé tombé), j'ai finalement acheter 2 servos moteur. Quoi de mieux pour controller ma webcam...grace au positionement par impulsions je peux lui assigner des "presets" personalisé...super me suis-je dit.  
 
Gros probleme, comment les controller ??... et voila la merveille du monde informatique : le pic basic !
 
Et c'est ainsi que je vous présente : LE servo POD !
 
Basé principalement sur des Pic12C50x (8 ou 9) (ou 12f50x). Le servo pod ressoit des données par une liaison serie. Tout d'abord un ID qui l'identifie lui-même, et ensuite une position de 1 a 255 qui corespond a la position du servo.  
 
Il dispose aussi 2 entres "joystick" qui lui permet d'etre controller de maniere matériel.
 
Un bouton fait en sorte qu'il est en mode normal ou joystick.
 
Un I/O est libre pour bientot ajouter l'ouverture et la fermeture d'un petit crayon laser en mode joystick.
 
Pour mon application, j'utilise 2 servo pod, donc 2 pic12c509a.
 
le schema, en fait, le typon...qui sera en fait sur plaque a trou... ressemble a ca :
http://ticpu.no-ip.com/andre/ServoPod.PNG
 
les composent sont très simple:
 
Resistances : 4.7k ou 10k , pour la liaison serie : 22k
ICs : pic12c509a
 
Le premier connecteur du haut à gauche est pour la lisaison serie.
Le deuxieme connecteur en dessou est le branchement 5v(2) et Masse(1).
Le connecteur du dessou est pour choirsir le mode  
Le grand connecteur du haut est la lisaison avec un joystick simple 4 boutons.
Biensur 2 connecteur 3 broche pour les 2 servos.
 
Le code de chaque pods varie mais a pour base, ceci :
 

Code :
  1. '****************************************************************
  2. '*  Name    : SERVOPOD.BAS                                      *
  3. '*  Author  : André Quirion                                     *
  4. '*  Notice  : Copyright (c) 2005                                *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 31-03-2005                                        *
  7. '*  Version : 1.0                                               *
  8. '****************************************************************
  9. include "modedefs.bas"
  10. 'Initialisation des variable, constante
  11. position    var     byte     'Variable de positionement
  12. ID         var     byte     'ID du ServoPod
  13. servo       con     4          'Sortie du servo
  14. serie       con  1          'Entré serie
  15. mode        con     5          'Mode joystick/normal
  16. joyUp       con     2          'Entré joystick Up
  17. joyDn       con     3          'Entré joystick Down
  18. 'Initialisation des valeurs
  19. ID          =       1        'ID unique du ServoPod
  20. position    =       125         'Position centrale du servo au demarage
  21. 'Initialisation des impulsions
  22. low                 servo     'Assure que les impulsions son positives
  23. debut:
  24.     pulsout servo,position      'Impulsions envoyer au servo
  25.    
  26.     if mode = 0 then            'Si en mode joystick
  27.     goto joystick               'Executer les instruction joystick
  28.     endif 
  29.    
  30.     serin serie,N2400,15,fin,[ID],position 'Attente des données serie pour le bon ID
  31. fin:
  32.     goto debut                  'Retour au debut des instruction
  33.    
  34. joystick:               
  35.     if joyUp = 0 then           'Si le bouton Up est activé
  36.     position = position + 1     'Augmenter la position du servo
  37.     else                        'Sinom
  38.         if joyDn = 0 then       'Si le bouton Down est activé
  39.         position = position - 1 'Diminuer la position du servo
  40.         endif
  41.     endif 
  42.     goto debut                  'Retour au debut des instruction   
  43. end


 
fichier hex :  
http://ticpu.no-ip.com/andre/servoPod.hex
 
Tout ce qu'il faut changer dans le code pour différencier les Servo Pod est le ID.
 
Je vais bientot commencer a construire tout ca et je vous reviendrai avec des photo et video.


Message édité par andreq le 31-03-2005 à 23:40:44
mood
Google
Posté le 31-03-2005 à 23:37:49  profilanswer
 

n°57295
andreq
Posté le 01-04-2005 à 08:09:13  profilanswer
 

Apres mure reflection, en fait.... 4h de debugage inutile..... les 12c509 ....men parlé plus !!!!!.....
 
solution : un bon vieu 16f84a.... et sa fonctionne :D... le code a vraiment changer....du fait que maintenant le pic gere les 2 servos lui-meme... je travail dessu et je vous revien

n°57297
itchy
Posté le 01-04-2005 à 10:11:38  profilanswer
 

sur un 16F84 tu peut mettre 12 servo (et si tu lui mettait des jambe :D )
 
 
hm enfin moi j'ai un pic 16f84a et un pic 16f88 a programer et pas moyen de lui programer quoi que ce soit , j'ai fait 4 programateur et rien a faire , meme le dernier  (FULLPIC) ça ne marche pas , pourtant le programateur me lit bien le contenu du pic , j'ai 5V sur la pin 14 et 13.2V sur la pin 4 mais rien a faire c veut pas programmer , j'ai tester plusieur log , j'ai meme fait verifier mes .hex  et il sont bon il rentre bien dans le pic nivo taille , il sont sans erreur mais tjrs la meme erreur apres verification 0000h  donc rien ne rentre :(
 
par contre les 12C ça c marche mais direct monter sur le port serie ^^

n°57302
re12
Back to the futur!
Posté le 01-04-2005 à 12:25:45  profilanswer
 

tu selectionne le bon type d'horloge?

n°57316
andreq
Posté le 01-04-2005 à 19:45:31  profilanswer
 

moi jutilise ICprog .. .au debut avec un programmateur JDM pour 16f84 seulement
 
maintenant jai un programmer JDM pour plusieurs PIC  
 
il faut les driver pour XP aussi pour que sa fonctionne
 
sinom pour les servo... ...je travail toujour sur une solution.. le mouvement et le positionement son OK.. mais la je perd des donné serie....je travail sur un "handshaking" hardware... jvous en reparle plus tard

n°57317
itchy
Posté le 01-04-2005 à 21:50:23  profilanswer
 

quoi comme "driver xp"
 
moi j'ai mis port95  et j'ai fait la manip pour ne plus avoir le priviledg instruction !!!
 
mais avec n'importe quelle prog c marche pas !!
 
les prog jdm j'en et fait deux  , et j'ai fait  "maison"  puis un pro ! ( full pic ) et aucun resultat  
 
je desepere :(

n°57321
andreq
Posté le 02-04-2005 à 00:24:10  profilanswer
 

faut voir sur le site de icprog pour les driver..et comment les faire fonctionner

n°57323
mdog
Posté le 02-04-2005 à 10:05:02  profilanswer
 

Bonjour a tous, je passait par la, et donc je me permet de vous conseiller ce programmateur :
http://www.chez.com/udelmas/prog_pic.html
 
De plus, le programmateur est extremement simple, je l'ait simplement réalisé sur une plaque d'essais et sa a marché du premier coup, je vous donnerait si vous voulez mon shema d'implantation sur la plaque a trou.
 
Je l'utilise avec le programme qui est donné sur la page : IC prog, et je programme sans problème un 16F84.
 
D'après cette page on peut également programmer la serie 16F87x simplement en modifiant legerement le programmateur .(rajout d'une resistance et changement du support tulipe)
 
J'ai l'intension de tester bientot avec un 16F87x car j'en ait un qui traine et qui ne sert pas.
Je vous tiendrait au courant si vous voulez ;).
 
@+


Message édité par mdog le 02-04-2005 à 10:06:18
n°57329
itchy
Posté le 02-04-2005 à 11:36:35  profilanswer
 

j'ai deja realiser se programateur la mais sans succes  il sagit d'un 16F84A !

n°57352
gogou
En plein travail...
Posté le 02-04-2005 à 18:44:02  profilanswer
 

Moi j'ai utiliser WARP et un dataman pour programmer la pic.


Message édité par gogou le 02-04-2005 à 22:23:01
n°57410
andreq
Posté le 03-04-2005 à 10:13:00  profilanswer
 

Bon en fait le premier que jai realisé : http://www.jdm.homepage.dk/newpic0.htm
 
fonctinnais tres bien... mais 16f84(a) seulement.. pour les driver xp :
http://www.ic-prog.com/icprog_driver.zip
 
et les setting :
 
http://www.ic-prog.com/jdmset.html
 
 
si sa fonctionne pas...faut voir au le mclr normalement le voltage devrais etre assé élevé

n°57500
andreq
Posté le 06-04-2005 à 18:18:39  profilanswer
 

rebonjour,
 
J'ai finalement reussi a tout faire fonctinner.
 
le nouveau schema :
 
http://ticpu.no-ip.com/andre/servoPod.png
 
a base d'un 16f628a (pourquoi utiliser une 16f84 ??...)
 
le mode joystick est activé lorsque le bouton mode est enfoncé  
 
le code :
 

Code :
  1. '****************************************************************
  2. '*  Name    : SERVOPOD.BAS                                      *
  3. '*  Author  : André Quirion                                     *
  4. '*  Notice  : Copyright (c) 2005                                *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 31-03-2005                                        *
  7. '*  Version : 1.5                                               *
  8. '****************************************************************
  9. include "modedefs.bas"
  10. CMCON = 7
  11. 'Initialisation des variable, constante
  12. pos1    var     byte     'Variables de positionement
  13. pos2    var     byte
  14. cont    var     byte       'Compteur
  15. mode    var     byte       'Variable du mode
  16. 'Initialisation des valeurs
  17. pos1 = 157          'Position centrale du servo au demarrage
  18. pos2 = 152     
  19. mode = 0            'Mode joystick au demarrage,  changer au choix
  20. high porta.2        'Allumer la LED du joystick,  changer au choix
  21. if mode = 0 then goto joystick
  22. if mode = 1 then goto remote
  23. remote:
  24.     for cont = 0 to 40
  25.     pulsout portb.4,pos1         'Impulsion vers les servos
  26.     pause 8
  27.     pulsout portb.5,pos2
  28.     pause 8
  29.     next cont           
  30.  
  31.     high portb.7                 'Handshacking hardware
  32.     serin portb.6,N2400,100,fin,pos1,pos2 'Attente des données serie.
  33. fin:
  34.     low portb.7                  'Handshacking hardware
  35.     gosub modeDetect
  36.     if mode = 1 then
  37.     goto remote                  'Retour au debut des instruction
  38.     else
  39.     high porta.2
  40.     goto joystick
  41.     endif
  42. end
  43.    
  44. joystick:
  45.      
  46.     if portb.3=0 then pos2=pos2-1
  47.     if portb.2=0 then pos2=pos2+1
  48.     if portb.0=0 then pos1=pos1+1
  49.     if portb.1=0 then pos1=pos1-1
  50.    
  51.     pulsout portb.4,pos1         'Impulsions vers les servos
  52.     pause 8
  53.     pulsout portb.5,pos2
  54.     pause 8   
  55.    
  56.     pause 20
  57.    
  58.     gosub modeDetect
  59.     if mode = 0 then
  60.     goto joystick                 'Retour au debut des instruction
  61.     else
  62.     low porta.2
  63.     goto remote
  64.     endif
  65. end 
  66.    
  67. modeDetect    :                   'Quel mode ?
  68. if porta.3 = 1 then mode = 1
  69. if porta.3 = 0 then mode = 0
  70. return


 
Le fichier hex :  
 
http://ticpu.no-ip.com/andre/servoPod.hex
 
Reste a poffiner le code du joystick pour empecher le servo de depassé leur maximum et minimum.  
 
Coté software sur le PC... un ami travail toujour dessu. Noralement le logiciel attend des donner sur un seveur pour s'avoir quel direction aller. Ensuite il attend un signal sur la ligne DSR avant denvoyé les nouvelles position au PIC.
 
Je fait un video et je vous revien
 
edit :  
le video :
 
http://ticpu.no-ip.com/andre/servoPod.avi


Message édité par andreq le 06-04-2005 à 18:52:08
n°74305
F1CHF
Posté le 19-10-2006 à 08:34:06  profilanswer
 

ANDREQ ton site est HS ... TICPU.NO etc ...
je voulais voir la partie Mecanique !
pour la commande servo, je suis surpris que cela fonctionne comme cela
j'avais noté qu'il fallait un pulse positif variable entre 1ms et 2 ms pour donner la position et que le signal total (+ et -) devait durer 20 ms
donc une tempo du style ..
 high pwm_dir  ' Start servo pulse
    Pauseus 1000 + (val_dir * 4)
    low pwm_dir  ' End servo pulse
    Pauseus 19000 - (val_dir * 4)' Servo update rate about 50Hz
 
on en parle ?
Francois F1CHF

n°74317
Blue Sn4ke
Zelda Fan
Posté le 21-10-2006 à 10:11:25  profilanswer
 

+1 pour ton serveur HS :D
Sinon jsuis étonné de la taille du code qui permet déjà de faire tout ça o_O

n°74354
F1CHF
Posté le 23-10-2006 à 15:27:06  profilanswer
 

Il est ou le ANDREQ ?
il a tout pris dans la tête !
hi ....

mood
Google
Posté le 23-10-2006 à 15:27:06  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Electronique


  Montage


  Servo Pod, en picbasic !

 

Hit Parade