Delai en C improbable avec tiny85

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
RaspOlivier
Messages : 129
Inscription : 10 déc. 2016, 09:40
Localisation : 44 - NANTES

Delai en C improbable avec tiny85

Message 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.
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: Delai en C improbable avec tiny85

Message 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);
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
RaspOlivier
Messages : 129
Inscription : 10 déc. 2016, 09:40
Localisation : 44 - NANTES

Re: Delai en C improbable avec tiny85

Message 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 ?
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Delai en C improbable avec tiny85

Message par vil1driver »

L = Long = 32 bits
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
RaspOlivier
Messages : 129
Inscription : 10 déc. 2016, 09:40
Localisation : 44 - NANTES

Re: Delai en C improbable avec tiny85

Message 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().
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Delai en C improbable avec tiny85

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
RaspOlivier
Messages : 129
Inscription : 10 déc. 2016, 09:40
Localisation : 44 - NANTES

Re: Delai en C improbable avec tiny85

Message 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.
Dernière modification par RaspOlivier le 24 août 2020, 14:28, modifié 1 fois.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Delai en C improbable avec tiny85

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
RaspOlivier
Messages : 129
Inscription : 10 déc. 2016, 09:40
Localisation : 44 - NANTES

Re: Delai en C improbable avec tiny85

Message 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.
Répondre