Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
6248 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  278  279  280  281  282  283
Auteur Sujet :

[arduino] Topic Unique blabla @ Arduino

n°476958
rat de com​bat
attention rongeur méchant!
Posté le 18-10-2025 à 20:16:31  profilanswer
 

Reprise du message précédent :
Tu as regardé le signal avec un scope / analyseur logique? Sigrok sait décoder le I2S de mémoire aussi.

 

Edit: Et plutôt que de brûler du carbone pour de l'"IA", tu as bien lu la doc de ton DAC histoire de savoir comment il "marche"?

 

Edit2: Désolé, j'étais un peu lourd la. :o N'empêche qu'un coup d'oeil dans la doc est important histoire de bien paramétrer une lib existante p.ex.


Message édité par rat de combat le 18-10-2025 à 20:20:59

---------------
Ne laissez pas mourir vos sujets en cours de route!
mood
Publicité
Posté le 18-10-2025 à 20:16:31  profilanswer
 

n°476960
fredo3
Posté le 18-10-2025 à 20:35:06  profilanswer
 

C'est gentil, mais je laisse tomber :jap:
Vais prendre un buzzer [:tinostar]
 
Malheureusement  Waveshare n'a fournit d'exemple de code que pour ESP-IDF en ce qui concerne l'audio.
 
Tiens je vais leur envoyer un message pour qu'il rajoute un exemple Arduino :D, on ne sait jamais :D

n°476984
fredo3
Posté le 19-10-2025 à 11:13:11  profilanswer
 

Ayai, c'est tombé en marcheeee  [:hill]

 

Bon j'ai utilisé ca, avec la bonne définition de pin I2S, I2C, pin d'activation de l'opamp et driver ES8311, que je suis allé chercher sur le projet audio de waveshare pour ESP-IDF.

 

https://github.com/pschatzmann/ardu [...] om-max.ino

 


Bon je mets le code ici avec la bonne def de pin pour ceux qui ont une carte Waveshare ESP32-P4.

Code :
  1. /**
  2. * @brief We define a custom board with the i2c and i2s pins and output_device a sine
  3. * with the help of the AudioTools I2SCodecStream
  4. * @author phil schatzmann
  5. */
  6. #include "AudioBoard.h"
  7. #include "AudioTools.h" // install https://github.com/pschatzmann/arduino-audio-tools
  8. #include <AudioTools/AudioLibs/I2SCodecStream.h>
  9. // I2C
  10. #define SDAPIN               7 // I2C Data,  Adafruit ESP32 S3 3, Sparkfun Thing Plus C 23
  11. #define SCLPIN               8 // I2C Clock, Adafruit ESP32 S3 4, Sparkfun Thing Plus C 22
  12. #define I2CSPEED        100000 // Clock Rate
  13. #define ES8311ADDR        0x18 // Address of ES8311 I2C port
  14. // I2S, your configuration for the ES8388 board
  15. #define MCLKPIN             13 // Master Clock
  16. #define BCLKPIN             12 // Bit Clock
  17. #define WSPIN               10 // Word select
  18. #define DOPIN               9 // This is connected to DI on ES8311 (MISO)
  19. #define DIPIN               11 // This is connected to DO on ES8311 (MOSI)
  20. #define PA_CTRL             53
  21. AudioInfo                     audio_info(44200, 2, 16);                // sampling rate, # channels, bit depth
  22. SineWaveGenerator<int16_t>    sine_wave(32000);                        // amplitude
  23. GeneratedSoundStream<int16_t> sound_stream(sine_wave);                 // sound generator
  24. DriverPins                    my_pins;                                 // board pins
  25. AudioBoard                    audio_board(AudioDriverES8311, my_pins); // audio board
  26. I2SCodecStream                i2s_out_stream(audio_board);             // i2s coded
  27. StreamCopy                    copier(i2s_out_stream, sound_stream);    // stream copy sound generator to i2s codec
  28. TwoWire                       myWire = TwoWire(0);                     // universal I2C interface
  29. void enable_amp() {
  30.   pinMode(PA_CTRL, OUTPUT);
  31.   digitalWrite(PA_CTRL, HIGH);  // Enable amp
  32. }
  33. void setup() {
  34.   // Setup logging
  35.   Serial.begin(115200);
  36.   AudioLogger::instance().begin(Serial, AudioLogger::Warning);
  37.   AudioDriverLogger.begin(Serial,AudioDriverLogLevel::Warning);
  38.   enable_amp();
  39.   delay(2000);
  40.   Serial.println("Setup starting..." );
  41.   Serial.println("I2C pin ..." );
  42.   my_pins.addI2C(PinFunction::CODEC, SCLPIN, SDAPIN, ES8311ADDR, I2CSPEED, myWire);
  43.   Serial.println("I2S pin ..." );
  44.   my_pins.addI2S(PinFunction::CODEC, MCLKPIN, BCLKPIN, WSPIN, DOPIN, DIPIN);
  45.   Serial.println("Pins begin ..." );
  46.   my_pins.begin();
  47.   Serial.println("Board begin ..." );
  48.   audio_board.begin();
  49.   Serial.println("I2S begin ..." );
  50.   auto i2s_config = i2s_out_stream.defaultConfig();
  51.   i2s_config.copyFrom(audio_info); 
  52.   i2s_out_stream.begin(i2s_config); // this should apply I2C and I2S configuration
  53.   // Setup sine wave
  54.   Serial.println("Sine wave begin..." );
  55.   sine_wave.begin(audio_info, N_B4); // 493.88 Hz
  56.   Serial.println("Setup completed ..." );
  57. }
  58. // Arduino loop - copy sound to out
  59. void loop() { copier.copy(); }
 

