Tous les micro-processeur utilisent ce principe pour changer la valeur des ports.
C'est d'ailleurs l'unique façon d'y accéder.
Sur arduino, il y a en plus les fonctions digitalWrite et digitalRead pour accéder à une pin précise mais elles utilisent quand même les registres PORTA, PORTB ... ce qui est 100 fois plus lent car elles doivent analyser les paramètres afin d’effectuer la bonne opération sur les ports.
La preuve : digitalWrite comprend 5 appels de fonctions, 3 if, pas mal d'instructions ...
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);
out = portOutputRegister(port);
uint8_t oldSREG = SREG;
cli();
if (val == LOW) {
*out &= ~bit;
} else {
*out |= bit;
}
SREG = oldSREG;
}
Donc arrange toi pour mettre tes sorties sur le même port afin de pouvoir en changer 8 d'un coup
C'est tout à fait possible qu'il n'y ai pas 8 pin par port.
Concernant le PWM, il y a forcément des pin PWM sur des I/O mais ce n'est pas gênant car si tu n'utilises pas la fonction PWM, c'est la fonction I/O qui est active.
Je devrais lire la doc, c'est une vrai mine d'information
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Retrouvez moi sur mon blog et ma chaine Youtube !