ATtiny85 precission delayMicroseconds

Informations et questions sur les composants tiers de la boutique (émetteur/récepteur RF, capteurs...)

ATtiny85 precission delayMicroseconds

Message non lude 3gsTeam » Ven 17 Avr 2015 10:17

Bonjour,
J'ai pour projet de réaliser un capteur de température équivalent au DS18B20,
composé d'une sonde PT1000 et d'un ATtiny85.
L'ATtiny85 assure la conversion analogique digitale et l'interface OneWire.
Or pour cet interface, le timing est très important.

Le test suivant :

Loop(){
while(1){
digitalWrite(1,LOW);
delayMicroseconds(10);
digitalWrite(1,HIGH);
delayMicroseconds(10);
}
}


La mesure du signal de sortie est :
Période : 32.4 µs
Etat haut : 16.3 µs
Etat bas : 16.1 µs

Ce résultat n'est pas assez précis (60% trop lent) pour mon application.

Le problème vient-il de :
- l'imprécision du microcode delayMicroseconds()
- du compilateur car le choix de la carte : "ATtiny85 @8Mhz (internal oscillator, BOD disabled)
or mon ATtiny85 20PU (acheté chez Snootlab ;) ) est à 20MHz

Pouvez-vous m'orienter vers une solution ?
Merci de votre aide.
Serge
Avatar de l’utilisateur
3gsTeam
 
Messages: 7
Inscription: Jeu 14 Mar 2013 15:27

Re: ATtiny85 precission delayMicroseconds

Message non lude 3gsTeam » Ven 24 Avr 2015 16:10

Bonjour,

Je viens de trouver l'origine du problème.
Ce n'est pas la fonction delayMicroseconds() qui n'est pas assez précise
mais l’accès aux ports digitalWrite(1,LOW) qui ralenti trop le timing.

Avec la syntaxe suivante le résultat est correct
Loop(){
while(1){
PORTB &= 0xFE; // reset bit 0 port B
delayMicroseconds(10);
PORTB |= 0x01; // set bit 0 port B
delayMicroseconds(10);
}
}

Cordialement
Serge
Avatar de l’utilisateur
3gsTeam
 
Messages: 7
Inscription: Jeu 14 Mar 2013 15:27


Retourner vers Composants tiers

Qui est en ligne

Utilisateurs parcourant ce forum: Yahoo [Bot] et 1 invité