Bienvenu(e)! Identification Créer un nouveau profil

Recherche avancée

Mon projet asservissement 6 moteurs avec l USB

Envoyé par kikisurface 
Re: Mon projet asservissement 6 moteurs avec l USB
jeudi 5 avril 2007 13:43:19
Bonjour,

Voila j ai un petit souci je pense que je vais trouver seul mais defois ca prend tellement de temps alors si on peut me donner un coup de pouce.

Bon j en suis a la programmation de mon "SLAVE"

Slave :

Quartz + i2c + allim et un bouton reset sur le MCLR

Voila le reste des pin du pic sont la pour me commander 6 moteurs pas a pas (1 moteur pas a pas me cout 4 pins de mon slave). J ai suffisament de sortie TOUT vas bien.

1er moteur -RB7..RB4 (no probleme en metant une led ou le moteur pa a pas ca tourne)
2eme moteur RD7..RD4 (souci sur la pin )
3eme moteur RC7..RC4
4eme moteur RD3..RD0
5eme moteur RA3..RA0
6eme moteur RA5 RA4 RB3 RB2

souci sur la pin RD7, RC5, RC4 etc... je pense que c est par ce que le pic utilise les autres "denomination" de la pin. je m explique sur RC5 il y a D+ et VP peut ete que je dois dir au pic je veux RC5 ou je ne veux pas D+ (usb) et je ne veux pas VP.

Bref il y a plein de patte qui ne sont pas en sortie comme je le souhaite malgres
TRISX=0xOO;
X={A, B, C..}

Bon je vais lire la datasheep (encore lol) et je vous raconte quand je trouve... sinon bienvenu a ceux qui connaissent a reponse.

Seeu you
Kikisurface


/*J ai lu de la datasheet une bonne parti de mon temps libre cette apres midi*/
RC4 et RC5 ne peuvent pas enter en output "normal"
Parcontre Pour RD7 je ne trouve vraiment pas RD6 RD5 RD4 fonctionne...je vais jouer avec ECCP et SPP... peut etre...







Modifié 1 fois. Dernière modification le 05/04/07 19:22 par kikisurface.

Re: Mon projet asservissement 6 moteurs avec l USB
vendredi 6 avril 2007 09:03:53
Salut,

Désolé, j'ai du mal a voir ce qui ne va pas...

Regarde toujours si à tout hazard la pin n'est pas cassée, ça arrive souvent avec des pics, à l'ohmmetre entre la pin et la masse, on a 0 ohm...

Maintenant, pourquoi tu utilises un 18f4550 si tu n'utilises pas l'usb?
Re: Mon projet asservissement 6 moteurs avec l USB
lundi 9 avril 2007 07:28:51
Bonjour,

Bon c est regle enfait dans mon programme j utilisais 2 fois les meme pine pour faire 2 choses differentes....

J utilise un 2eme 18F4550 sans usb parceque je n ai que ca sous la main...

Pour info maintenant j ai fait un tout petit soft avec delphi et je peux commander de facon "primaire" mon bras mecanique. 3 bontons par moteur (sens1, sens2, STOP).

Voila je n ai plus qu a faire marcher mon imagination et a programmer...

A bientot
Je vous tient au courant evidement

Kikisurface

Re: Mon projet asservissement 6 moteurs avec l USB
lundi 23 avril 2007 22:48:00
Coucou,

Juste pour donner des nouvelles.

Depuis les dernieres nouvelles :

J ai eu des soucis avec l I2C je ne suivais pas vraiment le "protocol" donne dans la datasheet mais maintenant c est bon ca fonctionne bien.

Donc j ai ca:

PC----transmission usb 'CHAR'------PIC-----transmission I2C 'CHAR'------(slave+moteurs)

Mais seulement voila je souaite envoyer des int (intiers) et la liaison i2c ne fait transiter que des chars (comme l usb j ai l impression DELPHI HURLE si j essai de mettre un chiffre plus grand que 255 dans une case du buffer)

Donc 2 soucis:

- 1er transformer un int en char sous delphi pour les transiter jusqu au slave
- 2eme "recoller" les deux chars pour retrouver mon chiffre d origine

MEMO :
CHAR -> 1 octet
INT -> 2 octets
/MEMO


transformer 2 char en 1 int dans le PIC (SLAVE) j ai ce qu il me faut :

//*********************
char poids_faible; //char recut de l I2C
char poids_fort; //char recut de l I2C
int data;

