Microcontroleur PIC et AVR

Fermé
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012 - 29 févr. 2012 à 09:53
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012 - 5 mars 2012 à 14:04
Bonjour.
je suis actuellement en stage PFE, mon Stage consiste à
développer une carte électronique à base d'un Atmega 8515 pour la
gestion et la commande des équipements (ventilateur,
Alarme,compresseur....), j'ai développé un programme en C en utilisant
le logiciel MicroC Pro for Avr, j'ai fait en 1er temps un ptit
programme de Test c'est un progrm de clignotement est ça marche sur la
simulation par ISIS,et méme sur la maquette d'essai ,mais mon Problème
c'est que quand je fait un programme de Test qui contient des
conditions sur l'etats des Port d'entrer comme Par Exp (if(PORTA.B0=0)
PORTB.B1=1} le prog ça marche tjr sur ISIS mais quand j'ai fait le
test sur une maquette d'essai les résultats ne correspond pas à ce que
j'attende,volià l'exemple de Prg :

void main() {
DDRB = 0x00; //port B en entrée
DDRC = 0xFF;//Port C en sortie
DDRD=0xFF;
DDRA=0xFF; // Set PORTC as output
while(1){
if(PINB=0x01)
{
PORTC=0xFF;
PORTA=0x01;
PORTD=0xFF;
Delay_ms(300);
PORTD=0x00;
Delay_ms(300);
}
else {

PORTC=0x00;
PORTA=0x00;
PORTD=0x00;

}
}
}
normalement ça marche la simulation sur ISIS, mais la maquette j'ai fait un schéma sur la maquette,mais le résultat ne correspond pas à ce je cherche , le résultat qui je trouve c'est comme j'ai le progr suivant:

PORTC=0xFF;
PORTA=0x01;
PORTD=0xFF;
Delay_ms(300);
PORTD=0x00;
Delay_ms(300);
c'àd c'est comme j'ai aucune condition sur le Test des Ports , je crois que le problème c'est au niveau de câblage ou quoi exactement ??!!!
Merci d'avance
A voir également:

12 réponses

Bonjour

