besoin d'aide pour mikroC

W

wazzaw

Guest
Salut je suis nouveau sur les microcontrôleurs.
J'ai un projet à faire qui est un capteur de lumière qui est l'épargne durant la journée toute la lumière doit être éteint, et pendant la nuit seulement quand il ya des gens dans la salle, il s'allume.

pour détecter une personne d'entrer et de quitter quelqu'un que j'ai utilisé 2 détecteurs de mouvement (2 cellules avec faisceau laser), mais le problème est dans le programme mikroC
les capteurs 2 sont connectés à la sortie PORTB PORTC.F4 et PORTC.F5, j'utilise PIC16F877A le programme que j'ai écrit est:
int compteur = 0;
void main () (
ADCON1 = 0;
TRISB = 0b00000000;
TRISC = 0b11111111;
PORTB = 0;
while (1) (
if (PORTC.F4 == 0 & & PORTC.F5 == 0)
PORTB = 0;
if (PORTC.F4 == 1) (
delay_ms (10000);
if (PORTC.F5 == 1) (
COUNTER = 1 compteur;)
)
else if (PORTC.F5 == 1) (
delay_ms (10000);
if (PORTC.F4 == 1) (
Compteur = COUNTER-1;)
)
if (compteur> = 1)
PORTB = 1;
)
)

Merci pour l'aide à l'avance.

 
Cette expression ne fonctionnera pas comme vous vous attendez à?

if (PORTC.F4 == 0 & & PORTC.F5 == 0)

Cette expression compare F4 à zéro, alors PADN logiquement le résultat à F5, puis compare le résultat de la logique et à zéro.

Vous avez besoin de plus entre parenthèses.

if ((PORTC.F4 == 0) & & (PORTC.F5 == 0))

 
merci pour la réponse e premier.mais j'ai toujours le même problème
Mon problm majeur dans mikroC est de savoir comment mettre en œuvre si ce port est de 1 bfore le port d'autres deviennent 1.
Dans cet exemple, si le capteur 1 est le puis, après un 2, tandis que le capteur est signifie que quelqu'un entra dans la chambre afin d'ajouter un compteur si capteur 2 est en marche et après un 1, tandis que le capteur est signifie que quelqu'un a quitté la salle de décrémenter contre, chaque fois contre > 0 garder la lumière sur

 
Bonjour,

A mon humble avis, vous devez faire quelque chose comme suit:

1.des entrées de test
if (PORTC.4 == 1)
(
test_bit = 1;
)
d'autre
(Test_bit = 0;)

if (PORTC.5 == 1)
(Test_bit_1 = 1;)
d'autre
(0) = test_bit_1
2.vérifier si quelqu'un entre
if (test_bit)
(
delay_ms (2000) / Attendre 2 sec
if (test_bit_1)
(
compteur ;
)
)

3.vérifier si quelqu'un vit
if (test_bit_1)
(
delay_ms (2000) / / Attendre 2 sec
if (test_bit)
(
contre -;
)
)

4.prendre une décision
if (compteur> 0)
(PORTB = 1;) / / Définit la lumière sur
d'autre
(PORTB = 0;) / / Définit la lumière surBien sûr que le code peut être optimisé.
L'idée principale est que les capteurs ne doivent pas être dans le même temps, ou vous obtiendrez le comptoir de contrôle.
Vous pouvez ajouter des conditions supplémentaires pour les chèques ...Donc, si 1 capteur est sous tension et capteur 2 est OFF qui signifie qu'il est possible que quelqu'un d'entrer et de tester ce ...même si capteur 2 est en marche et capteur 1 est OFF est possible que quelqu'un de quitter la salle et aller à l'épreuve...
J'espère que ça vous aider à faire une idée.Regards Sica.

 
Je pense que la meilleure approche est d'utiliser le port B interrompre le fonction de changement.
Vous n'avez pas à déplacer vos contributions à RB4, RB5.

