Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des problèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Menu principal

Petite question Pico Pi

Démarré par André Zola, Février 13, 2024, 04:06:20 PM

« précédent - suivant »

André Zola

J'ai bricolé sur de nombreux nouveaux microprocesseurs et de nombreux EDI. En final je me suis calé sur le Pico Pi que je développe sous EDI Arduino en C ou C++ (Je sais, ce n'est pas le meilleur choix, mais c'est pratique pour l'accès à la documentation).
J'ai toutefois une question de syntaxe, pour laquelle, je ne trouve pas de réponse.
Pour les besoins d'un encodeur rotatif, je veux travailler sous interruption. J'ai fini par découvrir que toutes les entrées:sorties tout ou rien pouvaient recevoir des demandes d'interruption. Par contre, impossible de trouver pour le C/C++ les commandes de création, activation ... des interruptions. Il y a plein d'explications et définitions sur internet pour python, mais rien pour le C/C++.
C'est d'autant plus frustrant que c'est largement documenté pour l'arduino.
Si quelqu'un à une info, je serai ravi.
Merci d'avance.

André Zola

papyblue

Bonjour André,
Vous pouvez peut-être vous inspirer de cette vidéo :
https://www.youtube.com/watch?v=Di16pOgiAv0

André Zola

Merci beaucoup, Je vais digérer cette vidée (lentement car elle est en anglais) mais le titre me laisse supposer que je vais y trouver tout ce que je cherche. (Heureusement, le langage informatique est universel, quelle que soit la langue. C'est sur les commentaires de l'auteur que je vais devoir me concentrer).
Merci encore et cordialement.

André Zola.

loulou31

Bonjour,

Si vous n'êtes pas familier avec l'anglais sur YT on  peut afficher les sous titres en anglais ou même traduits en français.

Jean-Louis

André Zola

Bonjour,
Merci à Jean-Louis, j'utilise régulièrement youtube pour des vidéos techniques. Vous me faites découvrir à l'instant qu'on peut forcer les sous titres en Français !!!! Ça m'ouvre tout un panel de possibilités.
Merci encore aussi à PapyBlue j'ai commencé à regarder la vidée qu'il m'a indiqué (avec donc une traduction par sous-titres, très correcte). C'est exactement ce dont j'avais besoin.

loulou31

Bonjour,
Moi je met généralement les sous titres en anglais car la traduction technique n'est pas toujours très compréhensible...mais je comprends que le français est plus facile a lire même si tes mots techniques sont parfois un peu "saccagés".


Jean-Louis

papyblue

Bonsoir à tous,
J'ai posé la question à mon nouvel ami, il est vraiment super ! On peut tout lui demander et même quand on est insistant il ne se fache jamais. En plus quand on lui remonte les erreurs du compilateur, il corrige le code !
Alors je me suis demandé ce qu'il aurait répondu à André ?

Voilà :
User
bonjour
ChatGPT
Bonjour! Comment puis-je vous aider aujourd'hui?

User
peux-tu expliquer comment coder des interruptions sur un rapsberry pi pico
ChatGPT
Bien sûr! Sur le Raspberry Pi Pico, les interruptions peuvent être utilisées pour détecter des événements externes, tels que des changements d'état sur des broches GPIO (General Purpose Input/Output). Voici un exemple de code en Micropython pour configurer une interruption sur une broche spécifique :

python
Copy code
import machine

# Définition de la fonction à appeler lors de l'interruption
def handle_interrupt(pin):
    print("Interruption détectée sur la broche", pin)

# Configuration de la broche GPIO (par exemple, la broche 15)
pin = machine.Pin(15, machine.Pin.IN, machine.Pin.PULL_DOWN)

# Configuration de l'interruption sur la broche avec un déclencheur de front montant
pin.irq(trigger=machine.Pin.IRQ_RISING, handler=handle_interrupt)

# Boucle principale
while True:
    # Le programme continue de s'exécuter, mais la fonction handle_interrupt() sera appelée lorsque l'interruption se produira
    pass
Dans cet exemple :

Nous importons le module machine, qui est utilisé pour accéder aux fonctionnalités matérielles du Raspberry Pi Pico.
Nous définissons une fonction handle_interrupt(pin) qui sera appelée lorsque l'interruption se produit. Cette fonction prend la broche en question comme argument.
Nous configurons une broche GPIO spécifique (dans cet exemple, la broche 15) en tant que broche d'entrée avec une résistance de tirage vers le bas.
Nous configurons l'interruption sur cette broche pour détecter les fronts montants (changement de bas à haut).
Nous bouclons indéfiniment (while True:) pour maintenir le programme en cours d'exécution. La fonction handle_interrupt() sera appelée asynchrone lorsqu'une interruption se produira.
Lorsque le Raspberry Pi Pico détecte un changement de niveau haut sur la broche spécifiée, il déclenche une interruption et appelle la fonction handle_interrupt(), qui dans cet exemple, se contente d'afficher un message. Vous pouvez adapter le contenu de cette fonction pour qu'elle réagisse de la manière qui vous convient le mieux.

User
en language C STP !
ChatGPT
Bien sûr! Voici un exemple de code en langage C pour configurer des interruptions sur un Raspberry Pi Pico :

c
Copy code
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"

// Définition de la fonction à appeler lors de l'interruption
void handle_interrupt() {
    printf("Interruption détectée!\n");
}

int main() {
    stdio_init_all();

    // Configuration de la broche GPIO (par exemple, la broche 15)
    gpio_init(15);
    gpio_set_dir(15, GPIO_IN);
    gpio_pull_down(15); // Activation de la résistance de pull-down

    // Configuration de l'interruption sur la broche avec un déclencheur de front montant
    gpio_set_irq_enabled_with_callback(15, GPIO_IRQ_EDGE_RISE, true, &handle_interrupt);

    // Boucle principale
    while (1) {
        // Le programme continue de s'exécuter, mais la fonction handle_interrupt() sera appelée lorsque l'interruption se produira
        tight_loop_contents();
    }

    return 0;
}
Dans ce code :

Nous incluons les en-têtes nécessaires, notamment <stdio.h> pour les opérations d'entrée/sortie, et les en-têtes Pico pour accéder aux fonctionnalités matérielles.
Nous définissons la fonction handle_interrupt() qui sera appelée lors de l'interruption.
Nous initialisons la sortie standard pour permettre l'affichage des messages.
Nous configurons la broche GPIO spécifique (dans cet exemple, la broche 15) en tant que broche d'entrée avec une résistance de pull-down activée.
Nous activons l'interruption sur cette broche pour détecter les fronts montants (changement de bas à haut) et spécifions la fonction handle_interrupt() comme callback.
Enfin, nous entrons dans une boucle infinie où le programme continue de s'exécuter, attendant les interruptions.
Lorsque le Raspberry Pi Pico détecte un changement de niveau haut sur la broche spécifiée, il déclenche une interruption et appelle la fonction handle_interrupt(), qui dans cet exemple, affiche simplement un message. Vous pouvez adapter le contenu de cette fonction selon vos besoins.

User
quelles broches peuvent être utilisées pour les interruptions ?
ChatGPT
Sur le Raspberry Pi Pico, plusieurs broches peuvent être utilisées pour configurer des interruptions. Cependant, toutes les broches ne prennent pas en charge les interruptions de la même manière. Voici les broches qui peuvent généralement être utilisées pour les interruptions sur le Raspberry Pi Pico, avec quelques considérations :

GPIO 0 à 29 : Ces broches peuvent être utilisées pour les interruptions. Cependant, toutes les broches ne peuvent pas être configurées pour toutes les conditions de déclenchement d'interruption. Par exemple, toutes les broches ne peuvent pas détecter les changements de niveau, montants ou descendants. Assurez-vous de consulter la documentation spécifique à la broche pour connaître ses capacités d'interruption.

GPIO 30 à 39 : Ces broches ne prennent pas en charge les interruptions matérielles directement. Cependant, elles peuvent toujours être utilisées pour des tâches non interruptibles, telles que la génération de signaux PWM (Pulse Width Modulation).

Lorsque vous configurez une interruption sur une broche spécifique, assurez-vous de consulter la documentation technique du Raspberry Pi Pico ainsi que les spécifications de la broche pour comprendre ses capacités d'interruption et ses conditions de déclenchement.

User
peux-tu détailler les paramètres de la fonction gpio_set_irq_enabled_with_callback
ChatGPT
Bien sûr ! La fonction gpio_set_irq_enabled_with_callback() est utilisée pour configurer une interruption sur une broche GPIO spécifique du Raspberry Pi Pico. Voici une explication détaillée de ses paramètres :

c
Copy code
void gpio_set_irq_enabled_with_callback(uint gpio, gpio_irq_level_t level, bool enabled, gpio_irq_callback_t callback);
gpio : Il s'agit du numéro de la broche GPIO sur laquelle vous souhaitez configurer l'interruption. Par exemple, si vous souhaitez configurer l'interruption sur la broche 15, vous passeriez simplement 15 en tant qu'argument.

level : Il s'agit du niveau de déclenchement de l'interruption. Les valeurs possibles sont définies par le type gpio_irq_level_t, qui comprend :

GPIO_IRQ_EDGE_NONE : Aucun déclencheur d'interruption.
GPIO_IRQ_EDGE_FALL : Déclenché sur un front descendant (transition de haut à bas).
GPIO_IRQ_EDGE_RISE : Déclenché sur un front montant (transition de bas à haut).
GPIO_IRQ_EDGE_BOTH : Déclenché sur les deux fronts montants et descendants.
enabled : Un booléen indiquant si l'interruption doit être activée (true) ou désactivée (false).

callback : Il s'agit de la fonction de rappel (callback) qui sera exécutée lorsque l'interruption se produit. La fonction de rappel doit être de type gpio_irq_callback_t. Cette fonction sera appelée chaque fois que l'interruption se produit sur la broche spécifiée.

En utilisant cette fonction avec les bons paramètres, vous pouvez configurer une interruption sur une broche GPIO spécifique avec le niveau de déclenchement souhaité et une fonction de rappel personnalisée.