Guten Morgen!
Ich habe die Software von DS1820, DS18B20 in C
(Beitrag "DS1820, DS18B20 in C")
ausprobiert und soweit funktioniert es auch!
Das Problem ist das sobald ich 2m Kabel an den Sensor hänge findet die
Software den Sensor nicht mehr!
Beziehungsweise reicht es schon nur einen 2 m langen Draht an die
Datenleitung zu halten und die Kommunikation bricht zu summen!
Was mache ich Falsch?
Habe mir mit dem Oszilloskop das Signal angesehen und interessanter
weiße kommt das Signal manchmal nicht mehr ganz auf Null sobald der
Draht an der Datenleitung hängt!
Die Flanken sind aber steil!
Wie könnte ich das Problem lösen?
Lg
Peter
Pier S. schrieb:> Also ich habe den Sensor direkt mit 5 Volt versorgt!> Die Software aber Original belassen!>> Was sagt das aus?>> LG> Danke> peter
Im parasitären Modus muss lt. Datenblatt sichergestellt sein, dass
ausreichend Strom zur Verfügung steht, bzw. sichergestellt werden, dass
die Spannung am Bus nicht einbricht. Weiters muss Vdd auf GND gelegt
werden.
Nachdem du den Sensor aber nicht im parasitären Modus betreibst ist das
hinfällig.
Lg Martin
Martin Loidl schrieb:> Nachdem du den Sensor aber nicht im parasitären Modus betreibst ist das> hinfällig.
Wie kann ich dem Problem auf die schliche kommen?
LG
Peter
Pier S. schrieb:> Martin Loidl schrieb:>> Nachdem du den Sensor aber nicht im parasitären Modus betreibst ist das>> hinfällig.>> Wie kann ich dem Problem auf die schliche kommen?>> LG> Peter
Kannst du bitte den Schaltplan hochladen?
Peter Dannegger schrieb:> Die 15µs bis zum Lesen können manchmal etwas lang sein, probier> mal> 10µs.
Guten Morgen habe es mit 10µS Probiert, leider das selbe:(
spess53 schrieb:> Hi>> Was macht eigentlich der Widerstand in der Datenleitung?>> MfG Spess
War als Entstörung gedacht! Habe irgendwo im Forum gelesen das die
modernen Avr mit den starken Port Treibern ohne Serien Widerstand
Probleme verursachen können!
Habe den widerstand auch überbrückt bringt aber auch nix:((
Danke bin für jeden Vorschlag Dankbar
LG
Peter
Wo im Schaltplan ist das Kabel? M.a.W., sind Stützkondensator und Pullup
auf der uC-Seite oder der DS-Seite ...
Zeig auch mal die Oszi-Bilder von beiden Seiten.
LG, Sebastian
Sebastian Wangnick schrieb:> Wo im Schaltplan ist das Kabel? M.a.W., sind Stützkondensator und Pullup> auf der uC-Seite oder der DS-Seite ...
Der Stützkondensator ist am DS und der Pullup auf der µC Seite!
Peter Dannegger schrieb:> Welchen CPU-Takt hast Du?
Ich verwende 14745600HZ als Takt die Oszibilder kann ich später
nachreichen!
Danke
LG
Peter
mal messen, wie lange 60 x _delay_ms(1000) dauert. Kann eigentlich nur
ein Zeitproblem sein. Bei mir funktionieren ca. 20 Sensoren in einem
kreuz und quer durchs ganze Haus verlegten Netzwerk ohne sc1 und sr1
völlig problemlos.
Sebastian Wangnick schrieb:> Nein, die Slotzeit ist jetzt nur noch 55uS (1+9+45). Die dritte> Delay-Zeile muss lauten: DELAY( DELAY_US( 60 - 10 ));>> LG, Sebastian
OK Danke
Kannst du mir das erklären?
LG
Peter
Pier S. schrieb:> Sebastian Wangnick schrieb:>> Nein, die Slotzeit ist jetzt nur noch 55uS (1+9+45). Die dritte>> Delay-Zeile muss lauten: DELAY( DELAY_US( 60 - 10 ));>>>> LG, Sebastian>> OK Danke> Kannst du mir das erklären?
Wenn ein Vorgang 60 Minuten dauern soll und aus 2 Teilen besteht, von
denen der erste 15 Minuten dauert und daher der 2. Teil 45 Minuten
braucht, wie lange muss dann der 2. Teil dauern, wenn du den ersten Teil
auf 10 Minuten verkürzt
1
vorher nachher
2
3
15 10
4
+ 45 + ?
5
----- ------
6
60 60
Die 60 sind dir vorgegeben. Die sind einzuhalten.
Am besten schreibst du die Zahl nur einmalig hin
1
#define PULSTIME 10
2
3
4
....
5
6
DELAY(DELAY_US(PULSTIME));
7
8
...
9
10
DELAY(DELAY_US(60-PULSTIME));
11
...
Dann erledigt der Compiler die Anpassung bei Änderung.
So hier die versprochenen Bilder vom Oszilloskop!
Habe jetzt den Pullup auf 1k und den Serienwiederstand auf 220Ohm!
Sobald an der Datenleitung 2 m Kabel hängen ist Schluss mit der
Kommunikation!
Vielen Dank für Eure Hilfe
LG
Peter
Hallo Peter,
Pier S. schrieb:> So hier die versprochenen Bilder vom Oszilloskop!> Habe jetzt den Pullup auf 1k und den Serienwiederstand auf 220Ohm!
Entweder ich bin blöd oder ich verstehe dich nicht. Bei der
Konfiguration (1k, 220) und deinem Schaltplan würde bei Low an PG0 die
Spannung an OW2 nur bis ca. 1V fallen. Auf den Oszibildern scheint sie
aber bis auf fast 0V zu fallen.
Meine Vermutung ist, dass du die Oszibilder VOR der Veränderung der
Widerstände gemacht hast ...
LG, Sebastian
Sebastian Wangnick schrieb:> Entweder ich bin blöd oder ich verstehe dich nicht. Bei der> Konfiguration (1k, 220) und deinem Schaltplan würde bei Low an PG0 die> Spannung an OW2 nur bis ca. 1V fallen. Auf den Oszibildern scheint sie> aber bis auf fast 0V zu fallen.>> Meine Vermutung ist, dass du die Oszibilder VOR der Veränderung der> Widerstände gemacht hast ...>> LG, Sebastian
Nein die Bilder sind nach der Änderung der Werte gemacht!
Was meinst du damit kann dir nicht folgen!
Danke LG
Peter
Pier S. schrieb:> Was meinst du damit kann dir nicht folgen!
Je nun, R2 und R1 bilden ja einen Spannungsteiler.
+5V - R2(1kΩ) - OW2 - R1(220Ω) - PG0
Wenn nun PG0 aktiv auf Low 0V zieht, und OW2 hochohmig ist, dann muss
die Spannung an OW2 ... 5V/1220Ω*220Ω = 0.9V sein.
LG, Sebastian
Sebastian Wangnick schrieb:> Pier S. schrieb:>> Was meinst du damit kann dir nicht folgen!>> Je nun, R2 und R1 bilden ja einen Spannungsteiler.>> +5V - R2(1kΩ) - OW2 - R1(220Ω) - PG0>> Wenn nun PG0 aktiv auf Low 0V zieht, und OW2 hochohmig ist, dann muss> die Spannung an OW2 ... 5V/1220Ω*220Ω = 0.9V sein.>> LG, Sebastian
Ich habe direkt am Sensor nach dem Kabel gemessen! (Oszi Masse an Pin 1
des Ds)
Lg
Peter
Pier S. schrieb:>> ohne sc1 und sr1> Was meinst Du damit?
kein C1 und kein R1 auf deinem Schaltplan.
Wo kommen denn die Einbrüche auf deinem Oszi-bild her? Sind die
reproduzierbar? Wackelkontakt? Kabel wechseln? Sensor wechseln? Wenn der
uc richtig messen soll muss das Signal des Sensors sehr regelmäßig sein.
So habe jetzt 8 Sensoren in einer Stern Verkabelung mit ca. je 8m
und ich bekomme die Messwerte regelmäßig!
Habe dazu folgendes getrieben:
Serien Widerstand entfernt!
Pullup Widerstand auf 560Ohm verringert!
Und in der Original Software die Funktion "w1_bit_io "wie folgt
abgeändert.
1
uint8_tw1_bit_io(uint8_tb)
2
{
3
cli();
4
W1_DDR|=1<<W1_PIN;
5
DELAY(DELAY_US(1));
6
if(b)
7
W1_DDR&=~(1<<W1_PIN);
8
DELAY(DELAY_US(15-1));
9
if((W1_IN&(1<<W1_PIN))==0)
10
b=0;
11
DELAY(DELAY_US(60-10));// Hier geändert
12
W1_DDR&=~(1<<W1_PIN);
13
DELAY(DELAY_US(2));// Hier Hinzu gefügt!
14
sei();
15
returnb;
16
}
Möchte mich bei Allen die mich unterstützt haben herzlich bedanken!
LG
Peter
Prima das es jetzt läuft.
Als ich mich intensiv mit 1-Wire auseinandergesetzt habe, bin ich auch
auf die Library von Peter D. gestoßen. Speziell die "w1_bit_io" Funktion
hat mir nicht gefallen. Ich würde empfehlen das Lesen und Schreiben der
Bits mit getrennten Routinen zu machen. Das Timing ist bei Lesen anders
als beim Schreiben.
Senden:
- 1-2 µs Leitung auf 0 ziehen.
- Bei 1: Leitung wieder freigeben (Eingang) und auf min. 60 µs Gesamt
Zeit füllen.
- Bei 0: Auf min. 60 µs füllen und dann freigeben.
Es ist nicht notwendig, und auch nicht gewollt, die Leitung bei "1" 15
µs auf 0 zu ziehen.
Lesen:
- 1-2 µs Leitung auf 0 ziehen.
- Leitung wird freigeben zum Lesen.
- Nach 8µs kann man schon Lesen. Es muss innerhalb von 15 µs passieren
und nicht bei 15 µs. Das Datenblatt scheibt sogar "so schnell wie
möglich".
Bei der "w1_bit_io" wird relativ genau bei 15 µs gelesen und auch
geschrieben. Das ist hart an der Grenze und kann bei leichten Tackt
Abweichung zu Problemen führen.
Eine Timing Anpassung auf 10 µs sollte deutlich zuverlässiger sein. Aber
nicht den letzten Delay vergessen wie es oben zu sehen ist. So sollte es
auch gehen: