[Programmation] Timer one-shot NodeMCU ESP12 en C (IDE Arduino)
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Timer one-shot NodeMCU ESP12 en C (IDE Arduino)



  1. #1
    JeanR40

    Timer one-shot NodeMCU ESP12 en C (IDE Arduino)


    ------

    Bonjour

    donc c'est cette bestiole là https://fr.wikipedia.org/wiki/ESP8266 dans l'implémentation ESP12 LoLin (très proche de la Sislab présenté sur wikipédia il n'y a que le convertisseur usb-rs232 qui change).

    Je cherche et point ne trouve : sur une commande venant de la liaison série ou du wifi, je voudrait générer sur une pin de sortie une impulsion calibrée et ajustable; disons pour fixer les idées 100 ms +- 5ms.

    Le temps de réaction dépendra bien sur du temps de détection de l'événement et du temps de boucle principale. Mais une fois détecté et lancé pof il me faut mes 100 ms.

    Alors je dirais à priori non interruptible. Mais non car à coté j'ai du comptage rapide à faire; des impulsions de quelques ms. Faudrait pas en perdre. Et puis aussi un clavier que je voudrais bien faire réagir avec une interruption car 0.1 secondes de retard sur une touche c'est limite; ça va encore mais 0.2 ça ne va plus trop.

    Mais bon si mes 100 ms sont allongées de 10% parce que on a traité des interruptions ça ira. Si le clavier ne fonctionne pas sur interruption tant pis. Priorité au comptage, puis au timer.

    Si vous avez des suggestions, une piste, ... tout est bienvenu.

    Je code avec l'IDE Arduino en C. LUA et Python non merci.

    -----

  2. #2
    antek

    Re : Timer one-shot NodeMCU ESP12 en C (IDE Arduino)

    Quelle est la question, le programme pour réaliser un créneau 100 ms ?

    Arduino n'est pas du C.

  3. #3
    JeanR40

    Re : Timer one-shot NodeMCU ESP12 en C (IDE Arduino)

    Citation Envoyé par antek Voir le message
    Quelle est la question, le programme pour réaliser un créneau 100 ms ?
    Oui, ou une piste de comment coder une impulsion calibrée interruptible

    Citation Envoyé par antek Voir le message
    Arduino n'est pas du C.
    Oui pardon pour cet abus de language. Les concepteurs l'ont baptisé "Arduino language". Mais c'est basé sur du C , c'est à dire que c'est une surcouche rajoutée à du C. Des instructions en plus quoi.
    Car les Arduino sont propulsés par des Atmel AVR qui se programme généralement en C (excepté si la performance est primordiale, auquel cas il faut recourir à l'assembleur). Bien sûr n'importe quel langage capable de générer du code machine Atmel AVR aurait fait l'affaire mais le C est reconnu (sur toutes les plateformes) pour produire à la compilation un excellent code objet. Et les concepteurs de l'Arduino ne se sont pas privés d'utiliser en grande partie la libc écrite pour les Atmel AVR pour écrire leur "Arduino language". Donc pour moi si ce n'est pas du C c'est un rejeton.

  4. #4
    antek

    Re : Timer one-shot NodeMCU ESP12 en C (IDE Arduino)

    Y'a pas à tortiller du fion, ou bien c'est du C ou bien ce n'en est pas.

    Pour le créneau y'a plusieurs solutions.
    Par exemple :
    - réception du signal -> décodage -> il faut générer une impulsion
    - paramétrage et lancement d'un timer
    - paramétrage d'une interruption sur le contenu du timer
    - sortie mise à 1
    - interruption -> sortie mise à 0

    Je ne connais pas les AVR mais c'est un principe valable pour tous les µC.

  5. A voir en vidéo sur Futura
  6. #5
    JeanR40

    Re : Timer one-shot NodeMCU ESP12 en C (IDE Arduino)

    Citation Envoyé par antek Voir le message
    Y'a pas à tortiller du fion, ou bien c'est du C ou bien ce n'en est pas.
    Je ne tortille pas comme tu le dit vulgairement du fion. Si tu m'avais lu tu aurais vu que je reconnais avoir fait un abus de langage et que alors j'explique pourquoi.
    Même wikipedia fait le même abus: si tu t'étais donné la peine là encore de lire mon lien tu aurais vu :
    Programmation
    L’ESP8266 peut se programmer de plusieurs façons :

    Avec des scripts Lua, interprétés ou compilés, avec le firmware NodeMCU
    En C, avec l’IDE Arduino
    En JavaScript, avec le firmware Espruino
    En MicroPython, avec le firmware MicroPython
    En C, avec le SDK d’Espressif
    En C, avec le SDK esp-open-sdk3 basé sur la chaîne de compilation GCC
    Citation Envoyé par antek Voir le message
    Pour le créneau y'a plusieurs solutions.
    Par exemple :
    - réception du signal -> décodage -> il faut générer une impulsion
    - paramétrage et lancement d'un timer
    - paramétrage d'une interruption sur le contenu du timer
    - sortie mise à 1
    - interruption -> sortie mise à 0

    Je ne connais pas les AVR mais c'est un principe valable pour tous les µC.
    Dans mon cas il ne s'agit pas pas d'un Amtel AVR (qui équipe les Arduino) mais d'un Tensilica Xtensa LX106 à 80 MHz qui équipe les ESP8266 ESP12.
    Et c'est là le problème d'ailleurs c'est que la doc pour ces bestioles quand on veut les programmer en Arduino langage est très pauvre.
    Et oui je me doute bien qu'il faut procéder avec un timer. Mais je te dis merci car tu m'as obligé à regarder de plus près ce que j'avais déjà trouvé et expérimenté.
    En effet là http://www.switchdoc.com/2015/10/iot...l-arduino-ide/ j'avais trouvé un exemple de timer répétitif. J'avais testé cela fonctionne mais timer cyclique.
    Dans les comments l'auteur donne la solution pour un one_shot_timer : il suffit de mettre à false le dernier paramétre de os_timer_arm()
    void os_timer_arm(
    os_timer_t *pTimer,
    uint32_t milliseconds,
    bool repeat)

    Arm a timer such that is starts ticking and fires when the clock reaches zero.

    The pTimer parameter is a pointed to a timer control structure.
    The milliseconds parameter is the duration of the timer measured in milliseconds. The repeat parameter is whether or not the timer will restart once it has reached zero.
    C'est très langage C cette fonction os_timer_arm() et c'est normal car le
    extern "C" {
    #include "user_interface.h"
    }
    veut dire que l'on inclus dans le programme Arduino language une bibliothèque externe écrite en pur langage C.
    J'essayerais ça demain et cela devrait résoudre mon problème.
    Dernière modification par JeanR40 ; 28/10/2016 à 21h11.

  7. #6
    antek

    Re : Timer one-shot NodeMCU ESP12 en C (IDE Arduino)

    Citation Envoyé par JeanR40 Voir le message
    Je ne tortille pas comme tu le dit vulgairement du fion. Si tu m'avais lu tu aurais vu que je reconnais avoir fait un abus de langage et que alors j'explique pourquoi.
    Même wikipedia fait le même abus: si tu t'étais donné la peine là encore de lire mon lien tu aurais vu . . .
    On trouve aussi des conneries sur Wiki.

Discussions similaires

  1. Effet sling-shot?
    Par MisterH dans le forum Archives
    Réponses: 2
    Dernier message: 16/04/2016, 17h32
  2. arduino mega 2560 "Timer"
    Par Zardoua93 dans le forum Électronique
    Réponses: 11
    Dernier message: 16/05/2015, 20h55
  3. Programmation en C avec Timer 0 et Timer 1
    Par invite6844fe5f dans le forum Électronique
    Réponses: 43
    Dernier message: 20/04/2010, 13h27
  4. [Divers] Canon P Shot A60
    Par delagui dans le forum Dépannage
    Réponses: 5
    Dernier message: 29/05/2008, 20h25
Découvrez nos comparatifs produits sur l'informatique et les technologies.