Ich frage jetzt einfach mal so vorne weg: Ich brauche einen C Code für einen Temperaturfühler DS18S20. Ich weisss, das das mehrfach hier diskutiert wurde nur ich möchte nichts über den Uart senden, keine extras einfach nur ein main programm, wo dieser Sensor ausgelesen wird. Das Datenblatt habe ich schon gelesen nur steht da kein c code oder keine Anleitung zum genaueren Vorgehen. Wenn man mir nur vllt eine Art Grundgerüst des Codes geben könnte oder einen guten Link, dann wäre ich sehr dankkbar
Gast
#956836
Welch Zufall, das versuch ich auch gerade: Hier mein bisheriger Code (nur Vorhandensein feststellen). Achtung meine Schaltung nutzt den Parasite-Power mode mit 2 Drähten zum Sensor.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
Den Portpin für 1-Wire Devices steuert man sinnvollerweise ausschliesslich als "Open-Collector" an. Das heisst bei AVRs: Man setzt PORTxy fest auf 0 und steuert den Pin ausschliesslich über die Richtung DDRxy. Für 0 schaltet man auf Ausgang, für 1 auf Eingang. Man vermeidet so, dass das 1-Wire-Device irgendwann gegen den Porttreiber arbeitet und dabei zweiter Sieger bleibt. Einzige Ausnahme: Wenn der Messzyklus läuft und das Device parasitär versorgt wird, dann muss der Pin den Strom liefern. Aber auch nur dann.
loetkolben wrote: > Welch Zufall, das versuch ich auch gerade: > > Hier mein bisheriger Code (nur Vorhandensein feststellen). > Achtung meine Schaltung nutzt den Parasite-Power mode mit 2 Drähten zum > Sensor. > hey cool und dein code gehtbei dir?
@loetkolben du müsstest mal sagen welche bibliotheken du verwendet hast wo kommt denn byte usw vor?
keiner mehr da? hab meinen tempsensor jetzt an Vcc geschlossen, glaube der ist schon kaputt, denn er zeiht soviel Strom, dass das Netzteil in begrenzung (1 A) geht :-(
Q.E.D.
Es gibt übrigens gut funktionierenden Code von Peter Danegger. Müsste sich in der Codesammlung finden lassen.
>hab meinen tempsensor jetzt an Vcc geschlossen, glaube der ist schon >kaputt, denn er zeiht soviel Strom, dass das Netzteil in begrenzung (1 >A) geht :-( Falsch angeschlossen. Bei parasitär von zwei Möglichkeiten genau die verkehrte genommen. Ein Beispiel gibt es bei Martin Thomas: http://www.siwawi.arubi.uni-kl.de/avr_projects/tempsensor/index.html
Schaut mal bei avrfreaks.net vorbei. Dort gibt es eine 1-wire Bibliothek fix und fertig, die bei mir einwandfrei funktioniert. http://www.avrfreaks.net/index.php?module=Freaks%20Files&func=viewFile&id=1172&showinfo=1 Wenn der Link nicht geht, nach dem Projekt "1wire" suchen. Dann kommen mehrere, das richtig Projekt ist vom 2004-09-02. Noch ein Hinweis: ich habe mir mal notiert, dass in der Datei "1wire.c" in der Funktion "OWTouchReset()" eine Paus nicht richtig hast. Laut Datenblatt müsste vor dem Verlassen der Funktion eine Pause der "Länge" J (410us) statt I (70us) sein. Gegebenenfalls nochmal im Datenblatt überprüfen, aber so funktioniert die Bibliothek bei mir zuverlässig.
Oder der Pintreiber vom Controller hat sich bei Versuch die Leitung auf 1 zu ziehen gegenüber dem DS18S20 bei seinem Versuch sie auf 0 zu ziehen endgültig durchgesetzt. Man sollte meinen, dass man den DS18S20 als TO92 parasitär kaum falsch anschliessen kann, denn eindeutiger geht es kaum.
Gast
#957253
@Marco, das geht super, zu Deiner Frage: aus einem common header,
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Bitte jetzt keine Diskussion, manche bevorzugen die C99-Typen uintxx_t usw. Und hier noch das Trace, gibt bei mir auf dem LCD die Texte aus, kannst Du erstmal auskommentieren:
1 | |
2 | |
3 | |
4 | |
5 | |
gruß, jetzt geht es an die Daten...
Gast
#957257
@Andreas Danke für den Tip bzgl. Portpin, werd ihn also nicht aktiv auf high setzen, außer wenns ans Parasite Power Strom liefern geht. Ich wollte halt gleich mal den 1-wire modus nehmen, find es cool das man den mit zwei Drähten ansteuern kann.
Gast
#957363
Hier nun der aktuelle Stand, Lesen des EPROM codes geht. Danke für die Tips, habe jetzt keinen aktiven Pullup. War auch noch n' Fehler in DS1820_Reset(), da muß auch ein Timeslot nach Melden des DS1820 eingehalten werden. Display zeigt: 10 74 8a 6b 1 8 0 10 - crc ok Freu ;-)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | |
Danke für die vielen Antowrten, wie gesgat ich bin mir eigentlich sicher das ich ncihts falsch angeschlossen habe ich denke eher das der code möglicherweise falsch war. Also hab vcc an 5 V gnd halt an Gnd und Dq über pull up 4k7 dann wurde der sensor sehr heiss. Was ist wenn der datenport dauerhaft an 5 V liegt durch zb einem flaschen Code. kann er dann kaputt gehen? Möglicherweise war er auch von anfang an defekt. naja jetzt darf ich mir erstmal einen neuen besorgen. welchen würdet ihr mir empfehlen den ds18S oder die B version? MFG
@loetkolben du hast immernoch nicht gesagt welche header du einbindet poste daoch mal deinen kompletten code von angfang bis ende danke
> Ein Beispiel gibt es bei Martin Thomas: > http://www.siwawi.arubi.uni-kl.de/avr_projects/tempsensor/index.html Hallo zusammen, bin neu im Forum und wollte mich mit einer Frage mal vorstellen. Am Anfang gleich mein outing! In C bin ich eine Niete. Da ich es nun eingesehen habe, will ich es ändern. Also kleinere Projekte realisieren. Umgebung:RNCONTROL 1.4 mit atmega32 bei 16Mhz avr-gcc Windows XP mit Hyper Terminal an RNCONTROL über MAX232 Arbeite gerade daran einen DS1820 mit dem Code von Martin Thomas anzusprechen. Es läuft alles prima, jedoch habe ich versucht den DQ des DS1820 auf Port D5 statt D6 mit "define OW_PIN PD5" in der onewire.h zu ändern, ohne Erfolg. (Ursache für den Änderungswunsch ist vorhandene Hardware mit der Beschaltung auf PD5) Wie passe ich den Port an? Ein weiterer Punkt ist, dass ich mit dem Code eine Ausgabe im Hyper Terminal erhalte, die immer in der gleichen Zeile schreibt. Also kein CR LF durchführt. Warum ist das so? Danke für die Hilfe :-)
Gast
#1128975
Moin, bin im Moment am selben Thema. Ich mache das so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
aufgerufen wird das dann so:
1 | |
Gruß Andreas
Hallo zusammen, zum Thema Hyper Terminal und kein CR LF: Im Hyper Terminal kann man unter Einstellungen/ASCII-Konfiguration den Punkt "Beim Empfang Zeilenvorschub am Zeilenende anhängen" aktivieren. Dann klappt es auch mit dem CR LF. Gruß Marco L.
Gast
#1655159
Hallo, ich habe ebenfalls den RN-Control Atmega32 @ 16MHz mit einem D18S20+ (normale Beschaltung mit Vdd, Code von Martin Thomas) und bei mir funktioniert das schon ganz gut. Im Parasite-Modus gibt der µC konstante +85,0°C aus, kennt jemand eine Lösung dafür (Delay anpassen?). Außerdem kann ich ebenfalls nicht den Port ändern (aktuell auf PD6 (am Input Capture Pin)), gibt es da eine Möglichkeit diesen zu ändern, z.B auf Port A? MfG Slevin
Gast
#1928527
Schau mal Im Datenblatt nach... Dem Sensor geht während der Conwertierung der Saft aus, und somit gibt er nur den alten im Scratchpad gespeicherten Wert aus. Hierbei den Initialisierungswert. Das heißt du mußt während er convertiert den Datenport aus High setzen. Genaue Angaben findest du im Datenblat und Powermode.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.