Reste plus qu'à lui faire lire des MP3.

 

Edit:
C'est bon pour le MP3.

 

Suffit de se baser sur ce code (faut installer un codec mp3 au préalable) et utiliser la classe SD_MMC au lieu de SD (spi):
https://github.com/pschatzmann/ardu [...] p3-i2s.ino

 

Pas terrible l'haut-parleur fourni :D


Message édité par fredo3 le 19-10-2025 à 12:43:02
n°477296
fredo3
Posté le 23-10-2025 à 20:02:16  profilanswer
 

Bonsoir
 
Bon j'ai un bug bizarre, je peux même pas vous donner de code à corriger, je ne sais même pas d'où ca peut venir.
 
En gros:
- Sans wifi et Ethernet, ma tache de rafraîchissement lvgl de l'écran rame
- Wifi allumé et connecté, ma tache de rafraîchissement lvgl de l'écran rame
- Ethernet connecté, ca ne rame pas!
- Ethernet et wifi connecté, ca ne rame pas!
 
Bref, moi pas comprendre  [:daemonovae]  

n°477297
Natopsi
☄️Just end it already!☄️
Posté le 23-10-2025 à 20:07:52  profilanswer
 

Bah t'as une tache quelque part qui est plus prioritaire qui doit faire un truc du genre:
Si Ethernet pas connecté
    Tenter de se connecter avec un certain timeout
Sinon
    Faire quelque chose qui va vite
Fin Si


---------------
ACH/VDSHFRCoin◈1435mm⚡
n°477298
froggycorp
Posté le 23-10-2025 à 20:19:40  profilanswer
 

fredo3 a écrit :

Bonsoir
 
Bon j'ai un bug bizarre, je peux même pas vous donner de code à corriger, je ne sais même pas d'où ca peut venir.
 
En gros:
- Sans wifi et Ethernet, ma tache de rafraîchissement lvgl de l'écran rame
- Wifi allumé et connecté, ma tache de rafraîchissement lvgl de l'écran rame
- Ethernet connecté, ca ne rame pas!
- Ethernet et wifi connecté, ca ne rame pas!
 
