Chien de garde [Forums - HC908 et S08]
Chien de garde [Forums - HC908 et S08]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes



(1) 2 3 4 ... 6 »


Chien de garde
Régulier
Inscrit:
05/07/2006 17:03
Messages: 64
Hors Ligne
Bonjour tt le monde,

je travail sur une application la ou j'exploite le HC908EY16, et je veux mettre en oeuvre le chien de garde, mais ca ne veux pas marcher( ca beug) :mur: .

j'ai lu le datasheet du EY16 partie COP et partie CONFIG1 et la partie SIM, j'ai trouver qu'il ya 3 regsitres concernant le chien de garde :

1/ CONFIG2 : la ou il ya les deux bits : COPD et

COPRS = 1 : COP timeout period = 8176 CGMXCLK cycles
COPRS = 0 : COP timeout period = 262,128 CGMXCLK cycles

COPD = 1 : COP module disabled
COPD = 0 : COP module enabled

Donc, il faut activer COP en metteant COPD = 0, et choisir COPRS = 1 pour avoir une durée plus grande avant de rafraichir(relancer) chien de garde(si g bien compris)


2/ COPCTL : Apres il faut ecrire n'importe quoi dans le registre COPCTL pour rafraichir le chien de garde.(le chien de garde ne genere pas d'interruption)


3/ SRSR : SIM Reset Status Register (on a pas besoin de ce registre pour le fonctionementdi chien de garde)

Dans SRSR il ya le flag indiquant la dernire source evoquant le RESET.(parmis eux le COP_flag), donc il faut juste lire ce registre pour effacer le flag.

Je vous met ci-desous a quoi ressemble mon programme

. . .
. . . . . .
interrupt void TBM_ISR(){...}
interrupt void TIMAOF_ISR(){...}


Main{

. . .
. . . . . .
CONFIG1 = 0x01; /* dissable COP */
CONFIG2 = 0x45; /* slow clock for TBM */
ICGMR = 64;
. . . . . .

while (1){

COPCTL=5;
. . . .
. . . . . .
. . . . . . .

} // fin While
}


je note que j'ai vu les quelques discussion concerant le chien de garde sur le forum, mais g pas trouver de sollution.
Merci beaucoup de votre aide, orientation, conseil.

Posté le : 14/09/2006 11:54
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Régulier
Inscrit:
05/07/2006 17:03
Messages: 64
Hors Ligne
au fait je me suis tremper ds le prog, j'ai fait plutot ca :

. . .
. . . . . .
interrupt void TBM_ISR(){...}
interrupt void TIMAOF_ISR(){...}


Main{

. . .
. . . . . .
CONFIG1 = 0; /* Activer COP */
CONFIG2 = 0x45; /* slow clock for TBM */
ICGMR = 64;
. . . . . .

while (1){

COPCTL=5;
. . . .
. . . . . .
. . . . . . .

} // fin While
}

Posté le : 14/09/2006 11:55
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Régulier
Inscrit:
05/07/2006 17:03
Messages: 64
Hors Ligne
au fait g dis ca beug, car g essaiyer de tester si le chiein de garde marche correctement, donc g ajouter une portion de programme pouur essayer de bloquer le programme ds une boucle while, comme ca si le temps est depsé le chien de garde generera un RESET, et ca marche pas

petitours Edit
Au fait, j'ai dis que ca bug car j'ai essayé de tester si le chien de garde marche correctement. J'ai essayé de bloquer le programme dans une boucle while où le chien de garde devait générer un RESET et cela ne marche pas.

Je fais cette "traduction" aprés avoir posté mon post qui suis ce message et je me rencontre que le problème était bien expliqué en fait...comme quoi une mauvaise écriture empèche les gens de bien lire...

Posté le : 14/09/2006 12:18

Edité par petitours sur 14/09/2006 13:06:46
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Administrateur
Inscrit:
24/09/2005 12:24
Messages: 290
Hors Ligne
Bonjour,

:sms:
Attention, ce n'est pas vraiment du SMS mais on frise la difficulté à lire, ca ne va pas aider les gens à répondre.

