Auteur Sujet: Problème pour utiliser l'horloge externe du PCA9685  (Lu 3960 fois)

simontpellier

  • Jr. Member
  • **
  • Messages: 68
    • Voir le profil
Re : Problème pour utiliser l'horloge externe du PCA9685
« Réponse #45 le: janvier 19, 2021, 06:53:43 pm »
les "while" en effet mais le code ne tourne pas sans. On peut les enlever mais il faut alors ajouter un petit delay avant le latch, 10us au moins. En principe c'est pas très bon mais dans ce cas il y a un petit gain et le résultat égale quasiment des "SPI.transfer". Ce qui offre un choix

Là bien sûr c'est une performance brute avec une loop qui ne fait que ça (même pas vrai car j'ai testé l'ajout d'un second esclave, en prévision d'un "general purpose", rafraîchi toutes les 10ms, et c'est quasiment sans incidence).
Au final, le réglage de la fréquence PMW effective se fera par le timer2 et interruptions, ce qui a marché va resservir !

(Et comment on fait pour vérifier que les transferts sont effectués ?)

trimarco232

  • Jr. Member
  • **
  • Messages: 73
    • Voir le profil
Re : Problème pour utiliser l'horloge externe du PCA9685
« Réponse #46 le: janvier 19, 2021, 08:57:53 pm »
c'est ce qu'il y a derrière le while : tu mets if( à la place de while (!

simontpellier

  • Jr. Member
  • **
  • Messages: 68
    • Voir le profil
Re : Problème pour utiliser l'horloge externe du PCA9685
« Réponse #47 le: janvier 20, 2021, 09:25:07 pm »
...while/if... le problème ne s'est finalement pas posé. Je pense que ça s'explique par la gamme de (basse) fréquence qui m'intéresse.

Je reviens donc pour déposer le code final : ça va décidément très très vite : avec une fréquence bridée par interruptions à 60Hz vérifiés/oscillo et pour 40PWM, la loop tourne elle à ...160 kHz! (perso, avec un petit réseau école c'est vrai mais toutes les fonctions d'un grand, ma loop prend 6ms... 6 comparé à 160, y'a de la marge ! et je suis d'ailleurs de plus en plus étonné par ce qu'un Arduino Mega a dans le ventre).
D'autres paramètres (prescaler etc) permettraient une plage de fréquence bien plus haute sans étouffer le CPU ; je fais confiance à l'estimation l'analyseur logique à 10balles de Trimarco.
 
Le SPI étant largement susceptible d'avoir d'autres usages que de la PWM logicielle, pour l'exemple le code pilote en parallèle des registres indépendants de ceux de la PWM, par exemple pour les pins de polarisation des boosters, pour des signaux etc.

Juste dommage que tout ça ne puisse marcher qu'à condition de ne pas avoir besoin du (seul) SPI harware pour un bus CAN (et très dommage qu'il manque juste une broche au Mega pour pouvoir en créer un second). Mais un SPI logiciel, même moins véloce, pourra quand même abattre du boulot.

Le code en pièce jointe (encore merci à Trimarco)

Bien cordialement

« Modifié: janvier 21, 2021, 08:15:55 pm par simontpellier »

trimarco232

  • Jr. Member
  • **
  • Messages: 73
    • Voir le profil
Re : Re : Problème pour utiliser l'horloge externe du PCA9685
« Réponse #48 le: janvier 20, 2021, 10:46:32 pm »
...while/if... le problème ne s'est finalement pas posé. Je pense que ça s'explique par la gamme de (basse) fréquence qui m'intéresse.

Je reviens donc pour déposer le code final : ça va décidément très très vite : avec une fréquence bridée par interruptions à 60Hz vérifiés/oscillo
merci
et pour 40PWM, la loop tourne elle à ...160 kHz! (perso, avec un petit réseau école c'est vrai mais toutes les fonctions d'un grand, ma loop prend 6ms... 6 comparé à 160, y'a de la marge ! et je suis d'ailleurs de plus en plus étonné par ce qu'un Arduino Mega a dans le ventre).
D'autres paramètres (prescaler etc) permettraient une plage de fréquence bien plus haute sans étouffer le CPU ; je fais confiance à l'estimation de Trimarco.moi, je fais plutôt confiance à mon analyseur logique à 10 balles
 
Le SPI étant largement susceptible d'avoir d'autres usages que de la PWM logicielle, pour l'exemple le code pilote en parallèle des registres indépendants de ceux de la PWM, par exemple pour les pins de polarisation des boosters, pour des signaux etc.
oui, mais ça ralentirait tout inutilement ; il vaut mieux traiter les io lents avec un spi soft dédié
(pour les signaux tu peux utiliser un tlc5947)


Juste dommage que tout ça ne puisse marcher qu'à condition de ne pas avoir besoin du (seul) SPI harware pour un bus CAN (et très dommage qu'il manque juste une broche au Mega pour pouvoir en créer un second). Mais un SPI logiciel, même moins véloce, pourra quand même abattre du boulot.les méga comportent 3 usart prévus pour fonctionner en variante comme spi maitres (même mieux que le spi) mais les pinioufs de chez arduino n'ont pas jugé utile de sortir les broches clk sur la carte ; je pourrais le faire avec mon pro micro
mais de toutes manières, il est temps de "s'attaquer" à l'arm, non ?


Le code en pièce jointe (encore merci à Trimarco) service

Bien cordialement

simontpellier

  • Jr. Member
  • **
  • Messages: 68
    • Voir le profil
Re : Problème pour utiliser l'horloge externe du PCA9685
« Réponse #49 le: janvier 21, 2021, 08:12:39 pm »

quoique...
un certain "milwind" fait remarquer que la pin XCK qui est en 48  est tout près de la pin de la pin 50 qui, elle, sort sur une broche et qu'il suffit juste d'un petit pont de soudure. Faut oser ! Il a osé.
https://forum.arduino.cc/index.php?topic=257506.0

(Mais pourquoi une PWM de pourrait-elle pas plutôt être utilisée comme signal d'horloge ?)

(et OK j'ai corrigé : je fais confiance à l'analyseur logique à 10 balles de Trimarco)
« Modifié: janvier 21, 2021, 08:15:05 pm par simontpellier »

trimarco232

  • Jr. Member
  • **
  • Messages: 73
    • Voir le profil
Re : Problème pour utiliser l'horloge externe du PCA9685
« Réponse #50 le: janvier 22, 2021, 12:50:44 pm »
bricolage infâme sur du pas de 0.4mm ... voir plutôt Mega2560 CORE chez aliex. par ex.
pwm : ça marche pas