Hi, ich fummel hier jetzt schon seit 2 Tagen rum aber es will einfach
nicht klappen. Es hängt schon daran, dass der Sensor die Leitung beim
Reset nicht auf 0 zieht.
Benutze einen ATmega32 mit 16Mhz extern
Der Sensor wird extra mit Strom versorgt, also kein parasitäre
Versorgung.
4.7k Widerstand hängt an der Datenleitung als Pullup.
Meine Routine sieht so aus:
1 | uint8_t one_wire_reset() {
|
2 | uint8_t i;
|
3 |
|
4 | ONE_WIRE_OUTPUT_MODE();
|
5 | ONE_WIRE_LOW(); // Leitung auf 0 ziehen
|
6 | _delay_us(480);
|
7 |
|
8 | ONE_WIRE_INPUT_MODE(); // Pullup zieht die Leitung auf 1
|
9 | _delay_us(70);
|
10 |
|
11 | i = ONE_WIRE_PIN & (1<<ONE_WIRE_BIT); // ds1820 sollte Leitung auf 0 gezogen haben
|
12 | _delay_us(410);
|
13 |
|
14 | if ((ONE_WIRE_PIN & (1<<ONE_WIRE_BIT)) == 0)
|
15 | i = 0xFF; // Leitung scheint immer 0 zu sein (Kurzschluss?)
|
16 |
|
17 | return i; // 0 = Slave vorhanden
|
18 | }
|
Verkabelung hab ich schon mehrmals untersucht und auch neu auf dem
Steckbrett aufgebaut (nur Sensor ist da drauf mit 10cm Kabel verbunden).
Ich weiß einfach nicht, woran es liegen kann. Hab auch mal direkt vor
der Zeile _delay_us(70); eine Endlosschleife eingefügt, die auf 0
testen..es passiert aber nicht. Heut hab ich mir auch einen zweiten
Sensor geholt, um ausschließen zu können, dass der erste defekt ist.
Bin für jede Hilfe dankbar.