Une chose aussi trés importante pour obtenir une réponse : dire ce qui ne va pas... Là on sait que ca bug :bug: mais je ne vois pas ce qui ne va pas effectivement.

Posté le : 14/09/2006 12:56
Petitours ne deviendra jamais grand... il est au service de la communauté mais il n'y participera jamais.
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Régulier
Inscrit:
05/07/2006 17:03
Messages: 64
Hors Ligne
desolé pour l'ecriture.

ensuite,

mon probleme c'est que le COP configuré ne génere pas un RESET, malgrès que le programme est bloqué dans la portion prevu pour le test(pa exmple :

D=1;
while (D==1){
PORTA = 1; //Alumer led rouge
}

donc, le MCu ne reset pas, et je voulais savoir pourquoi, es ce que j'ai mal configuré le COP, ou bien il me manque autres chose??

merci de votre réponse

Posté le : 14/09/2006 14:25
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Modérateur
Inscrit:
24/09/2005 13:30
De 04110 - VACHERES- FRANCE
Messages: 1495
Hors Ligne
Salut,
Comment sais tu que le uC ne reset pas ?
Tu devrais plutôt écrire un truc du genre :

unsigned int y ;

PORTA = ; //Eteindre led rouge

for(;;)
{
for (y = 0 ; y < 0xffff ; y++) ;
PORTA = 1; //Alumer led rouge
}

Si ton uC reset, tu verras pas la LED s'allumer, car le COP interviendra durant la boucle de pause, avant l'allumage de la LED (en considérant que le DDR du port utilisé pour la LED est boen configuré en sortie).

Yvan

Posté le : 14/09/2006 14:38
Le houblon, c'est bon pour la récupération.
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Régulier
Inscrit:
05/07/2006 17:03
Messages: 64
Hors Ligne
Dabord merci pour votre réponse,

je suis dacord pour l'exmpel que vous m'avez donner, et ca marche comme vous dite,

Je voulais essayer de faire un RESET une seule fois a la'ide du COP(ou bien de le faire quand je veux,alors voila ce que j'ai fait)

. . .
. . . . . .
interrupt void TBM_ISR(){...}
interrupt void TIMAOF_ISR(){...}


Main{

. . .
. . . . . .
CONFIG1 = 0; /* Activer COP */
CONFIG2 = 0x45; /* slow clock for TBM */
ICGMR = 64;
. . . . . .

PORTA=0; eteindre leds,
D=0;


while (1){

COPCTL=5; // pour annuler le rest si inferieur au temps

if(SRSR==0x20) PORTA = 1; //Alumer led verte
. . . .
. . . . . .
. . . . . . .

if(Bouton Poussoir) D=1; //ex : BP c'est a dire PORTB = 1

if(D==1){ for (y = 0 ; y < 0xffff ; y++)
{
PORTA = 2;}//Alumer led rouge
}
}

PORTA = 2; //Alumer les deux leds

} // fin While
}