Bref, moi pas comprendre  [:daemonovae]  


 
Au pif, en lien avec ton bug précédent sur ta config reseau ? :D

n°477299
fredo3
Posté le 23-10-2025 à 20:27:12  profilanswer
 

J'ai isolé le problème.

 

Dans ma tache lvgl j'ai du code qui met à jour la RTC.

 

Et comme l'Ethernet est configuré comme route par défaut "ETH.setDefault()" la mise à jour de la RTC faisait probablement un timeout.

 

Bref vais faire une tache à part rien que pour actualiser la RTC, comme ca pas de blocage de l'affichage.

 

Désolé du dérangement, je suis chiant avec mes bug :D


Message édité par fredo3 le 23-10-2025 à 20:27:48
n°477412
fredo3
Posté le 26-10-2025 à 14:44:32  profilanswer
 

Rho, je suis à deux doigts de "terminer" mon projet avec les ETA Rex, mais j'ai un bug au niveau LVGL.

 

J'ai déclaré une "callback function" sur un click d'un bouton-image.
Cette fonction est bien implémentée au niveau de mon code, comme pour les autres boutons (qui marchent).
Cette fonction est vide! Il n'y a rien dedans.

 

Pourtant quand j'appuie sur le bouton ca fait planter mon ESP32.

 

J'ai strictement aucune idée du problème, vu que mon code ne semble pas directement en cause, la fonction est vide!

 

C'est le gros bouton vert.
https://rehost.diberie.com/Picture/Get/f/443077


Message édité par fredo3 le 26-10-2025 à 14:51:30
n°477413
rat de com​bat
attention rongeur méchant!
Posté le 26-10-2025 à 15:00:53  profilanswer
 

C'est quoi le prototype de la fonction, elle doit retourner quelque chose?


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°477414
fredo3
Posté le 26-10-2025 à 15:23:03  profilanswer
 

Code :
  1. void cf_BtnRexEnable_Clicked(lv_event_t * e){
  2. }


 
 [:spamafote]  
Incompréhensible.
 
J'ai pensé à un manque de mémoire au niveau de la task associée, mais non, non plus.


Message édité par fredo3 le 26-10-2025 à 15:24:16
mood
Publicité
Posté le 26-10-2025 à 15:23:03  profilanswer
 

n°477415
rat de com​bat
attention rongeur méchant!
Posté le 26-10-2025 à 15:45:17  profilanswer
 

et si tu fous un printf() ou du genre dedans, ça fait quoi?


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°477416
fredo3
Posté le 26-10-2025 à 15:46:56  profilanswer
 

Pareil, ca plante sans imprimer.

 

D'ailleurs avant j'avais du code dedans. Je l'ai enlevé justement pour essayer d'isoler le problème, mais visiblement il est ailleurs.


Message édité par fredo3 le 26-10-2025 à 16:09:20
n°477419
froggycorp
Posté le 26-10-2025 à 16:21:14  profilanswer
 

C'est une interruption ?

 

C'est quoi l'appel de la fonction ? J'aurais envie de dire de la virer et voir si le bouton seul fait planter :D
Une autre fonction avec le même nom ?

Message cité 1 fois
Message édité par froggycorp le 26-10-2025 à 16:22:48
n°477421
rat de com​bat
attention rongeur méchant!
Posté le 26-10-2025 à 16:42:27  profilanswer
 

froggycorp a écrit :

C'est une interruption ?

C'est une fonction callback comme il disait. :o
 
Par contre je me demande si le prototype est bon, si il y a erreur ça peut créer du bazar... Tu as vérifié dans la doc de ta lib?


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°477423
fredo3
Posté le 26-10-2025 à 17:02:33  profilanswer
 

Non non, il est comme les autres:
https://rehost.diberie.com/Picture/Get/f/443111

n°477424
rat de com​bat
attention rongeur méchant!
Posté le 26-10-2025 à 17:06:12  profilanswer
 

