GPIO, PWM, et fréquence max ?

Bonjour,

Je me demandai quelle est la fréquence max et mini des port GPIO d'un arduino mini ?

Merci

Ptilou 8)

Pas facile de donner une réponse en quelques mots.
Avant toute chose je t'engage à lire la datasheet du micro-controleur ATMega328p qui équipe la carte "mini"

Je ne me suis intéressé qu'a la génération de signaux que j’appellerais "classique" c'est à dire non PWM.

  1. Première méthode ultra classique
    digitalWrite(pin, High);
    delay(100);
    digitalWrite(pin, LOW) :
    delay(100);

En faisant delay = 0 on obtient au maximum 87,4 kHz sur les sorties non PWM et seulement 68,6 kHz sur les PWM (PWM non en service bien sûr).

  1. Deuxième méthode : même principe mais en programmant sans les librairies arduino mais en utilisant celle de l'avr-libc et en manipulant directement les registres.
  • Les résultats sont les mêmes sur toutes les pins, PWM ou non.
  • Fréquence max 1 MHz mais avec un rapport cyclique dégueulasse (RC=12%).
    En rectifiant le rapport cyclique avec quelques _NOP() bien placé on obtient 570 kHz.
  1. En utilisant les timers.
    La fréquence maximale est égale à la fréquence du quartz divisée par 2 quelque soit le timer. C'est à dire 8 MHz pour une carte fonctionnant à 16 MHz.
    La fréquence min dépend du timer. Elle est de 31Hz pour les timers 8 bits (timers 0 et 2) et de 0,11 Hz pour le timer 16 bits (timer 1)

NOTE importante:
Les deux premières méthodes sont bloquantes, le micro est utilisé à 100%, il n'est pas multitache.
Avec les timers le micro à seulement à envoyer les bonnes valeurs dans quelques registres, ensuite il est libéré, le timer se débrouille tout seul.

Pour la PWM je te laisse le soin de lire la datasheet, elle n'est pas trop compliquée et Atmel fourni les formules de calcul. :grin: