Page 1 sur 1

Delai en C improbable avec tiny85

Publié : 22 août 2020, 13:17
par RaspOlivier
Bonjour,

Je commence à bricoler des tiny85 et je ne comprend pas les différences de délais qu'il y a entre la simulation,
la maquette en réel et le code !

Si je veux 8 secondes, il me faut selon ce que j'ai compris :

Code : Tout sélectionner

delay(8000)

En mettant dans mon code 80000, soit 10 fois plus, j'ai :
  • 8 secondes en réel sur ma maquette.
  • 4 secondes approximativement sur la simultation sur PC.
Le tiny85 est programmé en 1 MHz Internal

Lien vers la simulation : https://www.tinkercad.com/things/f7guUar4H6y

Je découvre également TinkerCAD et je n'ai pas vu de réglage de temps.

Re: Delai en C improbable avec tiny85

Publié : 22 août 2020, 17:01
par boum
Raisons probables :
  • delay() n'est pas précis, il compte les cycles et plus le délai est grand, plus la divergence est visible
  • sur AVR, les int font 16 bits. 80000 = 0b10011100010000000, sur 16 bits, il reste 14464, bon ça fait 14s, donc on est encore loin. Dans le doute, utiliser delay(80000L);

Re: Delai en C improbable avec tiny85

Publié : 23 août 2020, 14:02
par RaspOlivier
Bonjour boum et merci,

La maquette est démontée pour l'instant mais je referais des tests avec delay(xxL).

A quoi sert le L ?

Re: Delai en C improbable avec tiny85

Publié : 23 août 2020, 14:13
par vil1driver
L = Long = 32 bits

Re: Delai en C improbable avec tiny85

Publié : 24 août 2020, 10:25
par RaspOlivier
Bonjour,

Ok pour long,

Je viens d'effectuer la modification mais alors maintenant j'ai carrément plus près d'1 seconde que de 8 !
Je vais essayer de modifier le programme en utilisant millis().

Re: Delai en C improbable avec tiny85

Publié : 24 août 2020, 12:15
par vil1driver
Probablement une différence entre la fréquence d'horloge du code compilé et celle gravée dans le bootloader..

Essai en sélectionnant 8MHz

Re: Delai en C improbable avec tiny85

Publié : 24 août 2020, 12:59
par RaspOlivier
J'ai testé en 8 MHZ mais ça n'allait pas mieux.
J'ai modifié le code en remplaçant delay par millis() mais c'est encore pas ça !
https://www.tinkercad.com/things/f7guUar4H6y
J'essaye avec un nano en debut d'après midi.

Bon ap.

Edit : En postant je vois que tu parles de différence de fréquence d'horloge entre le bootloader et le code, il est possible que ce soit une piste, je ne connais pas l'arduino.

Re: Delai en C improbable avec tiny85

Publié : 24 août 2020, 13:03
par vil1driver
Oublie la simulation.
Fais les choses en réel

Millis n'est pas du tout équivalent à delay..
Ça ne s'utilise pas du tout de la même façon

Re: Delai en C improbable avec tiny85

Publié : 24 août 2020, 16:31
par RaspOlivier
Bon, je vais faire un peu de menuiserie pour me changer les idées !

Le montage fonctionne comme je veux mais en multipliant par 10 les valeurs de délais.

J'ai utilisé millis() de la façon suivante en remplacement de délai(8000) mais ça ne fonctionne pas mieux, ce n'est peut-être pas la bonne méthode :

Dans loop :

Code : Tout sélectionner

long refTemps = 0;
refTemps = millis();
while ((millis() - refTemps) <= 8000))
    {
    }
Du coup j'ai une tempo longue ou infinie, je vais laisser tourner pour voir si ça bouge.