L'interruption permet de détecter la séquence de changement beaucoup plus fiable que les broches d'entrée du scrutin.

 
merci pour la solution qui, je pense que c'est vrai, mais je ne sais pas pourquoi il didnot travaille, j'écris aussi Antoher un et didnot travail
while (1) (
if (PORTB.F7 == 1) (/ / capteur 1 est ON

while (PORTB.F6 0) (==
;
)
if (PORTB.F6 == 1)
compteur ;
)
if (PORTB.F6 == 1) (/ / capteur 2 est ON

while (PORTB.F7 == 0) (
;
)
if (PORTB.F7 == 1)
contre -;
)
if (compteur> 0)
PORTC = 0b11111111;
if (compteur == 0)
PORTC = 0b00000000;
)
)

 
Vous devez être prudent avec les compteurs, si vous le décrémenter quand il est nul, il sera 255!
vous devriez faire une première vérification: if (compteur> 0) contre -;
La solution à un problème est de le diviser en petits problèmes.
Vous pouvez essayer quelque chose comme ça.Code:pour (;;)

(

while ((PORTB.F6 == 0) & & (PORTB.F7 == 0)) (

;

)if ((PORTB.F6 == 0) & & (PORTB.F7 == 1)) (

entre ();

)

else if (PORTB.F7 == 0) & & (PORTB.F6 == 1)) (

quitter ();

)while ((PORTB.F6 == 1) | | (PORTB.F7 == 1)) (

;

)if (compteur> 0) (

PORTC = 0xff;

)

else (

PORTC = 0x00;

)

)fonction /*--- entrer ---*/void entrer (void)

(

while (PORTB.F6 == 0)) (/ * Heure des fonctions nécessaires?
* /

;

)if ((PORTB.F6 == 1) & & (PORTB.F7 == 1)) (

compteur ;

)

)fonction /*--- congé ---*/void quitter (void)

(

while (PORTB.F7 == 0) (/ * Heure des fonctions nécessaires?
* /

;

)if ((PORTB.F7 == 1) & & (PORTB.F6 == 1)) (

if (compteur> 0) (

contre -;

)

)

)Fin de /*--- ---*/ fichier

 
J'ai essayé le code u me l'a donné mais il didnot travail, je ne sais pas si le problème est dans le PIC, mais j'ai essayé de nombreux pics.now Je suis aussi un problème avec la simple code comme:

if (PORTB.F7 == 0) (
PORTC.F0 = 0;
)
if (PORTB.F7 == 1)
PORTC.F0 = 1;
ce que je fais quelque chose de mal?Y at-il encore quelque chose de je n'sais environ pic?
merci d'avance

 
Le code ressemble assez simple.
Si les fusibles de configuration ont été mis en place sur OK et la direction des données des registres mis, cela devrait fonctionner.
Une chose à surveiller est le minuteur de surveillance.Au cours du développement il est préférable de le désactiver.
Postez votre code complet du programme afin que nous puissions jeter un oeil.
Également utiliser la carte SIM MPLAB pour parcourir le code.Cela aide toujours.

 
Tel est le programme complet
int compteur = 0;
void main () (
TRISB = 0b11111111;
TRISC = 0b00001111;
TRISD = 0b00000000;
PORTB = 0;
while (1) (
if (PORTB.F7! = 0) (/ / capteur 1 est ON
while (PORTB.F6 0) (==
;
)
if (PORTB.F6! = 0)
compteur ;
)
if (PORTB.F6! = 0) (/ / capteur 2 est ON

while (PORTB.F7 == 0) (
;
)
if (PORTB.F7! = 0) (
if (compteur> 0)
contre -;
)
)
if (compteur> 0)
PORTD == 0xFF;
if (compteur == 0)
PORTD = 0x00;
/**********************************************/

merci pour l'aide

 
Toujours dévers voir votre config paramètres s'inscrire?
Ceci est normalement la première chose à faire qui met en place oscillateur horloge de surveillance, la mise sous tension minuterie, des bruns détecter, basse tension de programmation, etc

Dans Salut-Tech, il est fait quelque chose comme ceci:

Code:paramètres de configuration /*--- fusible ---*/__CONFIG (XT & WDTDIS & PWRTEN & Boren & LVPDIS);

 
avant d'écrire le programme que j'utilise incluent par défaut

 
J'ai des problèmes avec limitation de volume dans le fichier hex dans les versions démo.

<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Pleure ou très triste" border="0" />Pouvez-vous m'aider à télécharger gratuitement une version fuul hors mikroc.

<img src="http://www.edaboard.com/images/smiles/icon_question.gif" alt="Question" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top