Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

problème avec plusieurs DS1822
#1

Bonjour,
J'utilise 4 ds1822 câblés en parallèle avec le RPI qui les lit sur le GPIO4 (tiré au 3.3v par 4.7K), et affichage des mesures sur écran LCD.
Mon problème est le suivant: 2 des capteurs fonctionnent parfaitement, les 2 autres retournent systématiquement 85°C (la valeur sur initialisation).

J'utilise la bibli owfs.

Je vois très bien les 4 capteurs dans le dossier sys\devices\w1_bus_master1, chacun avec ses sous dossiers.
Mais effectivement, les contenus des fichiers w1_slave des capteurs muets restent aussi figés.

J'ai beau chercher je ne vois pas le problème.

Je précise aussi qu'utilisés seuls ou en groupe leurs comportements sont les mêmes: 2 d'entre eux ne répondent que 85°C (0000001a4791 et 0000001a28b8).


*************************************
le code en cause (qui ne retourne aucune erreur!)


import pylcd
from time import sleep
from datetime import datetime
import sys
sys.path.append("/home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCD")

import ablib

sensor1 = ablib.DS1822("000000336ddc")
sensor2 = ablib.DS1822("000000336b62")
sensor3 = ablib.DS1822("0000001a4791")
sensor4 = ablib.DS1822("0000001a28b8")


lcd = pylcd.lcd(0x20,1)

while 1:
tp1 = sensor1.getTemp()
tp2 = sensor2.getTemp()
tp3 = sensor3.getTemp()
tp4 = sensor4.getTemp()
lcd.lcd_locate_cursor(1, 1)



if tp1 !=-1000:
lcd.lcd_puts( 'capteur1: %.2f '%(tp1)+ str(chr(0b11011111))+'C' , 1, 1) # (°C)
if tp2 !=-1000:
lcd.lcd_puts( 'capteur2: %.2f '%(tp2)+ str(chr(0b11011111))+'C' , 1, 20) # (°C)
if tp3 !=-1000:
lcd.lcd_puts( 'capteur3: %.2f '%(tp3)+ str(chr(0b11011111))+'C' , 2, 1) # (°C)
if tp4 !=-1000:
lcd.lcd_puts( 'capteur4: %.2f '%(tp4)+ str(chr(0b11011111))+'C' , 2, 20) # (°C)

sys.stdout.write('DS1822 n°3: %.2f °C / DS1822 n°4: %.2f °C\r' %(tp3,tp4))
sys.stdout.flush()

sleep(0.5)

************************************************
Répondre
#2

Salut,
J'avais eu un souci similaire avec un arduino. Je ne rappelle plus pourquoi mais il me semble que C'était un problème d'initialisation du capteur.
Je retrouve le code qui me permet de les lires et je compare avec le tiens pour voir s'il n'y a pas quelques chose que je fait différemment.
@+
Nicolas.

Projet en cours : Commande de projecteurs via un Raspberry
Mon blogTopic sur le forumDépôt GitHub
Répondre
#3

merci de t'intéresser à mon pb, Nicolas.

J'ai un peu progressé sur le sujet (mais si peu...)
En fait j'utilise 2 ds1822 qui fonctionnent bien, et 2 ds1822p qui ne fonctionnent pas. Au départ je les croyais parfaitement interchangeables!

Le datasheet du ds1822p dit effectivement que la ligne DQ doit être tirée au +V par un mosfet supplémentaire durant l'écriture du scratchpad car alors, le condensateur interne du ds1822p et la résistance de tirage ne suffisent pas à assurer sa tension de fonctionnement.

Bien. Mais ceci dit, comment réussir cela avec le rpi?
Je n'en ai aucune idée.

Par ailleurs, j'ai aussi essayé de les lire avec l'interface "buspirate". Mais même résultat...
Répondre
#4

Salut,
J'ai regardé mon code mais je ne vois rien qui différe du tiens à part qu'il est écrit en C.
Ce qui m'étonne c'est sue tu fait exactement les mêmes choses sur les 4. Il ne devrait donc pas y avoir une différence dans le fonctionnement.
Vérifie bien ton montage. Sinon je pense que c'est le capteur lui même qui est mort.
@+
Nicolas.

Projet en cours : Commande de projecteurs via un Raspberry
Mon blogTopic sur le forumDépôt GitHub
Répondre
#5

Et si tu inverse les capteurs dans ton montage, tu as toujours le problème sur les 3 et 4?
Répondre
#6

Re,
De ce qu'il disait même tout seul le capteur foire. C'est qui m'inquiète. :/

Projet en cours : Commande de projecteurs via un Raspberry
Mon blogTopic sur le forumDépôt GitHub
Répondre
#7

Bonjour à ceux qui me lisent.

Quelques nouvelles précisions autour de mon problème:

1- le montage est électriquement parfait,
2- l'ordre des capteurs ne changent rien,
3- le problème est dans l'implémentation du code du RPi de la prise en charge du mode parasite (ou ma manière de l'interroger...)
4- ça c'est important: les 4 fonctionnent parfaitement sur une carte arduino uno avec la bibliothèque onewire qui, elle, gère très bien l'alimentation en mode parasite des 1822 et 1822P. (C'est même explicité dans le code source...)

Les 1822 fonctionnent dans tous les cas de figure, les 1822P (le P c'est pour Parasite) ne fonctionnent qu'avec une carte Arduino.

http://www.maximintegrated.com/app-notes...mvp/id/203
http://www.maximintegrated.com/datasheet...vp/id/2796

Comme j'ai plus de 1822P que de 1822 sous la main, j'aimerais bien réussir à les faire prendre en compte par le RPi.

Quelqu'un sait-il comment modifier les drivers du RPi pour cela, ou quelle instruction lui donner pour que ça marche?
Répondre
#8

Je me réponds et je clos le sujet:

pour faire fonctionner correctement mes ds1822 (avec ou sans P) en mode parasite (la masse sur 1 & 3, lecture du signal sur 2 à travers une résistance commune de forçage), il faut, comme le dit la doc Maxim, forcer un 'strong pullup'.

J'ai donc finalement trouvé comment activer cela:

Ouvrir le fichier etc/modules dans le RPi

et remplacer
w1-gpio
w1-therm

par
w1-gpio pullup=1
w1-therm


On peut aussi forcer
w1-therm strong_pullup=1

mais pour moi, la ligne ' w1-gpio pullup=1' a résolu mon problème!

Un simple détail mais qui m'aura occupé... Tongue
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)