data = poids_faible + (poids_fort << 8)
//********************

Mais dans DELPHI ....

Il faudrai que j arrive dans delphi a couper un entier pour l envoyer sous forme de deux char dans le buffer de l usb et les faire suivre au slave via I2C

voili voilou je vais chercher tout ca et si jamais une personne connait deja la reponse au sujet de "comment decoup un int en 2 char sous delphi"... je suis prenneur

@+

Kiki surface





Modifié 1 fois. Dernière modification le 23/04/07 22:53 par kikisurface.
Re: Mon projet asservissement 6 moteurs avec l USB
mercredi 25 avril 2007 12:01:33
SAlut,

Y'a plus simple, et tu peux même le faire dans le pic,

int valeur;
char car;

car = (valeur&0xff00) >> 8;
send (car);
car = valeur &0x00ff:
send (car);


tu envoies alors respectivement les 8 bits de poids fort puis les 8 bits de poids faible

A+

Benjamin



Modifié 1 fois. Dernière modification le 25/04/07 12:02 par Benjamin.
Re: Mon projet asservissement 6 moteurs avec l USB
mercredi 25 avril 2007 14:15:17
Hum.... mon probleme est que l usb n envoie pas d entier si je veux envoyer 1800 par exemple je ne peux pas c est trop grand pour rentrer dans un char.


1800(base 10) = 0000 0111 0000 1000(base 2)

donc je coupe et j envoie depuis delphi 0000 0111(Base 2) = 7(base 10)
et 0000 1000(Base 2) = 8 (base 10)

le pic (master i2c) devrai recevoir correctement et je envoie tel quel dans le slave
apres je "colle les deux morceaux" et la y a un souci y a eu un rate quel que part...

je vais chercher pour info voici mon code:

DELPHI :

i:=round(20*StrTofloat(edit4.Text));
j:= i shr 8 ; //mean je decale vers la droite et je comble par des zeros
k:= i and $00FF; //mean je force a zero tout ce qui depasse de l octet que je souhaite

{pic Buffer7} FBufferOut [8]:=j; // msb j
{pic Buffer8} FBufferOut [9]:=k; // lsb k



Master :
unsigned char Buffer[64];

if(envoyer_i2c(0xEF,Buffer[7] )){PORTDbits.RD2=0;} else {PORTDbits.RD2=1;}// MSB
if(envoyer_i2c(0xEF,Buffer[8] )){PORTDbits.RD2=0;} else {PORTDbits.RD2=1;}// LSB


SLAVE :
unsigned short angle; // et B_consigne->data[] est normalement un unsigned char


angle = (B_consigne->data[7]<<8) + B_consigne->data[8];

// hum
Re: Mon projet asservissement 6 moteurs avec l USB
jeudi 26 avril 2007 09:05:12
Salut,

question delphi y'a pas de probleme ce que tu fais c'est la même chose que je t'ai mis en C. C'est tres juste que tu ne peux pas envoyer d'integer 16 bits au pic, donc il faut le découper dans delphi...

Pour ton code dans le pic je ne sais pas tres bien te répondre car je trouve pas l'erreur

A+
Re: Mon projet asservissement 6 moteurs avec l USB
jeudi 26 avril 2007 14:36:30
Coucou,

Bon j ai resolu le probleme,

Le probleme etait dans le slave (la parti recollage de deux cahr en 1 int)

angle_MSB=B_consigne->data[6];
angle_MSB=angle_MSB<<8;
angle_LSB=B_consigne->data[7];
angle = angle_MSB+angle_LSB;

Le probleme etait la : angle_MSB=B_consigne->data[6]<<8; -- ca ne fonctione pas chez moi
Re: Mon projet asservissement 6 moteurs avec l USB
dimanche 27 mai 2007 03:14:54
bonsoir,

Un petit up juste pour donner des nouvelles....

je suis entrain de faire le schema et le typon alors je vous mets des screens shoots

Schema realise avec kikad (kikad = sofwar free)


Vue 3d (merci Kikad) de la futur board


Voila

a bientot

kiki
Re: Mon projet asservissement 6 moteurs avec l USB
dimanche 27 mai 2007 11:37:12
Sympa la vision en 3D winking smiley faudra que j'essaye ce programme, je sais qu'il existe un exportateur 3d pour Eagle, mais il manque beaucoup de composant dedans...

Et ça bouge correctement ?

Benjamin
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter