Salut à tous, j'aimerais lire un signal carré numérique venant d'un circuit imprimé connecté au Raspberry pi 4. Je me demande si c'est possible car la fonction digitalRead(pin) retourne soit 0 soit 1. S'il-vous-plaît J'ai besoin d'aide
Salut à tous, j'aimerais lire un signal carré numérique venant d'un circuit imprimé connecté au Raspberry pi 4. Je me demande si c'est possible car la fonction digitalRead(pin) retourne soit 0 soit 1. S'il-vous-plaît J'ai besoin d'aide
Bonjour,
Sans expérience, je dirai qu'en lisant régulièrement le pin, vous allez voir les changements de valeur. Par contre, cela ne sera pas très précis, pour détecter quand le changement arrive.
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Bonsoir,
S'il s'agit de mesurer la fréquence du signal, classiquement, soit on compte le nombre de fronts (montants ou descendants) du signal pendant une période donnée, soit on mesure la durée entre deux fronts du signal.
On choisit l'une ou l'autre selon la fréquence du signal à mesurer et la précision souhaitée.
Arduino, Raspberry Pi, ESP32, Infineon/Cypress PSoC, FPGA...
Arduino : Le forum, Le manuel de laboratoire, les Quiz, les cahiers pratiques, les sources et outils
- Des capteurs connectés pour la maison avec Arduino et Raspberry Pi. Et en Zigbee ?
- Une première expérience LoRaWAN [Nouveau]
- FPGA : programmation d'un transmetteur UART en SystemVerilog
- Apprendre à développer sur FPGA avec Intel Quartus Prime
- FPGA : programmer un contrôleur pour écran VGA
[Nouveau] Vous voulez soutenir le Club Developpez.com ? Abonnez-vous !
J'ai essayé de calculer le temps entre deux changements d'états de manière classique comme dans le code ci-dessous, mais vu que le traitement sur Raspberry pi est multitache ce programme n'est pas optimal. S'il vous plaît comment transformer ce programme en utilisant les interruptions ?
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include <stdio.h> #include <wiringPi.h> #include <time.h> #define BTN_MRC2 7 #define BTN_MRC1 21 clock_t t1 = 0, t2 = 0; void setup() { pinMode(BTN_MRC1, INPUT); pinMode(BTN_MRC2, INPUT); t1 = clock(); } void calculeDureeEntre2Fronts() { int btn; //valeur du bouton btn = digitalRead(BTN_MRC1); // for(int i=0;i<100;i++) // { if (btn == 1) //si un etat haut est detecte { while (btn == 1) //tant qu'on detecte un etat haut { printf("Etat haut = %d ", btn); btn = digitalRead(BTN_MRC1); t2 = clock(); } } else if(btn == 0) { while (btn == 0) //tant qu'on detecte un etat bas { printf("Etat bas= %d ", btn); btn = digitalRead(BTN_MRC1); t2 = clock(); } } //} printf("nombre de secondes = %f ", (float)(t2 - t1) / CLOCKS_PER_SEC); } int main(int argc, char ** argv) { wiringPiSetup(); setup(); calculeDureeEntre2Fronts(); return 0; }
Comme tu utilises Wiring PiPriority, Interrupts and Threads
La fonction wiringPiISR() devrait répondre à ton besoin.
Arduino, Raspberry Pi, ESP32, Infineon/Cypress PSoC, FPGA...
Arduino : Le forum, Le manuel de laboratoire, les Quiz, les cahiers pratiques, les sources et outils
- Des capteurs connectés pour la maison avec Arduino et Raspberry Pi. Et en Zigbee ?
- Une première expérience LoRaWAN [Nouveau]
- FPGA : programmation d'un transmetteur UART en SystemVerilog
- Apprendre à développer sur FPGA avec Intel Quartus Prime
- FPGA : programmer un contrôleur pour écran VGA
[Nouveau] Vous voulez soutenir le Club Developpez.com ? Abonnez-vous !
Partager