Ça m'étonne que ça marche en simulation...
car if(PINB=0x01) n'est pas un test, il faut écrire if(PINB==0x01) avec deux =
En fait if(PINB=0x01) est correct mais ne fait pas ce que tu crois : ça met PINB à 1 et ça donne une condition toujours vraie.
0
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012
29 févr. 2012 à 11:45
et voilààà ça marche merciii , mais dmg j'ai un autre prb :)
quand je connecte la pin B0 avec la masse pour réaliser PINB.B==0 je trouve comme résultat portA=0; PORTC=0;PORTD=0; pour c'est bien mais dès que j'enlève la masse sans connecter la pinB0 à la source 5v càd je laisse à l'air le µC considérer la pinb0 égal PIB.B0==1.
maintenant le problème je crois c'est au niveau de porgr c bien ça ?!!
0
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012
29 févr. 2012 à 12:10
Urgent SVP
0
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012
29 févr. 2012 à 12:54
QlQ peut m'aider svp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Quel est le problème maintenant ?
0
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012
1 mars 2012 à 09:46
Bjr;
oui le problème maintenant quant je relier le PINB.0 à la masse je trouve comme résultat:
else {

PORTC=0x00;
PORTA=0x00;
PORTD=0x00;
pour moi c bien , mais dès que j'enlève la masse et sans connecter le PINB.B0 à la source 5V càd je laisse à l'aire le µC le concéder comme PINB.B0==1 et trouve comme résultat :
if(PINB=0x01)
{
PORTC=0xFF;
PORTA=0x01;
PORTD=0xFF;
Delay_ms(300);
PORTD=0x00;
Delay_ms(300);
}
moi ce que je cherche c'est que le changement des états de PINB.B0 effectuée que lorsque le PINB.B0 est relié à la masse pour réaliser PINB.B0=0 ou bien lorsque est relié à la source 5V pour réaliser PIB.B0=1 et lorsque PINB.B0 à l'air normalement Haute impédance Z
mercii
0
moi ce que je cherche c'est que le changement des états de PINB.B0 effectuée que lorsque le PINB.B0 est relié à la masse pour réaliser PINB.B0=0 ou bien lorsque est relié à la source 5V pour réaliser PIB.B0=1
C'est bien le cas, non ? tout est normal.
lorsque PINB.B0 à l'air normalement Haute impédance Z
Tu voudrais que ça fasse quoi quand l'entrée PINB.B0 est en l'air ? Si elle est programmée en entrée logique, le microcontrôleur lira toujours soit un 0, soit un 1 : c'est la définition même d'une entrée logique. Suivant la technologie utilisée, ce sera toujours la même valeur ou bien un 0 ou un 1 aléatoirement.
0
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012
1 mars 2012 à 10:20
oui tout à fait normale ; mais moi je veux que lorsque PINB.B0 à l'air le µC mémorise l'état précédente, càd si il est PINB.B0 =1 doit etre PINB.B0=1 et la mm chose si il est relier à la masse PINB=0; cest ça ce que je cherche moi
merci d'avance
0
Ouf, j'ai enfin réussi à te faire dire ce que tu voulais. À aucun moment tu n'avais dit que tu voulais que ça ne change pas d'état quand l'entrée est en l'air.
Tu as donc besoin de distinguer 3 cas différents, ce qui ne peut pas se faire directement par la lecture d'une entrée qui te donnera forcément 0 ou 1 et rien d'autre.
Je vois deux façons de procéder, mais tu risque de ne pas trouver ça simple :
Soit tu utilises une entrée analogique (si ton PIC en a) et un pont diviseur. Comme ça, tu mesures 0V ou 5V ou 2,5V.
Plus facile à faire, tu relies ton entrée B0 à travers une résistance (par exemple 10k) à une sortie disponible, je vais supposer B1.
Il suffit de faire changer B1 d'état : si celui de B0 ne change pas (il reste à 0 ou à 1) c'est que ton entrée B0 est bien reliée au 0V ou au 5V. Si l'état de B0 change en même temps que celui de B1, c'est que B0 est en l'air.

Tu noteras que dans les deux cas, B0 n'est pas réellement en l'air car il y a des résistances qui le relient à autre chose, mais tu es bien obligé
0
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012
1 mars 2012 à 11:07
oui c géniel cette solution, mais je crois que puisque la machine que je dois la commander et reliée à ma carte par un relais de 24v soit fermer soit ouvert donc il suffit de travailler avec le 1er programme càd je vais considérer HZ (à l'air) comme dans le cas ou le PINB.B0 est relié soit à la masse soit à la source d'une manière très claire je confonde deux état (exp PINB.B0 relié à la source ou bien relié à l'air) en un seul état c bien ça ?!!
0
Non, ce n'est pas ça.
Quand ton entrée est en l'air, tu ne sais pas a priori si elle est à 0 ou à 1.
Même si tu as vu en faisant l'essai une fois que l'entrée en l'air se comportait comme un 1, quelle garantie as-tu que ce sera toujours le cas ? Si tu as une spécification qui te le dis, d'accord, mais sinon, tu as toutes les chances que ça ne marchera pas toujours Et tu te demanderas pourquoi tes sorties changent d'état alors que tu ne fais rien à l'entrée !

La manière habituelle de traiter une entrée à contact sec (comme un relais) est de relier l'entrée au +5V à travers une résistance de 1 à 10 k ohms, et de mettre le contact entre l'entrée et la masse.
Quand le contact est ouvert, la résistance met l'entrée à 1 sans ambiguïté.
Quand le contact est fermé, il met l'entrée à 0 toujours sans ambiguïté.
0
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012
2 mars 2012 à 09:36
bjr
oui ta raison, mais d'apès la datasheet j'ai trouvé que chaque entrées on peut le configurée avec ou sans résistance de rappel peut étre c'est ça le problème non!!??
et pour votre soultion si j'ai bien compris je dois relier l'entrée de µC au contact (relais à deux états) pour relier soit Vcc quand le contact est ouvert et relier la masse quand le contact est fermé ??
cordialement
0
dinhoaziz Messages postés 38 Date d'inscription mardi 31 janvier 2012 Statut Membre Dernière intervention 5 avril 2012
5 mars 2012 à 14:04
Merci Mr le père pour votre solution j'ai testé la deuxième solution et enfin ça marche
cordialement. @+
0