Aller au contenu


babylone_59

Inscrit(e) (le) 18 janv. 2008
Déconnecté Dernière activité mai 21 2008 08:44
-----

Messages que j'ai postés

Dans le sujet : Programme 16F877A

21 mai 2008 - 05:44

As tu un lien pour telecharger Pic C ligt? si oui peux tu me le fournir je vais essayer avec se logiciel?
merci

Dans le sujet : Programme 16F877A

21 mai 2008 - 05:07

En fait je n'est pas encore essayé de compiler.
Il faut le faire sous Mplab avec un compilateur C comme Hi Tech Picc mais je n'arrive pas a configurer Mplab avec HI tech Picc donc je fais d'abord mon prog en attendant de trouver un PC ou sa tourne bien avec un prog de PIC.voila voila

Dans le sujet : Programme 16F877A

21 mai 2008 - 03:32

voila j'ai continuer mon programme, je le réaffiche:

--Déclaration
#define IN1 pin_A0

#define capteur_Dr RB1
#define capteur_Ga RB2
#define capteur_Ha RB3

#define moteur_Ga_s1 RB4
#define moteur_Ga_s2 RB5

#define moteur_Dr_s1 RB6
#define moteur_Dr_s2 RB7

#define moteur_Ha_s1 RC0
#define moteur_Ha_s2 RC1

#define tt_droit()
{
moteur_Ga_s1(av,100);
moteur_Dr_s1(ar,100);
}

#define a_gauche()
{
while (capteur_Dr!=0)
{
moteur_Ga_s2(av,100);
moteur_Dr_s1(ar,100);
}
}

#define a_droite()
{
while (capteur_Ga!=0)
{
moteur_Ga_s1(av,100);
moteur_Dr_s2(ar,100);
}
}

#define demi_tour()
{
while(capteur_ga!=0) and (capteur_ga!=0)
{
moteur_Ga_s2(av,100);
moteur_Dr_s1(ar,100);
}
}
--initialisation (pour configurer les bits des ports en entrée/sortie, etc):
void Init(void)
{
ADCON1 = 0x07;
GIE=1; PEIE=1; // Autorise les interruptions
OPTION=0b10000001; // Configure tmr0 pour 64µs par bit
TRISB=0b11100000;
TRISC=0b00111111;
TMR0=0; // Confiqure la valeur de départ du registre TMR0
T0IE=1; // Active l'interruption de débordement du registre TMR0

capteur_Dr =0 ;
capteur_Ga =0 ;
capteur_Ha =0 ;

moteur_Ga_s1= 1;
moteur_Dr_s1= 1;
moteur_GA_s2= 0;
moteur_Dr_s2= 0;
moteur_Ha_s1=0 ;
moteur_Ha_s2=0 ;

}


-- prog principal:

main()
{
Init();
while(1) // Répéter toujours
{
if(capteur_Dr==1)and(capteur_Ga==1)demi_tour();
else if(capteur_Dr ==1)a_gauche();
else if(capteur_Ga==1) a_droite();
else tt_droit();
}
}


Par contre je ne suis pas sur qu'avec (av, 100) sa fonctionne.
Je doit mettre quoi (1, 100) non ?
Juste ce petit bout se code peut me faire éviter les obstacles?

Dans le sujet : Programme 16F877A

21 mai 2008 - 12:43

Ok mais il faut définir les actions demi_tour(), a_gauche() et a_droite().
Ou et comment sont elles définies?
De meme il faut définir que pre==1 et abs==0?
Pour commencer j'aimerai juste que mon robot évite les obstacles.

Dans le sujet : Programme 16F877A

20 mai 2008 - 10:06

Voici un début de mon programme, par contre je bloque au niveau de mon programme principal:

--Déclaration
#define IN1 pin_A0

#define capteur_Dr RB1
#define capteur_Ga RB2
#define capteur_Ha RB3

#define moteur_Ga_s1 RB4
#define moteur_Ga_s2 RB5

#define moteur_Dr_s1 RB6
#define moteur_Dr_s2 RB7

#define moteur_Ha_s1 RC0
#define moteur_Ha_s2 RC1



--initialisation (pour configurer les bits des ports en entrée/sortie, etc):
void Init(void)
{
ADCON1 = 0x07;
GIE=1; PEIE=1; // Autorise les interruptions
OPTION=0b10000001; // Configure tmr0 pour 64µs par bit
TRISB=0b11100000;
TRISC=0b00111111;
TMR0=0; // Confiqure la valeur de départ du registre TMR0
T0IE=1; // Active l'interruption de débordement du registre TMR0

capteur_Dr =0 ;
capteur_Ga =0 ;
capteur_Ha =0 ;

moteur_Ga_s1= 1;
moteur_Dr_s1= 1;
moteur_GA_s2= 0;
moteur_Dr_s2= 0;
moteur_Ha_s1=0 ;
moteur_Ha_s2=0 ;

}


-- prog principal:

main()
{
Init();
while(1) // Répéter toujours
{
action1();
action2();
...
}
}



j'ai quelques petites questions:

Au niveau des déclarations, je suis obligé de mettre tout sa:
ADCON1 = 0x07;
GIE=1; PEIE=1; // Autorise les interruptions
OPTION=0b10000001; // Configure tmr0 pour 64µs par bit
TRISA=0b00000011; //en entree c 1
TRISB=0b11111111;
TRISC=0b11011111;
TMR0=0; // Confiqure la valeur de départ du registre TMR0
T0IE=1; // Active

ou alors je n'en ai pas l'utilité?

Aussi au niveau du programme principal
je laisse mon while(1) pour boucler a l'infini mais au niveau ds actions 1 ... je fais quoi?
si je veux faire un :

while capteur_Ga=1 then moteur_Ga_sens_2=1 and moteur_Ga_sens_1=0
or while capteur_Dr=1 then moteur_Dr_sens_2=1 and moteur_Dr_sens_1=0
or while capteur_Ha=1 and capteur_Ga=1 and capteur_Dr=1 then moteur_Ha_sens_1=1
...

comment l'integrer a mon programme principal?
Merci