Hallo, ich versuche schon seit geraumer Zeit einen DS18S20 mit externer Stromversorgung ganz einfach auszulesen. Habe mich dazu an den vorgegeben Beispielcode von Maxim gehalten: http://www.maxim-ic.com/app-notes/index.mvp/id/126 Die Funktionen scheinen alle super zu funktionieren, wahrscheinlich hab ich in der Reihenfolge einen Fehler. Jedenfalls bekomme ich, wenn ich das Scratchpad auslese, in jedem der 9 Bytes nur ein "0xFD". Woran liegt das? Schöne Grüße Paul
Hallo, ich kann in deinem Code nicht's finden, wo du mal zwischen Ein- und Ausgang des Portpin umschaltest. Am besten du setzt die Portleitung dauerhaft auf Low und arbeitest nur mit DDR. -> DDR=1 Ausgang LOW -> DDR=0 Ausgang HIGH oder Eingang externen Pullup von 4.7k aber nicht vergessen. Sascha
ok, ich hab jetzt den Port auf Low gesetzt mit T_LOW und arbeite in den Funktionen nur mit DDR. Es kommt aber immer noch das gleiche Ergebnis...
Hallo Paul, bei mir steht vor dem "BE" noch ein "CC". Vergleich mal den Code:
1 | // Mach genau das, was auf Seite 19 des Datenblattes steht!
|
2 | // Das funktioniert nur bei einem 1wire-Gerät
|
3 | unsigned char temperatur(unsigned char volatile *data) |
4 | {
|
5 | unsigned char i; |
6 | |
7 | if (OW_Reset() != 0) { |
8 | // Es wurde kein Gerät gefunden!
|
9 | return 0x41; |
10 | } else { |
11 | // CCh - Master issues Skip ROM command.
|
12 | OW_Char_Write(0xCC); |
13 | // 44h - Master issues Convert T command.
|
14 | OW_Char_Write(0x44); |
15 | // hier müsste noch der starke Pullup hin.
|
16 | // Dieser ist in der Schaltung nicht vorgesehen
|
17 | // warte 1 Sekunde, bis die Temperatur umgewandelt ist
|
18 | new_delay_ms(1000); |
19 | // Reset - Master issues reset pulse.
|
20 | OW_Reset(); |
21 | // CCh - Master issues Skip ROM command.
|
22 | OW_Char_Write(0xCC); |
23 | // BEh - Master issues Read Scratchpad command.
|
24 | OW_Char_Write(0xBE); |
25 | // - Master reads entire scratchpad including CRC.
|
26 | for(i = 0; i < 9; i++) |
27 | {
|
28 | data[i] = OW_Char_Read(); |
29 | }
|
30 | // Reset - Master issues reset pulse.
|
31 | OW_Reset(); |
32 | |
33 | if (data[0] == 0xFF) return 0x42; |
34 | |
35 | if (data[0] > 0){ |
36 | return 0; |
37 | } else { |
38 | return 0x43; |
39 | }
|
40 | }
|
41 | }
|
Gruß Guido
Hab den Code jetzt nach deinem ergänzt. Kommt immer noch nur 0xFD im ScratchPad.
Hast du den Teil auch übernommen?
1 | // - Master reads entire scratchpad including CRC.
|
2 | for(i = 0; i < 9; i++) |
3 | {
|
4 | data[i] = OW_Char_Read(); |
5 | }
|
Ich komme mit deinem Zeiger in "read_data" nicht klar
1 | void read_data(unsigned char* data,unsigned char size) |
2 | {
|
3 | unsigned char i=0; |
4 | for(i=0;i<size;i++) |
5 | {
|
6 | data[i]=read_byte(); |
7 | }
|
8 | }
|
Das liegt aber daran, dass ich mit Zeigern nie einfach klar komme.
so, hab ich jetzt mal in main() so eingefügt und es kommt immer noch das gleiche....:(
hallo paul, klingt zwar doof, aber überprüf bitte nochmal die Pin-Belegung von deinem Sensor. Ich hab selber mal fast 2 Wochen verzweifelt vor dem Programmcode gesessen, bis ich feststellen musste das im Datenblatt der Sensor auf dem Kopf dargestellt ist... Grüße Tom
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.