Révision 221
Ajouté par axfont il y a plus de 6 ans
branch/font/Emb_App/SessionM32C_E8a_system.ini | ||
---|---|---|
[Target]
|
||
M32C E8a SYSTEM=Renesas Communications
|
||
[USER_DATA]
|
||
RESET=ff0020
|
||
RESET=ff0022
|
branch/font/Emb_App/programme_principal_etud.c | ||
---|---|---|
//'I'/73/Ox49 : D?finition du nom du v?hicule. Doit d?buter par le caract?re '#' et entraine le chargement de la configuration de piste
|
||
// correspondant au nom du v?hicule si le nom se termine par '*'
|
||
|
||
int alpha;
|
||
int distance;
|
||
const int distance_bord = 700; //distance du bord souhait?e
|
||
const int angle_tourelle = 450; //angle tourelle souhait?
|
||
int alpha; //angle tourelle
|
||
int distance; //distance du bord mesur?e
|
||
int distance1;
|
||
int vitesse = 72;
|
||
int virage = 25;
|
||
int angle = 500;
|
||
int vitesse = 65; //vitesse souhait?e
|
||
int vitesse_virage = 25; //vitesse pendant un virage souhait?e
|
||
int angle_roue;
|
||
int kroue = 1;
|
||
int k = 1;
|
||
int couleur_capt;
|
||
int num_piste;
|
||
int num_piste1;
|
||
int capteur;
|
||
int couleur_capteur;
|
||
|
||
void lecture_telemetre(){
|
||
CanFrame reponsed, requeted;
|
||
... | ... | |
}
|
||
}
|
||
|
||
//Asservissement des roues permettant de placer la voiture ou on souhaite sur la piste
|
||
void asservissement_roue(){
|
||
CanFrame comm, requete;
|
||
UINT flag;
|
||
... | ... | |
comm.data.rtr = 1;
|
||
periph[ADDR('D')].ev = 0x03;
|
||
snd_dtq(CanTx, requete.msg);
|
||
wai_flg(ev_periph, 0x03, TWF_ANDW, &flag); //Attente de lecture
|
||
wai_flg(ev_periph, 0x03, TWF_ANDW, &flag); //Attente de lecture de l'angle des roues
|
||
|
||
comm.data.rtr = 0;
|
||
angle = kroue * (distance - 700);
|
||
comm.data.val = angle;
|
||
angle_roue = kroue * (distance - distance_bord); //Asservissement de l'angle
|
||
comm.data.val = angle_roue;
|
||
snd_dtq(CanTx, comm.msg);
|
||
dly_tsk(5);
|
||
}
|
||
|
||
}
|
||
// test avec fonction periph
|
||
|
||
//asservissmen tourelle
|
||
void tsk_asserv1(){
|
||
UINT flag;
|
||
CanFrame comm, reponse, requete, m;
|
||
... | ... | |
while(1){
|
||
//Lecture de la position
|
||
requete.data.id = 'R';
|
||
requete.data.rtr = 1; //requete de lecture
|
||
requete.data.rtr = 1;
|
||
periph[ADDR('R')].ev = 0x01;
|
||
snd_dtq(CanTx, requete.msg);
|
||
wai_flg(ev_periph, 0x01, TWF_ANDW, &flag); //Attente de la r?ponse
|
||
... | ... | |
//asservissement en vitesse de rotation de la tourelle
|
||
comm.data.id = 'T';
|
||
comm.data.rtr = 0;
|
||
comm.data.val = k * (450 - alpha);
|
||
comm.data.val = k * (angle_tourelle - alpha);
|
||
snd_dtq(CanTx, comm.msg);
|
||
dly_tsk(5);
|
||
}
|
||
}
|
||
|
||
void lecture_piste(){
|
||
CanFrame requete;
|
||
UINT flag;
|
||
|
||
requete.data.id = 'M';
|
||
requete.data.rtr = 1;
|
||
periph[ADDR('M')].ev = 0x04;
|
||
snd_dtq(CanTx, requete.msg);
|
||
wai_flg(ev_periph, 0x04, TWF_ANDW, &flag); //Attente de la r?ponse
|
||
num_piste = periph[ADDR('M')].val; //acquisition num?ro piste
|
||
}
|
||
|
||
void lecture_capteur(){
|
||
CanFrame requete;
|
||
UINT flag;
|
||
|
||
while(1){
|
||
//Lecture de la zone
|
||
requete.data.id = 'C';
|
||
requete.data.rtr = 1;
|
||
periph[ADDR('C')].ev = 0x05;
|
||
snd_dtq(CanTx, requete.msg);
|
||
wai_flg(ev_periph, 0x05, TWF_ANDW, &flag); //Attente de la r?ponse
|
||
capteur = periph[ADDR('C')].val; //acquisition du dernier capteur franchi
|
||
couleur_capteur = capteur >> 8;
|
||
dly_tsk(5);
|
||
}
|
||
}
|
||
|
||
void gestion_saut (){
|
||
|
||
|
||
}
|
||
|
||
|
||
//Fonction de demarrage de la voiture
|
||
void demarrage(){
|
||
CanFrame comm, requete;
|
||
UINT flag;
|
||
|
||
dly_tsk(4000);
|
||
dly_tsk(4000); //Attente avant d?part
|
||
|
||
comm.data.id = 'V';
|
||
comm.data.rtr = 0;
|
||
comm.data.val = vitesse;
|
||
comm.data.val = vitesse; //D?marrage
|
||
snd_dtq(CanTx, comm.msg);
|
||
|
||
while(1){
|
||
while(1){
|
||
comm.data.id = 'V';
|
||
comm.data.rtr = 0;
|
||
if(angle > 40 || angle < -40){
|
||
comm.data.val = virage;
|
||
if(angle_roue > 40 || angle_roue < -40){ //ralentissement de la voiture si angle demand? trop grand
|
||
comm.data.val = vitesse_virage;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
else {
|
||
comm.data.val = vitesse;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
}
|
||
dly_tsk(3);
|
||
}
|
||
}
|
||
|
||
|
||
... | ... | |
capture_init();
|
||
|
||
sta_tsk(ID_periph_rx);
|
||
sta_tsk(ID_lecture_piste);
|
||
sta_tsk(ID_lecture_capteur);
|
||
sta_tsk(ID_demarrage);
|
||
sta_cyc(ID_acqui);
|
||
sta_tsk(ID_tsk_asserv1);
|
branch/font/Emb_App/conf_noyau.cfg | ||
---|---|---|
};
|
||
|
||
task[]{
|
||
entry_address = gestion_saut();
|
||
name = ID_gestion_saut;
|
||
stack_size = 512;
|
||
stack_section = stack;
|
||
priority = 4;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
|
||
task[]{
|
||
entry_address = lecture_piste();
|
||
name = ID_lecture_piste;
|
||
stack_size = 512;
|
||
stack_section = stack;
|
||
priority = 4;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
|
||
task[]{
|
||
entry_address = lecture_capteur();
|
||
name = ID_lecture_capteur;
|
||
stack_size = 512;
|
||
stack_section = stack;
|
||
priority = 4;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
|
||
task[]{
|
||
entry_address = demarrage();
|
||
name = ID_demarrage;
|
||
stack_size = 512;
|
Formats disponibles : Unified diff
implémentation des tâches lecture capteur et lecture piste plus test validés