Bonjour,
Je suis un élève de Term SSI et pour nos PPE nous devons fabriquer deux robots bipèdes.Le deuxième robot est du type "TROLL BOT" (http://www.lextronic.fr/P1930-chassi...l-bot.html).Il fonctionne avec deux servomoteurs et nous devons faire la programmation sur un PIC 16F627.
J'ai commencé sur flowcode à créer un algorigramme composé de sous-programme pour chaque mouvement des servos (-45°;0°;+45°), associant ces sous-programmes pour faire faire une marche rectiligne du robot.
J'ai également testé les servos pour trouver les temps à envoyé pour les différents mouvements des servos.
Flowcode a converti l'algorigramme en C, j'ai ensuite enlevé ce qui me semblais inutile ( Flowcode est assez lourd quand on le passe en C ).Ensuite j'ai transféré le programme sur le 16F627 et c'est là qu'il y a un problème, rien ne fonctionne.
Aidez-moi s'il vous plait car je suis sur mon 6eme programme depuis 1 mois et demi et aucun ne fonctionnent.. Si vous ne trouvez pas l'erreur ( ou ce qui ne vas pas ), vous pouvez quand même me donner vos conseils, ils seront les bienvenus.
Merci beaucoup.
Voici le programme :
//****************************** ****************************** ************************
//**
//** File name: F:\Lycée\PPE\ELEC\Prog Marcheur\MARCHEUR1\prog marcheur avec valeur.c
//** Generated by: Flowcode v3.4.7.48
//** Date: Thursday, March 17, 2011 17:11:28
//**
//****************************** ****************************** ************************
#define MX_PIC
//Définir pour microcontrôleur
#define P16F628A
#define MX_EE
#define MX_EE_TYPE1
#define MX_EE_SIZE 128
#define MX_UART
#define MX_UART_B
#define MX_UART_TX 2
#define MX_UART_RX 1
#define MX_PWM
#define MX_PWM_CNT 1
#define MX_PWM_TRIS1 trisb
#define MX_PWM_1 3
//Fonctions
//#include <system.h>
#pragma CLOCK_FREQ 19660800
//Configuration de données
//Fonctions internes
#include "C:\Program Files\Matrix Multimedia\Flowcode V3\FCD\internals.h"
//Déclarations de fonction Macro
void FCM_Servo_1_centre();
void FCM_Servo_1_plus45();
void FCM_Servo_1_moins45();
void FCM_Servo_2_centre();
void FCM_Servo_2_plus45();
void FCM_Servo_2_moins45();
void FCM_initialisation();
//Déclarations de Variable
char FCV_COMPT;
char FCV_DEBUT;
//Définitions supplémentaires
//Implémentations Macro
void FCM_Servo_1_centre()
{
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 1 ms
delay_ms(1);
//Sortie: 1 -> B5
trisb = trisb & 0xdf;
if (1)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 1618 us
delay_us(1618);
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 20 ms
delay_ms(20);
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
}
void FCM_Servo_1_plus45()
{
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 1 ms
delay_ms(1);
//Sortie: 1 -> B5
trisb = trisb & 0xdf;
if (1)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 1144 us
delay_us(1144);
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 20 ms
delay_ms(20);
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
}
void FCM_Servo_1_moins45()
{
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 1 ms
delay_ms(1);
//Sortie: 1 -> B5
trisb = trisb & 0xdf;
if (1)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 2094 us
delay_us(2094);
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
//Pause: 20 ms
delay_ms(20);
//Sortie: 0 -> B5
trisb = trisb & 0xdf;
if (0)
portb = (portb & 0xdf) | 0x20;
else
portb = portb & 0xdf;
}
void FCM_Servo_2_centre()
{
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 1 ms
delay_ms(1);
//Sortie: 1 -> B6
trisb = trisb & 0xbf;
if (1)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 1540 us
delay_us(1540);
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 20 ms
delay_ms(20);
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
}
void FCM_Servo_2_plus45()
{
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 1 ms
delay_ms(1);
//Sortie: 1 -> B6
trisb = trisb & 0xbf;
if (1)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 1075 us
delay_us(1075);
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 20 ms
delay_ms(20);
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
}
void FCM_Servo_2_moins45()
{
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 1 ms
delay_ms(1);
//Sortie: 1 -> B6
trisb = trisb & 0xbf;
if (1)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 2032 us
delay_us(2032);
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
//Pause: 20 ms
delay_ms(20);
//Sortie: 0 -> B6
trisb = trisb & 0xbf;
if (0)
portb = (portb & 0xbf) | 0x40;
else
portb = portb & 0xbf;
}
void FCM_initialisation()
{
//Calcul
FCV_COMPT = 0; // compt = 0
FCV_DEBUT = 0; // debut = 0
}
//Installation supplémentaire
void main()
{
//Initialisation
cmcon = 0x07;
//Code d'initialisation d'Interruption
option_reg = 0xC0;
//Boucle: Tant quedebut=0
while (1)
{
//Entrée: A0 -> debut
trisa = trisa | 0x01;
FCV_DEBUT = ((porta & 0x01) == 0x01);
if ((FCV_DEBUT == 0) == 0) break;
}
//Boucle: Tant quecompt<>5
while (1)
{
//Appel d'une Macro: Servo_1_centre
FCM_Servo_1_centre();
//Appel d'une Macro: Servo_2_centre
FCM_Servo_2_centre();
//Appel d'une Macro: Servo_1_moins45
FCM_Servo_1_moins45();
//Appel d'une Macro: Servo_2_moins45
FCM_Servo_2_moins45();
//Appel d'une Macro: Servo_1_centre
FCM_Servo_1_centre();
//Appel d'une Macro: Servo_1_plus45
FCM_Servo_1_plus45();
//Appel d'une Macro: Servo_2_plus45
FCM_Servo_2_plus45();
//Appel d'une Macro: Servo_1_centre
FCM_Servo_1_centre();
//Calcul:
// compt = compt + 1
FCV_COMPT = FCV_COMPT + 1;
if ((FCV_COMPT != 5) == 0) break;
}
//Appel d'une Macro: Servo_1_centre
FCM_Servo_1_centre();
//Appel d'une Macro: Servo_2_centre
FCM_Servo_2_centre();
mainendloop: goto mainendloop;
}
void interrupt(void)
{
}
-----