Hallo, ich nutze einen ATmega168 und möchte mittels DS18B20+ Temperaturen erfassen. Als Software nutze ich die von peter dannegger [Beitrag "DS1820, DS18B20 in C"]. Folgendes Problem liegt bei mir vor: Ist der DS18B20+ eingebaut, kann der µC beim Reset Pulse von 480µs die Leitung nicht auf GND ziehen, sondern auf nur ca. 4,8 V. Löte ich das Teil aus, wird PD0 wie gewünscht auf GND gezogen. Ist dieses Verhalten normal oder liegt ein Fehler vor? Ist der DS18B20+ kaputt? Folglich wird bei mir kein Sensor gefunden: "No Sensor found" . Grüße
qwertz schrieb: > Ist der DS18B20+ eingebaut, kann der µC beim Reset Pulse von 480µs die > Leitung nicht auf GND ziehen, sondern auf nur ca. 4,8 V. Der Pullup am 1-Wire sollte nicht bloss 100 Ohm betragen. Und der AVR sollte die Leitung nicht aktiv hochziehen, sondern das dem Pullup überlassen.
Der Widerstand ist wie überall beschrieben 4,7k groß. Der uC schaltet niemals auf High, sondern soll den Pin auf GND ziehen, was leider nicht klappt wenn der DS18B20 verbaut ist.
Moment... ich sehs erst jetzt: Der AVR kriegt den Pin nicht runter gezogen? Das ist selten, denn ein AVR zieht bei 5V an die 100mA durch den Pin durch, d.h. das ist ein blitzsauberer Kurzschluss. Teil verreckt oder verkehrt herum.
:
Bearbeitet durch User
Hm. Der Widerstand ist korrekt und ohne den Sensor klappt's. Da müsste also der Sensor den Kurzschluss verursachen und Vcc an DQ anliegen. Komisch nur das der Controller trotzdem weiter arbeitet und nicht verreckt ist. Was für einen Widerstand müsste ich am Sensor zwischen Vcc und DQ messen?
qwertz schrieb: > Komisch nur das der Controller trotzdem weiter arbeitet und nicht > verreckt ist. Ach, an einem einzigen Pin kannst du lange einen Kurzschluss anlegen. Der Bahnwiderstand des Ausgangstransistors (30..50 Ohm) verhindert Schlimmeres: der uC wird zwar warm, geht aber nicht kaputt. Ab zwei kurzgeschlossenen Pins wirds dann interessant...
qwertz schrieb: > Also scheint der DS18B20+ defekt? Hast du davon denn nur einen einzigen? Probier halt nen zweiten.
qwertz schrieb: > Also scheint der DS18B20+ defekt? Wahrscheinlich nur verpolt. Betrachte mal im Datasheet die Pinbelegung (Stichwort: BOTTOM VIEW)
> Hast du davon denn nur einen einzigen? Probier halt nen zweiten. leider ja - nur einen :( > Wahrscheinlich nur verpolt. Mehrmals kontrolliert. Alles richtig. Wenn ich den Widerstand messe: alles gegen alles - unendlich
qwertz schrieb: > Wenn ich den Widerstand messe: alles gegen alles - unendlich Pullup stehen lassen, Sensor rausziehen - kann der uC die Leitung auf 0 ziehen ? Wenn nein, Pullup wegschmeissen. Wenn ja, Sensor reinstecken, kann der uC die Leitung auf 0 ziehen ? Wenn nein, nicht lange rumrätseln, Sensor wegschmeissen, einen neuen besorgen.
> Wenn ja, Sensor reinstecken, kann der uC die Leitung auf 0 ziehen ? > Wenn nein, nicht lange rumrätseln, Sensor wegschmeissen, einen > neuen besorgen. Das ist der Fall. Ich besorg einen neuen. Danke für all die Hilfe!
Daumenregel bei relativ billigen Bauteilen im Bastelstadium: Immer ein Exemplar mehr besorgen als man benötigt.
Wie ist das eigentlich im parasite power mode? "Optional VDD. VDD must be grounded for operation in parasite power mode." D.h. ich müsste statt 5V an Vcc GND anlegen? Im Quelltext von peter dannegger [Beitrag "DS1820, DS18B20 in C"] heißt es:
1 | void start_meas( void ) |
2 | {
|
3 | if( W1_IN & 1<< W1_PIN ) |
4 | {
|
5 | w1_command( CONVERT_T, NULL ); |
6 | W1_OUT |= 1<< W1_PIN; |
7 | W1_DDR |= 1<< W1_PIN; // parasite power on |
8 | }
|
9 | else
|
10 | {
|
11 | //uputsnl( "Short Circuit !" );
|
12 | }
|
13 | }
|
Allerdings wird in der Funktion w1_command() gleich zu Beginn w1_reset() ausgeführt:
1 | bit w1_reset(void) |
2 | {
|
3 | |
4 | bit err; |
5 | |
6 | W1_OUT &= ~(1<<W1_PIN); // PD0 auf low |
7 | W1_DDR |= 1<<W1_PIN; // PD0 auf Ausgang |
8 | |
9 | DELAY( DELAY_US( 480 )); // 480 µs warten |
10 | cli(); // interrupts sperren |
11 | W1_DDR &= ~(1<<W1_PIN); // PD0 auf Eingang |
12 | DELAY( DELAY_US( 66 )); // 66 µs warten |
13 | err = W1_IN & (1<<W1_PIN); // no presence detect |
14 | sei(); // interrupts freigeben |
15 | DELAY( DELAY_US( 480 - 66 )); |
16 | if( (W1_IN & (1<<W1_PIN)) == 0 ) // short circuit |
17 | err = 1; |
18 | return err; |
19 | }
|
Und in dieser Funktion wird ja sozusagen erkannt, dass kein Sensor, bzw ein defekter, angeschlossen ist.
qwertz schrieb: > D.h. ich müsste statt 5V an Vcc GND anlegen? Ja. Spart eine Leitung. Ausserdem darf man dann beim DS im TO-Gehäuse unten und oben verwechseln.. Und richtig: Beim Reset spielt das noch keine Rolle. Erst beim Start einer Messung.
Möglicher Grund für den Defekt? Hab nämlich an Vcc 5 V anliegen und wenn das Programm beim ersten mal bis "parasite power on" kam... ?! Oder juckt das den IC nicht?
qwertz schrieb: > Möglicher Grund für den Defekt? Die Software frisst beide Anschlusstechniken, der Sensor ebenso.
Woran erkennt man, dass die Software beide Anschlusstechniken frisst?
qwertz schrieb: > Woran erkennt man, dass die Software beide Anschlusstechniken frisst? Durchlesen. Auf die von Peter Danegger trifft es zu. Ausserdem wird dir eine für den parasitären Modus geschriebene und funktionierende Software deinen mit 5V Anschluss versehenen Sensor nicht abschiessen. Umgekehrt auch nicht, nur funktioniert es dann nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.