Pages: [1]   Go Down
Author Topic: Aide pour Sonde Temp + Hum (AM2305) base DS18D20 onewire  (Read 1299 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,


malgré tous mes essai je ne parviens pas a faire fonctionner ma sonde !!
je parle meme pas de lire les temperatures mais je ne parviens meme pas a la detecter.


J'ai essayé tous les bout de code pour DS18D20 mais toujours pas de sonde détecté !!
essayer avec résistances 4.7k , 47k rien a faire !

je sais que sur cette sonde le data fait 40 bits , j'ai donc essayé de modifier la longueur 12 en 40 !

je ne suis pas sur mais je pense que la librairie onewire doit subir quelques modif mais je ne sais pas ou et quoi !

ci-joint les liens de la sonde et du datasheet.

merci pour votre aide par avance.

datasheet de la sonde am2305 :
http://www.aosong.com/asp_bin/Products/en/AM2305.pdf

data de ds18b20
http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf


pour les codes testés c'est les code standard pour lecture ds18b20 plus l'exemple dans librairie onewire.

si vous avez une idée ! car je pense pas que ma sonde soit out!

a+ j'espere

gerard

Logged

Arduino leonard

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...

pour les codes testés c'est les code standard pour lecture ds18b20 plus l'exemple dans librairie onewire.

si vous avez une idée ! car je pense pas que ma sonde soit out!

a+ j'espere

gerard


bonjour
C'est de la communication en one wire (1 fil) mais ce n'est pas du onewire (protocole maxim), la nuance est grande  smiley-mr-green
donc les codes pour ds18x20 ne fonctionneront pas.
il faut gerer tout le protocole tel qu'exposé table 5 du datasheet


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour Artouste et merci pour l'info !

ce qui veut dire que la librairie onewire ne me sert a rien !!??

et que je dois gérer les us part mois même?
si oui je dois faire une librairie ou je peux les coder directement?

(je débute avec arduino et les librairies milles excuses si mes questions paraissent bêtes)

a+
Logged

Arduino leonard

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour Artouste et merci pour l'info !

ce qui veut dire que la librairie onewire ne me sert a rien !!??

et que je dois gérer les us part mois même?
si oui je dois faire une librairie ou je peux les coder directement?

(je débute avec arduino et les librairies milles excuses si mes questions paraissent bêtes)

a+
bonjour
en gros c'est ça, il faut soit que tu trouve une librarie déjà existante qui gere les AM305
il y a ça de dispo sur le site du fabricant , il y a peut etre de quoi faire du coté AVR
Quote
Download Our production of capacitive digital temperature and humidity sensor corresponding to the C51 MCU and AVR read a single bus routines; for AM2301, AM2302, AM2303, AM2305 temperature and humidity sensors use a common routine.
http://www.aosong.com/asp_bin/downloads/AM23XX.rar
soit que tu te paluche le protocole (dans le code ou en faisant une librairie, mais à ce stade c'est kif-kif  smiley-mr-green )

a priori ce fichier .c pour avr à l'air bien documenté et doit etre une bonne base de depart pour arduino.
http://cjoint.com/13jv/CAkmrqygl3H.htm
« Last Edit: January 10, 2013, 06:19:00 am by Artouste » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok ! compris le problème !!

haa l’époque du thermo en mercure !!! smiley-wink

bon je vais regarder ce que je peux récupérer dans les fichiers AM23XX...
(j'ai vu des truc dans fichier ".c")

mais bon.... suis pas sur de trouver...

merci encore pour ton aide tu ma bien éclairci le problème ( j’étais loin de me douter que pas onewire)
 
si je trouve je mettrais le code...

a+
Logged

Arduino leonard

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok ! compris le problème !!

haa l’époque du thermo en mercure !!! smiley-wink

bon je vais regarder ce que je peux récupérer dans les fichiers AM23XX...
(j'ai vu des truc dans fichier ".c")

mais bon.... suis pas sur de trouver...

merci encore pour ton aide tu ma bien éclairci le problème ( j’étais loin de me douter que pas onewire)
 
si je trouve je mettrais le code...

a+
re
oui
je viens d'editer ma reponse
le .C à l'air bien documenté et si tu seche , les petits genies du C te donnerons un coup de main pour adapter  smiley-mr-green
Logged

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

au passage et pour les petits genies du C

ça c'est pour etre au plus proche des 10µs ? , en dur c'est la meilleure méthode de prog  en C ?
ça revient a l'equivalent multiple du NOP en ASM  ?
Code:
void  Delay_10us(void)
      {
        U8 i;                    
        i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;
       }
« Last Edit: January 10, 2013, 06:55:58 am by Artouste » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j'ai essayer de traduire (en petit chinois via google) les renseignements du code d'origine pour aider a comprendre !!!

C'est le fichier Display_DHTXX.c   sans aucune modif de ma part juste traduit !

http://cjoint.com/?CAkobltK2Ro

voila si ça peu servir ! et si je trouve quelque chose qui fonctionne je le mettrai....

a+
gf
Logged

Arduino leonard

perpignan, france
Offline Offline
Sr. Member
****
Karma: 2
Posts: 337
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

au passage et pour les petits genies du C

ça c'est pour etre au plus proche des 10µs ? , en dur c'est la meilleure méthode de prog  en C ?
ça revient a l'equivalent multiple du NOP en ASM  ?
Code:
void  Delay_10us(void)
      {
        U8 i;                     
        i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;
       }

ben ça ça me semble parfaitement approximatif comme méthode de timing, ça va dépendre du proc utilisé, de son horloge, probablement aussi du compilo... Les fonctions équivalentes de l'arduino utilisent un timer de processeur pour faire ça, au moins c'est précis.
Logged

-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Re

je pense avoir trouver le bon fichier (probablement a adapter un peu)

(perso pour l'instant j'ai problème avec librairie)
#include "REG52.H"
#include <INTRINS.H>
j'ai trouver que les .h (pas les cpp) et j'ai des non déclarés!

j'ai mis le fichier ici : http://cjoint.com/?CAkrb7YnROQ

a+
Logged

Arduino leonard

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

ça c'est pour etre au plus proche des 10µs ?
Si ça fait 10µs en vrai c'est vraiment un sacré coup de chance ...
L'optimisation du compilateur devrait complétement rasé les "i++" pour faire un seul "i += 70;"

en dur c'est la meilleure méthode de prog  en C ?
Pas vraiment ... pour faire un delai de 10µs la seul vrai solution sur AVR c'est :
http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html#gab20bfffeacc678cb960944f5519c0c4f

Sinon en pure C c'est impossible d'avoir 10µs exactement, ça dépend du cpu, de la fréquence d'horloge et de plein d'autre facteurs.

ça revient a l'equivalent multiple du NOP en ASM  ?
Non ici c'est un post-incrémentation, pas un nop.

A F_CPU = 16MHz pour faire un delai de 10us il faut 16E6 * 10E-6 = 160 cycles cpu soit :
Code:
inline void delay_10us(void) {
    asm volatile(
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
"nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t nop\n\t"
    ::);
}
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Faraday Member
**
Karma: 33
Posts: 4978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Si ça fait 10µs en vrai c'est vraiment un sacré coup de chance ...
L'optimisation du compilateur devrait complétement rasé les "i++" pour faire un seul "i += 70;"

bonjour
ok skywodd
merci pour les explications, j'ai une facheuse tendance à "ignorer/occulter" le rôle d'optimisation du compilo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,

suite de mes recherches...

j'ai trouver un librairie DTH11 qui fait aussi temp+hum qui me parait très compatible avec AM2305 !!

j'ai maintenant une reconnaissance (a 1er vu) mais j'ai erreur de checksum !

j'ai modifié quelque valeur de temps dans librairie mais suis pas sur !
et je crois aussi qu'il faut bien formater les données...

j'ai mis la librairie d'origine DTH11 avec les modifs en commentaires pour ceux que ça intéresse ici: http://cjoint.com/?CAlqQavZ7dX

pas encore trouver mais j'y travaille...

pour info ci dessous le cpp
Code:
#include "dht11.h"

// Return values:
// DHTLIB_OK
// DHTLIB_ERROR_CHECKSUM
// DHTLIB_ERROR_TIMEOUT
int dht11::read(int pin)
{
// BUFFER TO RECEIVE
uint8_t bits[5];
uint8_t cnt = 7; //*************ici j'ai un doute 7?? 16!
uint8_t idx = 0;

// EMPTY BUFFER
for (int i=0; i< 5; i++) bits[i] = 0;

// REQUEST SAMPLE
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
delay(1); // pour am2305
//  ORIGINAL delay(18);
digitalWrite(pin, HIGH);
delayMicroseconds(30);// pour am2305
// ORIGINAL delayMicroseconds(40);
pinMode(pin, INPUT);

// ACKNOWLEDGE or TIMEOUT
unsigned int loopCnt = 10000;   // ***************************la je crois pas que soit bon !!
while(digitalRead(pin) == LOW)
if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

loopCnt = 10000;
while(digitalRead(pin) == HIGH)
if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

// READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT
for (int i=0; i<40; i++)
{
loopCnt = 10000;
while(digitalRead(pin) == LOW)
if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

unsigned long t = micros();

loopCnt = 10000;
while(digitalRead(pin) == HIGH)
if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

if ((micros() - t) > 40) bits[idx] |= (1 << cnt);
if (cnt == 0)   // next byte?
{
cnt = 7;    // restart at MSB
idx++;      // next byte!
}
else cnt--;
}

// WRITE TO RIGHT VARS
        // as bits[1] and bits[3] are allways zero they are omitted in formulas.
humidity    = bits[0];
temperature = bits[2];
//******************************************* ici je crois qui qui faut 5 bits!!
uint8_t sum = bits[0] + bits[2]; 

if (bits[4] != sum) return DHTLIB_ERROR_CHECKSUM;
return DHTLIB_OK;
}
//
// END OF FILE
//

voila pour l'instant...

suis preneurs de confirmation ou de conseils ....

a+
gf


Logged

Arduino leonard

Pages: [1]   Go Up
Jump to: