Séquencement avec timer et module(s) sous IT [Forums - HC908 et S08]
Séquencement avec timer et module(s) sous IT [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 ... 12 »


Séquencement avec timer et module(s) sous IT
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 541
Hors Ligne
Bonjour à tous,

Vous savez, depuis que j'ai appris avec vous le principe de fonctionnement de séquenceur et des routines sous IT, le flou a repris le dessus.


Admettons que j'ai le module RTC programmé en guise de séquenceur pour des tâches toutes les Xms, dans le principe du séquenceur de Stéphane.
Egalement (mais ce n'est pas le cas aujourd'hui), considérons le module I²C programmé sous IT, et dans mon cas, gérant le LCD et une mémoire EEPROM.
Donc il est intéressant de se dire qu'à chaque fois que le module I²C envoi ou reçoit un octet, je vais pouvoir retourner dans mon séquenceur afin de continuer dans le programme principal et ce jusqu'à la prochaine interruption I²C...

Je n'arrive pas à comprendre la chose suivante :

1°) Dans le séquenceur, j'envoie un 1er octet via le module I²C.
2°) Pendant ce temps, je suis retourné dans mon programme principal afin de traiter X lignes de codes...
3°) Hop ! L'interruption I²C survient, indiquant que le 1er octet a été envoyé.
4°) Je quitte le programme principal à nouveau et je me retrouve dans l'IT I²C.
5°) Et la, je suis perdu ... comment le PC retrouve l'endroit du programme afin d'envoyer un 2eme octet ?

Comment le PC arrive t'il à s'y retrouver dans tout ça ?
Peut-il y avoir conflit d'IT ?

Je pensais a sauver le PC dans un pointeur pour l'adresse ...

Merci d'avance pour vos éclaircissements.

Bon après midi

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


Re: Séquencement avec timer et module(s) sous IT
Administrateur
Inscrit:
24/09/2005 12:24
Messages: 290
Hors Ligne
Salut

Quand le µc part sous it il gère tout seul l'enregistrement du µC et autre pour revenir là où il en était une fois l'it terminée.


Pour ton I2C tu peux par exemple remplir un buffer avec les X octets a envoyer sur l'i2C et les Y a recevoir. tu lance le premier sous It
a réception de l'it tu envoi le suivant, puis celui d’après... jusqu'à arriver au dernier et là l'it met à 1 un flag qui dit ComI2C_terminee= 1.

Dans le séquenceur (ou boucle principale puisque le séquenceur n'apporte pas grand chose dans ce cas précis) tu te contente de regarder si ComI2C_terminee== 1. Si oui alors tu traites les données et tu relances un cycle.




Posté le : 27/05/2016 15:04
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: Séquencement avec timer et module(s) sous IT
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 541
Hors Ligne
Mmmmmm intéressant donc si c'est géré tout seul.

Je potasserai donc les registres I²C ce soir pour voir les flags en question.

Merci David c'est plus clair !

Posté le : 27/05/2016 16:23
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Séquencement avec timer et module(s) sous IT
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1929
Hors Ligne
c'est un mécanisme "fait pour " on va dire.

Une fois que tu as activé ton it et qu'elle déclenche tu n'as qu'une seule chose à faire dedans : effacer le flag de l'it dans le registre correspondant sinon tu reviens dans l'it dèes que tu en sors.


le flag dont je parle au dessus "ComI2C_terminee= 1" c'est une variable globale à toi pour savoir quand ton cycle sous it.
en gros tu prépares dans un tableau ou une trusture tout ce que tu as a envoyer et alors tu configure ton I2C et ses It et hop, à chaque octet envoyé, ça passe dans l'it qui lance l'octet suivant etc. Pendant tout ce temps ton application principale ne s'en inquiète pas, elle ne fait que regarder si ComI2C_terminee passe à 1, ce que tu auras demandé à l'it de faire quand le dernier envoi sera terminé.



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


Re: Séquencement avec timer et module(s) sous IT
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 541
Hors Ligne
Ok je comprend.

Alors le souci c'est mes données à envoyer ne sont pas dans un tableau.

Est-ce que ça marche avec une fonction ?

Par exemple j'ai la fonction init_LCD() et qui contient tout un tas d'instructions I2C ...

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


Re: Séquencement avec timer et module(s) sous IT
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1929
Hors Ligne
une fonction ne contient pas de données...

Faut voir les it comme un outil a part entière

dans un schéma sans it tu vas faire tout un tas de choses en boucle ou à la suite avec des étapes ou tu vas attendre que le module (I2C ici) finisse son travail. C'est du temps perdu et si tout ce travail est long c'est autant de temps où tu te bloques sans faire le reste.
Ça donne un truc du genre ;
pour i allant de 0 a 90 {
envoyer l'octet buffer[i];
attendre la fin de l'envoi ;
récupérer la réponse et faire quelquechose ;
}

En activant les it, par exemple "it_OctetEnvoye" il faudra imaginer une autre architecture.
Pour reprendre le même exemple tu vas faire :
VarGlobale_OctetEnCours = 0
Envoyer avec I2C l'octet buffer[0];
et hop tu rends la main au reste de l'application....

Dans la fonction it ca fera
it_OctetEnvoye(void){

si VarGlobale_OctetEnCours == TOUT_ENVOYE {
stopper l'I2C;
ComI2C_terminee= 1 ; // je signale à la boucle principale ou au séquenceur que l'envoi sous it est terminé
}
sinon{
Envoyer l'octet buffer[VarGlobale_OctetEnCours++] ; //le ++ signifie que la variable est incrémentée
}

effacement du flag d'it dans le registre qui va bien;
}

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


Re: Séquencement avec timer et module(s) sous IT
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1163
Hors Ligne
Remplir un buffer avec toutes tes données à envoyer. La fonciton I²C va envoyer le premier octet et lorsque le flag qui dit que le module est à nouveau disponible alors il enverra le 2e octet, etc... tout se passe sous IT donc pendant ce temps tu fais autre chose..

Depuis le séquenceur de tache, la seule fonction c'est EnvoieSurI²C (tableau de donnée). et tu ne t'occupes plus du reste. La routine IT se chargera de prendre octet par octer jusqu'à la fin (détection caractère NULL)

Posté le : 27/05/2016 20:47
Transférer la contribution vers d'autres applications Transférer


Re: Séquencement avec timer et module(s) sous IT
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 541
Hors Ligne
Ok.

Donc si j'ai bien compris, il faut que je reprenne tout mon code I2C mais en alimentant un tableau.
Et si j'ai encore bien suivi, il faut que j'incremente moi-même au fur et à mesure ce tableau dans l'it ?
Et également, dans l'it, je gère les start, stop, ACK etc ...?

Posté le : 27/05/2016 21:41
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Séquencement avec timer et module(s) sous IT
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1163
Hors Ligne
voila
I2C, SPI, RS232, aux détails près des spécificités de protocole, le principe de gestion logicielle est le même...
On alimente un tableau avec les données, et le soft se charge ensuite de piocher et incrémenter l'octet à envoyer sous IT.

Steph

Posté le : 28/05/2016 13:57
Transférer la contribution vers d'autres applications Transférer


Re: Séquencement avec timer et module(s) sous IT
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1929
Hors Ligne
Il reste normalement très peu de choses à faire dans l'it,

for x to y
while(qq chose)
tous ces trucs longs ou qui attendent quelquechose sont "interdits", si tu arrives à quelquechose où tu as à rester dans l'it plus que quelques cycles c'est que tu n'as pas terminé de te fumer les neuronnes...

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



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



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

Séquencement avec timer et module(s) sous IT [Forums - HC908 et S08]