Utilisation MTIM * nb de boucle [Forums - HC908 et S08]
Utilisation MTIM * nb de boucle [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 »


Re: Utilisation MTIM * nb de boucle
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 535
Hors Ligne
Attends je te sort mes fonctions. Bon excuses tout n'est pas bien épuré c'est encore du brouillon.

Fonction appelante timer à partir de ISR I2C :

void I2C_dly1msU8(void)
{
    
//U8 u8I2C_MTIM_val;
    
I2C_timer_ready 0;                        // Timer MTIM busy
    
MTIM0_CLK 0x08;                            /* Clock : bus clock + div 256 */
    
MTIM0_MOD 76;            //78
    
MTIM0_SC_TOIE 1;
    
//SYNC = !SYNC;
    
MTIM0_SC_TSTP 0;                            /* Counter started */
}


Fonction dans l'it MTIM :

interrupt VectorNumber_Vmtim0 void MTIM (void)
{
    
U8 read_MTIM0_SC;
    
    
read_MTIM0_SC MTIM0_SC;
    
MTIM0_SC_TOF 0;
    
MTIM0_SC_TOIE 0;
    
MTIM0_SC_TSTP 1;                            /* Counter stopped */
    
MTIM0_SC_TRST 1;                            /* Counter cleared */
    
    //SYNC = !SYNC;
    
    /* If "sta" as start is detected in de buffer ... */
    
if(I2C_buffer[I2C_byte_ctn] == 's' && I2C_buffer[I2C_byte_ctn+1] == 't' && I2C_buffer[I2C_byte_ctn+2] == 'a')
    {
        
I2C_START();                            // Send a Start condition
        
I2C_byte_ctn I2C_byte_ctn 3;        // and run pointer for next data
    
}
    
    if(
u8I2C_MTIM_val >= I2C_MTIM_nb_loop)
    {
        
I2C_dly1msU8();
        
I2C_MTIM_nb_loop++;
        
I2C_timer_ready 0;                        // Timer MTIM busy
    
}
    else
    {
    
I2C_D I2C_buffer[I2C_byte_ctn];            // Send a I2C byte of buffer    
    
I2C_byte_ctn++;    
    
I2C_timer_ready 1;                        // Timer MTIM ready
    
}
}


u8I2C_MTIM_val est une variable globale et qui récupère la valeur de Xms de mon buffer. Etant donné que mon ISR I2C et TIMER comportent un certain nombre de tests ou condition, en fonction qu'elles soient vraies ou fausse, c'est obligé selon moi que la durée totale de mon timing soit faussée non ?

Posté le : 17/06/2016 14:56
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1924
Hors Ligne
a oui tu as du monde là dedans.

Si le manque de précision te pose soucis (ce qui serait surprenant sue une com, tu peux
>>soit diminuer tes tempos timer d'une valeur constante déterminée en fonction du temps d'execution de ton code qui est entre l’arrêt du timer et sa réinitialisation
>>soit ne pas arrêter le timer (juste son it) et au moment ou tu réinitialises le timer pour une nouvelle tempo tu diminues le modulo de la valeur actuelle du timer (qui a mesuré le temps passé dans l'it)

mais ce serait bien s’embêter pour rien ; la précision tu t'en moques, l’intérêt de la tempo sous it c'est de te libérer.

Posté le : 17/06/2016 18:01
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1162
Hors Ligne
un moyen pour diagnostiquer, c'est effectivement de mesurer le temps passé dans ta seconde IT et de mesurer le temps max de ton IT timer quand elle est trop longue. Si c'est également à la somme des deux c'est effectivement une IT dans l'IT qui vient semer le bronx. Un moyen peut être dès que tu rentres dans ton IT timer d'interdire l'IT I2C ! Ainsi tu gardes la priorité au timer et l'I2C on s'en fout un peu si ça décale de 1ms !

Posté le : 17/06/2016 18:49
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 535
Hors Ligne
Salut les gars !

Bon finalement, je m'en tire bien avec la RTC pour les 200ms à l'init, puis avec le MTIM pour les 2 autres tempos. Du coup, ma RTC est libre pour ce que je veux faire.

Donc l'init du LCD c'est nikel, j'écris des choses etc ... Le tout avec les it sauf que maintenant, je galère à remplir mon buffer en adaptant mon code existant ... Bref une vraie galère ce truc.

Posté le : 19/06/2016 13:50
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1162
Hors Ligne
pourquoi fais tu une tempo avec un timer, et une autre avec un autre ? Pas plus simple d'utiliser le même ?

Posté le : 19/06/2016 14:12
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 535
Hors Ligne
Comme je le disais plus haut, il est maladroit pour moi de faire 200ms avec le MTIM qui ne peux faire qu'environ 3ms max, et donc, m'oblige de passer plusieurs fois dans l'ISR afin s'atteindre les 200ms. Et c'est ce qui me faussait tout.

Du coup je me sert de :

- RTC pour les 200ms en une seule IT (ce n'est que pour l'init LCD)
- MTIM pour 30µs et 2ms pour le reste des opérations (en fait j'aurais eu besoin de 1ms aussi, mais on s'en fou si c'est 2ms)

Avec ça, j'ai les tempos nécessaires pour mon LCD.

Posté le : 19/06/2016 14:49
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1162
Hors Ligne
il est courant d'avoir une IT qui claque régulièrement et de compter le nombre d'IT pour faire des pauses plus longues... Autrement comment ferais tu une pause de 10s ou d'une minute ?
Mon séquenceur de tâche fonctionne comme ça et il n'y a aucune perte de précision puisque c'est matériel. Si tu précharges ton timer avec une valeur calculée pour tes 1ms, alors tu peux le paramétrer pour qu'il se recharge tout seul à l'overflow. L'IT déclenché te permet juste d'incrémenter un compteur, mais c'est le timer matériel qui lui est très précis qui donne le tempo
je ne sais pas si c'est clair... ?

Posté le : 19/06/2016 17:32
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 535
Hors Ligne
Oui c'est très clair. Le probleme c'est que j'ai beaucoup de condition dans mon it MTIM, et c'est ça qui me faussait ma tempo totale en fonction du nombre de tof.
Je présume.

Là au moins je traite la tempo avec une seule IT. Mais avec 2 timer du coup

Posté le : 19/06/2016 20:03
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1924
Hors Ligne
Comme je te l'expliquais l'autre jour la SEULE chose qui peut expliquer une imprécision "perceptible" c'est le fait que tu stoppes le timer au début de l'it avant de le relancer avant de sortir de l'it.
MTIM0_SC_TSTP 1;                            /* Counter stopped */
MTIM0_SC_TRST 1;                            /* Counter cleared */



Le timer est dit "free running", c'est à dire que si tu ne le stoppes pas il continuera à compter pendant que tu fais ta cuisine dans l'it et le overflow d'aprés tu seras pile à l'heure, quelques soit le temps que tu as passé dans l'it précédente.

Posté le : 19/06/2016 20:08
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Utilisation MTIM * nb de boucle
Accro
Inscrit:
06/07/2007 09:17
Messages: 695
Hors Ligne
Je suis d'accord avec Charly.
Laisse le MTIM tourné, car il va garder sa base temporelle.
Si tu le stop et restart, alors ca va finir comme dans Interstelar... 1h = 10 ans :p

Posté le : 20/06/2016 08:18
Transférer la contribution vers d'autres applications Transférer



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



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

Utilisation MTIM * nb de boucle [Forums - HC908 et S08]