Cours:ArduinoSansLoopSetup : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
Ligne 20 : Ligne 20 :
  
  
={{Rouge|Attention}}=
+
=Gestion du temps=
  
Il faut utiliser la fonction {{Rouge|_delay_ms}} et non pas la fonction {{Rouge|delay}} (qui repose sur le timer0).
+
<big>Remplacement</big> :
 +
*utiliser {{Rouge|_delay_ms}} à la place de delay
 +
*utiliser {{Rouge|_delay_us}} à la place de delayMicroseconds
 +
 
 +
S'il est indispensable d'utiliser les fonctions arduino [https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c delay/delayMicroseconds/millis/micros], il faut configurer le Timer1 de la façon suivante :
 +
 
 +
<source lang=cpp>
 +
void initFonctionsTempsArduino()
 +
{
 +
  sei();
 +
  // marche pour 328p et 2560 et autres ...
 +
  // à adapter suivant le µc
 +
  // cf https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
 +
  TCCR0A=(1<<WGM01)|(1<<WGM00);
 +
  TCCR0B=(1<<CS01)|(1<<CS00);
 +
  TIMSK0=(1<<TOIE0);
 +
}
 +
 
 +
int main()
 +
{
 +
  initFonctionsTempsArduino();
 +
  Serial.begin(115200);
 +
  while(1)
 +
  {
 +
    delay(100);
 +
    Serial.println(millis());
 +
  }
 +
}
 +
</source>

Version du 21 mai 2024 à 23:24

Il est tout à fait possible de se passer complètement des librairies Arduino, tout en utilisant le logiciel Arduino !

exemple :

#define F_CPU 16000000UL
#include <util/delay.h>

int main()
{
  DDRB=0x0F;
  
  for(;;)
  {
    PORTB^=0x0F;
    _delay_ms(500);
  }
}


Gestion du temps

Remplacement :

  • utiliser _delay_ms à la place de delay
  • utiliser _delay_us à la place de delayMicroseconds

S'il est indispensable d'utiliser les fonctions arduino delay/delayMicroseconds/millis/micros, il faut configurer le Timer1 de la façon suivante :

void initFonctionsTempsArduino()
{
  sei();
  // marche pour 328p et 2560 et autres ...
  // à adapter suivant le µc
  // cf https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
  TCCR0A=(1<<WGM01)|(1<<WGM00);
  TCCR0B=(1<<CS01)|(1<<CS00);
  TIMSK0=(1<<TOIE0);
}

int main()
{
  initFonctionsTempsArduino();
  Serial.begin(115200);
  while(1)
  {
    delay(100);
    Serial.println(millis());
  }
}