En effet, ça semble bon.
 
Tu as testé/vu https://docs.lvgl.io/master/intro/i [...] he-problem ?


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°477429
froggycorp
Posté le 26-10-2025 à 18:06:41  profilanswer
 

rat de combat a écrit :

C'est une fonction callback comme il disait. :o

 

Par contre je me demande si le prototype est bon, si il y a erreur ça peut créer du bazar... Tu as vérifié dans la doc de ta lib?

 

Je lis pas  :o

 

Si c'est un ESP32, en UART doit y avoir un calltrace, faut l'utilitaire pour le lire mais ca peut tetre aider

Message cité 1 fois
Message édité par froggycorp le 26-10-2025 à 18:09:27
n°477430
fredo3
Posté le 26-10-2025 à 18:17:20  profilanswer
 

froggycorp a écrit :


 
Je lis pas  :o  
 
Si c'est un ESP32, en UART doit y avoir un calltrace, faut l'utilitaire pour le lire mais ca peut tetre aider


Oui Copilote me dit après analyse du calltrace que:
 

Citation :

What This Suggests
1. A pointer with value 0x40  is being passed into a function, likely as an argument or internal LVGL structure.
This is not a valid heap or static address — it's a corrupted or misused pointer.
 
2. The crash is happening inside lv_timer_handler(), not your callback.
Even with the callback removed, LVGL is still trying to dispatch or render something that involves this bad pointer.
 
3. The image object or its source is likely corrupted.
If  lv_img_set_src() was called with a bad pointer or file path, LVGL may crash during rendering or hit testing.



 
Non, j'ai déjà augmenté la mémoire au max.


Message édité par fredo3 le 26-10-2025 à 18:20:55
n°477431
froggycorp
Posté le 26-10-2025 à 18:39:52  profilanswer
 

plutot qu'une AI utilise le programme associé ? :D (j'ai plus le nom)
Tu peux tracer en amont à cout de printf ou pas ? Voir utiliser un debugger tracer


Message édité par froggycorp le 26-10-2025 à 18:41:51
n°477459
SnowBear
Posté le 27-10-2025 à 08:19:55  profilanswer
 

Truc con et que l'on voit pas toujours : tu appelles bien ta fonction avec la même casse que le nom de la fonction ?  
 
T'as pas oublié une majuscule quelque part ? ^^"

n°477509
fredo3
Posté le 27-10-2025 à 19:37:24  profilanswer
 

J'ai remplacé l'ImageButton par un bouton tout court, ca marche ca au moins.
Dois y avoir un bug avec les ImageButton.

 

Par contre j'ai un autre problème maintenant :D

 

J'ai créé une tache rien que pour collecter les donner de télémétrie. Les données sont envoyées à une Queue pour que les autres taches (exemple celle en charge de l'affichage) puisse accéder aux données.
J'ai fait ça pour enlever tous les appels aux driver au niveau de la tache de rafraîchissement de l'écran pour gagner en fluidité et pour que l'écran reste réactif (parce que ce n'était pas le cas avant).

 

La réactivité est impressionnante maintenant, mais j'ai un lag de 15 secondes entre ce qui se passe sur l'appareil et l'affichage.

 

Bref je ne sais pas trop d'où ca vient. J'imagine que la copie des données pour envoi dans la Queue est trop pénalisante.

 

Bref j'aurais dû prendre un Pi :D


Message édité par fredo3 le 27-10-2025 à 19:41:10
n°477515
rat de com​bat
attention rongeur méchant!
Posté le 27-10-2025 à 21:22:13  profilanswer
 

Une queue c'est un FIFO non? Peut-être le code est fait de manière à ce que le FIFO doit être rempli entièrement avant de sortir des données? Sinon aucune idée, il faudrait plus d'infos mais pas 3000 lignes de code non plus... Difficile ton histoire.


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°477517
fredo3
Posté le 27-10-2025 à 21:45:29  profilanswer
 