Donc ce que je fais là, une fois que j'appui sur un bouton poussoir, je met D=1, et par la suite normalement ya un depassement du temps du COP puisuqu'on rentre dans la boucle "For", il ya un RESET generer par COP, (donc le flag COP dans le registre "SRSR" est mise a "1", je le teste et j'allume la led verte) donc normalement apres le RESET ya "D "qui revien a "0", donc au lieu que le programme reprend correctement, il plante et les deux leds sont allumées.


Remarque :

si dans la boucle "FOR", Y est limité a moins de 0XC00, le programme tourne noramle(pas de RESET, ni de blocage meme si je met D a 1) jeme dis que peut etre le COP été rafraichit avant que le temps depasse!!!???

maintenant, si Y est limité à 0xFFF ou plus, le programme se plante et j'ai les deux leds allumées.


je me dis que la raison c'est le fait d'ecrire COPCTL = 5;

la ou COPCTL est à l'adresse 0xFFFF, est donc il n'est pas accessible en ecriture(il est dansune zone protégée).

comment faire pour le rediriger vers la RAM par exemple? ou un autre sollution...?


merci beaucoup de votre réponse, aide, orientation, conseil.

Posté le : 14/09/2006 18:27
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Pilier de la communauté
Inscrit:
27/09/2005 14:27
De Toulouse
Messages: 898
Hors Ligne
Je ne vois pas ce que tu veux faire avec ton soft mais si tu veux eviter un reset par watchdog, il faut ecrire dans $FFFF
en C et avec CW ca donne ca:
__RESET_WATCHDOG();

dans ton soft, il ne fait que planter par watchdog ou alors j'ai rien compris à ton test et à ce que tu veux faire

Posté le : 14/09/2006 22:23
Ce n'est pas parce que les choses sont difficiles qu'il ne faut pas oser, c'est parce que l'on n'ose pas que les choses sont difficiles.
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Régulier
Inscrit:
05/07/2006 17:03
Messages: 64
Hors Ligne
bonjour,

Au fait je veux tester si le chien de garde fonctionne correctement(ma vraie application est une communication serie par le Bus Lin entre deux microcontrolleurs + chaque microcontrolleur fait une gestion de ses entrées/sorties).

Sur le petit exemple just en haut, j'ai ecrit just la partie pour tester le COP.

peut etre c'est moi qui a rien compris au COP, mais je vous rexplique ce que je pense :

Le chien de garde genere un RESET à chaque depassement du compteur a proprié(qui se traduit par une durée determinée, s'ajoute a cela le bit COPRS, pour augmenter ou diminuer cette durée).

Donc pour produire ce RESET j'utilise une boucle :
for (y = 0 ; y < 0xffff ; y++)

Mais le programme ne rentre pas dans cette boucle saufe si D=1.( Atrement dit ya pas de RESET par COP si D est different de 1).

la variable D est initialisé dans le "Main" à D = 0; et elle passe à '1' si j'appui sur le bouton poussoir(ou si j'envois une donnée par clavier par exmple...),

Donc si D passe à 1, le programme execute la boucle FOR, est donc genere un RESET.

Apres ce RESET, le programme redemare et la variable "D" va etre reinitialiser à '0'. donc le COP(chien de garde)ne va pas generer un RESET une deuxième fois saufe si j'appui une deuxieme fois sur le bouton poussoir.

si je j'appui pas sur le bouton(D=0), le registre SRSR montre par un flag positioné a '1'(dedié au COP) la source qui a generer le dernier RESET.

je test le resgistre SRSR pour savoir si il ya eu un RESET generer par le COP(j'allume led verte). normalement le falg se remet à '0' par une simple lecture du registre A=SRSR.

je note que mon programme sans le test du chien de garde marche correctement.


. . .
. . . . . .
interrupt void TBM_ISR(){...}; // juste pour dire que mon lication utilise des interruptions
interrupt void TIMAOF_ISR(){...};


Main{

. . .
. . . . . .
CONFIG1 = 0; /* Activer COP */
CONFIG2 = 0x45; /* slow clock for TBM */
ICGMR = 64;
. . . . . .

PORTA=0; eteindre leds,
D=0;


while (1){

COPCTL=5; // pour annuler le rest si inferieur au temps

if(SRSR==0x20) PORTA = 1; //Alumer led verte
A=SRSR;
. . . .
. . . . . . // d'autre instructions concernant mon application
. . . . . . .

if(Bouton Poussoir) D=1; //ex : BP c'est a dire PORTB = 1

if(D==1){ for (y = 0 ; y < 0xffff ; y++)
{
PORTA = 2;}//Alumer led rouge
}
}

PORTA = 3; //Alumer les deux leds

} // fin While
}


MERCI de votre aide

Posté le : 15/09/2006 11:32
Transférer la contribution vers d'autres applications Transférer


Re: Chien de garde
Régulier
Inscrit:
05/07/2006 17:03
Messages: 64
Hors Ligne
j'atache ici les registres

Posté le : 15/09/2006 11:35
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant
(1) 2 3 4 ... 6 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Chien de garde [Forums - HC908 et S08]