J'utilise une queue de profondeur 1 + overwrite (xQueueOverwrite), c'est en principe l'idéale pour avoir toujours des données les plus fraîches possible.
 
Après analyse je crois que c'est tout simplement l'appareil qui est lent à répondre aux requêtes Modbus :/
 
Les données récoltées font ~900bytes, c'est pas la mer à boire non plus.


Message édité par fredo3 le 27-10-2025 à 21:46:31
n°477518
froggycorp
Posté le 27-10-2025 à 21:46:13  profilanswer
 

15s, c'est beaucoup. Tu aurais pas un timer quelque part ?
Tu vois la diff entre l'uart et l'écran ?

Message cité 1 fois
Message édité par froggycorp le 27-10-2025 à 21:46:47
n°477519
fredo3
Posté le 27-10-2025 à 21:48:44  profilanswer
 

froggycorp a écrit :

15s, c'est beaucoup. Tu aurais pas un timer quelque part ?


Non, c'est une task à forte priorité, et boucle sans fin, sans delay.
En optimisant le driver je viens de descendre à 11s, mais c'est toujours trop.
 
En plus le CPU se tourne les pouces.
Bizarre cette histoire.

froggycorp a écrit :


Tu vois la diff entre l'uart et l'écran ?


Comment ca?

Message cité 1 fois
Message édité par fredo3 le 27-10-2025 à 21:50:11
n°477522
froggycorp
Posté le 27-10-2025 à 22:23:17  profilanswer
 

fredo3 a écrit :


Comment ca?


 
Comment tu sais qu'il y a un decalage de 15s ?

n°477523
fredo3
Posté le 27-10-2025 à 22:30:32  profilanswer
 

Ex: print en début de tache de collecte de données et deuxième print à la fin.
 
Sinon il y a des LED sur l'appareil, donc je sais l'état des sorties à tout moment, or l'ecran le montre avec x secondes de decallage.

n°477526
froggycorp
Posté le 27-10-2025 à 22:47:05  profilanswer
 

fredo3 a écrit :

Ex: print en début de tache de collecte de données et deuxième print à la fin.
 
Sinon il y a des LED sur l'appareil, donc je sais l'état des sorties à tout moment, or l'ecran le montre avec x secondes de decallage.


 
Donc c'est la collecte qui prend 15s ? Pas l'affichage de la collecte ?

n°477527
fredo3
Posté le 27-10-2025 à 22:56:23  profilanswer
 

Oui collecte.

 

Mais je trouve ça trop long, surtout pour un  baudrate de 115200.

 

Le struct final avec toutes les données ne pèsent que 900 bytes.


Message édité par fredo3 le 27-10-2025 à 22:56:58
n°477537
crazytiti
http://crazytiti.free.fr/
Posté le 28-10-2025 à 08:22:27  profilanswer
 

Carrément, 900 octets sur un port à 115k à raison de 8bits+ 1 stop ça ne devrait même pas prendre 1/100s :bounce:


---------------
Le PC est une drogue... Téléchargez mes modèles 3D pour que j'ai du filament gratuit :-D https://www.printables.com/fr/@Crazytiti_1456354
n°477539
fredo3
Posté le 28-10-2025 à 08:44:29  profilanswer
 

Ouep.
 
Je vais essayer avec une autre lib modbus.
La modif devrait être rapide.

n°477675
fredo3
Posté le 29-10-2025 à 20:54:29  profilanswer
 

Bon j'ai testé avec cette lib:
https://github.com/emelianov/modbus-esp8266/tree/master

 

Et elle semble bugué, vu que seule la toute première requête passe, les suivantes non même sur un simple sketch tout petit.
Perdu une heure pour rien...

 

Est-ce que mon problème avec ModbusMaster pourrait venir de mon câblage?

 

J'ai 20cm de jumper wires pour l'UART et 10cm de jumper wires non-torsadé pour le RS485.


Message édité par fredo3 le 29-10-2025 à 20:54:48
n°477677
rat de com​bat
attention rongeur méchant!
Posté le 29-10-2025 à 21:09:02  profilanswer
 

Si tu passes par un convertisseur UART-RS485 à pas cher, vérifie déjà celui-la... Tu as un scope?


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°477682
fredo3
Posté le 29-10-2025 à 21:30:15  profilanswer
 

MAX3485

 

Nope, pas de scope.

 

Edit:
Je pense que je vais migrer vers ESP-IDF. Ils ont leur propre lib et apparemment elle est performante.
Ca ne va pas être évident.


Message édité par fredo3 le 30-10-2025 à 08:44:03
n°477712
froggycorp
Posté le 30-10-2025 à 13:18:47  profilanswer
 

Bon, je suis en train de tester un PIC pour une histoire de cout imbattable de ce que j'ai pu voir.
Entre la quasi obligation d'utiliser MPLAB X, la doc (en tout cas sur le PIC16F1508) et les fonctions de base inexistante, c'est vraiment pas ouf. Par contre, il y a un simulateur intégré et ça c'est pas mal (bon fonctionne pas avec mon modèle de PIC pour une raison inconnue)

 

Par exemple, il y a comme pour STM, un code générateur d'initialisation. Cela donne ça pour l'initialisation de la clock :

Code :
  1. void CLOCK_Initialize(void)
  2. {
  3.     OSCCON = (11 << _OSCCON_IRCF_POSN)   // IRCF 1MHz_HF
  4.         | (0 << _OSCCON_SCS_POSN);  // SCS FOSC
  5.     BORCON = (0 << _BORCON_SBOREN_POSN)   // SBOREN disabled
  6.         | (0 << _BORCON_BORFS_POSN);  // BORFS disabled
  7. }
 

C'est pas très propre ...


Message édité par froggycorp le 30-10-2025 à 13:20:04
n°477732
fredo3
Posté le 30-10-2025 à 20:24:13  profilanswer
 

Olala l'ESP-IDF c'est pas pour les débutants  :lol:

 


Bon j'ai réussi à migrer mon driver sur ESP-IDF.
Ben ca tombe à 10s pour rafraîchir les données :/

 

Conclusion c'est le mcu du REX qui est probablement lent :/


Message édité par fredo3 le 30-10-2025 à 21:19:09
n°477874
froggycorp
Posté le 03-11-2025 à 20:00:56  profilanswer
 

bon, ca avance pas mal sur mon PIC16F1509, me reste à implémenter de lI2C en slave et là je capte pas mplab, il me génère un "drivers" mcc mais quand je lis le drivers, j'ai l'impression que le PIC gère quasi rien en I2C.
Ca c'est la gestion d'event :

 
Code :
  1. static void I2C1_EventHandler(void)
  2. {
  3.     PIR1bits.SSP1IF = 0;
  4.     if (0U != SSP1STATbits.P)
  5.     {
  6.         /* Notify that a stop event has occurred */
  7.         I2C1_InterruptHandler(I2C_CLIENT_TRANSFER_EVENT_STOP_BIT_RECEIVED);
  8.     }
  9.     else if ((!SSP1STATbits.D_nA) && (0U != SSP1CON3bits.ACKTIM))
  10.     {
  11.         /* Received I2C address must be read out */
  12.         i2c1Addr = I2C1_ReadByte();
  13.         /* Clear Software Error State */
  14.         i2c1ErrorState = I2C_CLIENT_ERROR_NONE;
  15.         /* Notify that a address match event has occurred */
  16.         if (I2C1_InterruptHandler(I2C_CLIENT_TRANSFER_EVENT_ADDR_MATCH) == true)
  17.         {
  18.             /* Send ACK */
  19.             SSP1CON2bits.ACKDT = 0;
  20.             SSP1CON2bits.ACKEN = 1;
  21.         }
  22.         else
  23.         {
  24.             /* Send NACK */
  25.             SSP1CON2bits.ACKDT = 1;
  26.             SSP1CON2bits.ACKEN = 1;
  27.         }
  28.     }
  29.     else
  30.     {
  31.         /* Host reads from client, client transmits */
  32.         if (0U != SSP1STATbits.R_nW)
  33.         {
  34.             if ((!SSP1STATbits.BF) && (!SSP1CON2bits.ACKSTAT))
  35.             {
  36.                 /* I2C host wants to read. In the callback, client must write to transmit register */
  37.                 if (I2C1_InterruptHandler(I2C_CLIENT_TRANSFER_EVENT_TX_READY) == false)
  38.                 {
  39.                     /* Send NACK */
  40.                     SSP1CON2bits.ACKDT = 1;
  41.                     SSP1CON2bits.ACKEN = 1;
  42.                 }
  43.                 else
  44.                 {
  45.                     /* Send ACK */
  46.                     SSP1CON2bits.ACKDT = 0;
  47.                     SSP1CON2bits.ACKEN = 1;
  48.                 }
  49.             }
  50.         }
  51.         else
  52.         {
  53.             if (0U != SSP1STATbits.BF)
  54.             {
  55.                 /* I2C host wants to write. In the callback, client must read data by calling I2Cx_ReadByte()  */
  56.                 if (I2C1_InterruptHandler(I2C_CLIENT_TRANSFER_EVENT_RX_READY) == true)
  57.                 {
  58.                     /* Send ACK */
  59.                     SSP1CON2bits.ACKDT = 0;
  60.                     SSP1CON2bits.ACKEN = 1;
  61.                 }
  62.                 else
  63.                 {
  64.                     /* Send NACK */
  65.                     SSP1CON2bits.ACKDT = 1;
  66.                     SSP1CON2bits.ACKEN = 1;
  67.                 }
  68.             }
  69.         }
  70.     }
  71.     /* Data written by the application; release the clock stretch */
  72.     SSP1CON1bits.CKP = 1;
  73. }
 

On peut voir que les ACK/NACK sont défini en soft. J'ai pas regardé sur d'autres uC, mais me demandait si c'était courant.
Et si quelqu'un a déjà utilisé mcc, est-ce qu'il sait où se trouve I2C1_InterruptHandler ? :D

 

J'ai juste en début :

Code :
  1. static bool(*I2C1_InterruptHandler)(i2c_client_transfer_event_t clientEvent);
 

Parce qu'en faite, je capte pas si la gestion des appels de commande via le master I2C, je les mets après les send ACK où via l'I2C1_InterruptHandler qui est je sais pas où.


Message édité par froggycorp le 03-11-2025 à 20:02:22
n°477878
rat de com​bat
attention rongeur méchant!
Posté le 03-11-2025 à 21:06:45  profilanswer
 

Pour moi c'est toi qui doit coder le I2C1_InterruptHandler() avec ton code utilisateur justement non?


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°477881
froggycorp
Posté le 03-11-2025 à 22:10:03  profilanswer
 

Ca parait le plus logique, mais pourquoi la faire déclarer comme ça ?

n°477911
rat de com​bat
attention rongeur méchant!
Posté le 04-11-2025 à 13:44:03  profilanswer
 

J'ai pas compris. :o La c'est juste un prototype pour dire au compilateur "quelque part attend toi à une fonction avec cette tête" et te dire toi "voilà comment tu dois définir ta fonction".


---------------
Ne laissez pas mourir vos sujets en cours de route!
n°477912
froggycorp
Posté le 04-11-2025 à 13:46:57  profilanswer
 

J'ai tout retracé, je me suis acheté des yeux et un cerveau et cela va mieux ;)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  278  279  280  281  282  283

Aller à :
Ajouter une réponse
 

Sujets relatifs
* Réparations de vos appareils électroniques & electromenager * 
Plus de sujets relatifs à : [arduino] Topic Unique blabla @ Arduino


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)