Hey ich wollte mal fragen obs bei einer Kabellänge von ca. 70-80 cm zu starken Fehlübertragungen kommt? Ich weiß nur nich obs das ist, weil ich nur bei der Feuchtigkeit starke Schwankungen bekomme... die Temperatur scheint richtig und stabil zu bleiben.
Ist zu lang, 15 cm sollte das Kabelmaximum sein oder aber die Übertragung muß extrem verlangsamt werden. Außerdem sollte direkt am SHT ein 100nF-Keramikkondensator die Betriebsspannung abblocken und ein 4kOhm...10kOhm Pullup am Data-I/O-Pin angeschlossen werden.
Laut Datenblatt sollte das Kabel kürzer 10 cm sein, andernfalls ist eine Schirmung zwischen SCK und DATA notwendig. Eine Reduktion der Datenrate (SCK-Frequenz) kann die Übertragung stabiler machen. Ich würde die Taktfrequenz testweise auf ca 100 Hz stellen und die Fehlerrate prüfen. So dürften eigentlich keine Übertragungsfehler auftreten. Grüße, Peter
Gast
#1843403
Ein 2-Wire Interface sollte 70cm schaffen, aber natürlich nur wenn es richtig gemacht wurde. Was verwendest du als pull up, hast du einen Stützkondensator zwischen GND und VCC, sind die Leitungen irgendwie ungeschickt (parallel zu Leitungen mit hohem Strom). Was passiert, wenn du 1/10 der Geschwindigkeit für SCK verwendest ?
Hm das mit der Frequenz werd ich mal versuchen...Also als Kabel hab ich ein Flachbandkabel werd mal die Länge des Kabels verkürzen und dann mal schauen obs besser wird. Edit: Aber wiesou funktioniert dann die Temperatur richtig?
Ich habe problemlos einen SHT11 mit 50cm Flachbandkabel an einem Butterfly dran. Mit 100nF Kondensator für VCC/GND direkt am SHT11 und nur dem internen Pullup-Widerstand vom Controller. Taktung ist fast ungebremst das was der 2MHz Controller hergibt.
Hm...der Kondensator ist bei mir schon integriert auf dem Sensor. Edit: Hier mal den Quellcode, hab ihn von jemand anders im Internet bekommen vielleicht ist da ein Hacken dran:
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 | |
Gast
#1843437
Hi Da gibt es auch noch Hinweise: http://www.sensirion.com/en/pdf/product_information/AN_ESD_Latch-up_and_EMC_E.pdf MfG Spess
Also hab ich das richtig verstanden...1x 100nF so nah am Sensor wie möglich zwischen GND und VCC und dann noch jeweils einen 100nF zwischen GND und und SCK und eins zwischen GND und Data? am Sensor und am Mikrocontroller
Philip Ockert schrieb: > und dann noch jeweils einen 100nF zwischen > GND und und SCK und eins zwischen GND und Data? am Sensor und am > Mikrocontroller Nein, auf keinen Fall!
Nein, an die Datenleitungen dürfen keine so großen Kapazitäten angeschlossen werden. Zum Vermeiden von zu hoher Flankensteilheit kann man einige Pikofarad draufbauen, aber nur, wenn man weiß, was man da macht. Normal bracht man das aber nicht. Der auf Vcc ist richtig und auch wichtig. Wieso wird im Programm für einfache Anweisungen, wie das Setzen von Bits, rcall verwendet? Das geht mit Makros viel effizienter. Grüße, Peter
Aber der bei VCC und GND der ist doch da schon drauf auf dem Sensor?oder ist das ein anderer??? Ok ich muss mir mal Macros anschauen^^...nur vom Quellcode her müssts doch so komplett laufen oder?
>Aber der bei VCC und GND der ist doch da schon drauf auf dem Sensor?oder >ist das ein anderer??? Das weiß ich nicht, was da schon drauf ist. Das ist auch egal, wenn mehrere 100nF parallel auf der Versorgung sind, schadet das auch nicht. Den Quellcode sieht man ja nicht komplett, so kann ich dazu nicht sagen. Grüße, Peter
Philip Ockert schrieb: > Aber der bei VCC und GND der ist doch da schon drauf auf dem Sensor? Laut Datasheet ja. Bei mir ist es kein SHT71 sondern ein SHT11, daher separat nötig.
Dürfte ja beim Abruf der Feuchtigkeit ein Problem sein, wenn so ein riesen Unterschied ist zwischen zwei Messungen. Also hier mal der Code, der die Feuchtigkeit und Temperatur abruft:
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 | |
160 | |
161 | |
162 | |
163 | |
164 | |
165 | |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | |
195 | |
196 | |
197 | |
198 | |
199 | |
200 | |
201 | |
202 | |
203 | |
204 | |
205 | |
206 | |
207 | |
208 | |
209 | |
210 | |
211 | |
212 | |
213 | |
214 | |
215 | |
216 | |
217 | |
218 | |
219 | |
220 | |
221 | |
222 | |
223 | |
224 | |
225 | |
226 | |
227 | |
228 | |
229 | |
230 | |
231 | |
232 | |
233 | |
234 | |
235 | |
236 | |
237 | |
238 | |
239 | |
240 | |
241 | |
242 | |
Meinst du allgemein?oder meinst du bei dem Readbyte?
War falsch gelesen, sorry.
Das ist doch nicht der Code, den du laufen lässt, der lässt sich nicht assemblieren, temp1 undefined. Und bitte den Code in den Anhang, direkt so als Datei, wie sie ist. Grüße, Peter
Sind nur die Routinen von dem Sensor hab ich in ne extra Datei... die Temps sind declariert in der Main
Dann häng doch mal bitte das ganz Projekt an, so sieht ja niemand, wie die Werte überhaupt angezeigt werden. Grüße, Peter
Also hier mal das gesamte Projekt auch wenns etwas chaotisch programmiert ist.
Auf welcher Taktfrequenz läuft denn der Controller? Sind das die eingestelleten 4 MHz?
Jap sind die eingestellten 4MHz ich werd aber bald auf nen externen Quarz umstellen...weil die Uhr bis jetzt noch relativ ungenau läuft weil ich internen Takt verwende
Wackeln die Rohdaten des Sensors auch?
Du könntest statt den 100nF auch einen software-Kondnsator zwischen Vcc und sck einsetzen.
Hans Mayer schrieb: > software-Kondnsator Was'n dat?
Ja hab ich beobachtet manchmal...hat mich vorallem gewundert, dass ich manchmal mehr als 12 Bits hatte (also die letzte eins war manchmal bei 13 oder 14) was ja bei Feuchtigkeit eigentlich nicht sein darf oder?ist ja nur eine 12 Bit Messung. Aber ich werd nachher wenn meine Terrariumsteuerung ausgeht also Licht etc mal abstöpseln und mir noch mal die Bits ausgeben lassen. Wo steht das?mit dem Software Kondensator?
Was macht denn das eigentlich:
.org OVF1addr
in save_sreg, SREG
Was soll das im Fall des Timerüberlaufs bewirken, außer, dass kein reti
ausgeführt wird, und das Programm beliebigen Unsinn macht?
Ach das hab ich noch beim Kopieren von der Entprellroutine dort hinein gemacht...brauch ich wohl nicht... Edit: Was mir aufgefallen ist, meine Endzeit wird immer wieder zurück gesetzt bzw. auf 2 Stunden. Und das liegt irgendwie an dem was mein Mikrocontroller macht im Interrupt mit dem Feuchtigkeitscheck.
entprell_init:
push temp1 ; temp 1 sichern
in temp1,sreg ; SREG sichern
clr key_old
clr key_state
clr key_press
out sreg,temp1 ; sreg wieder herstellen
pop temp1
feuchte_check:
Wieso wird in der Initialisierung der Entprellung das Statusregister
gesichert? Es schadet ja nicht, aber es ist einfach überflüssig.
Was mich daran mehr stört, ist dass die entprell_init kein return hat,
also danach gleich mit feuchte_check weitermacht.
ahhh bingo^^ danke...ja das mit dem Stautsregister war so weil irgendwie dort immer das Zero Bit sich danach nicht wieder zurück gesetzt hat. Aber durch den Ret hat sich nichts geändert...bei mir ändert es jedesmal meine Endzeit_stunde auf 2 wenn ich das mit dem Feucht_check durchführen lasse.
Die Warnungen beim Assemblieren hast du gesehen?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Da ist auch Endzeit_stunde betroffen.
Lass mal die Umrechnung der Rohdaten weg und schau die Rohdaten vom
Sensor als 16 bit Zahl direkt an, diese Umrechnerei durchblicke ich
nicht ganz.
calchumhum:
//u1 in (u11:u12):
ldi temp1, LOW(C1)
ldi temp2, HIGH(C1)
ldi temp3, 0
ldi temp4, 0
ldi temp5, LOW(C23)
ldi temp6, HIGH(C23)
rcall div32
Was soll denn die Rechnerei mit den Konstanten, das kann man doch alles
vorher ausrechnen, es kommt doch immer das gleiche dabei raus. Abgesehen
davon ist die Rechnung irgendwie unnötig kompliziert und der Kommentar
nicht besonders nachvollziehbar.
Ja stimmt da ists echt sinnlos...gut ich wollts etwas so gestallten dass man bei kleineren Änderungen bei den Konstanten einfach oben das Einträgt.Diese Warnungen machen doch nichts oder?das ist doch nur weil die letzten Registern schon durch diese Z X Y definiert sind?
Also ich hab mal alles weggelassen und mach nur die Feuchtigkeitsrechnung + Bit Ausgabe...und die schwankt wie vorher. Edit: Okay ich glaub ich weiß woran es liegt...werde das Kabel noch mal auftrennen und die Lötstellen kontrollieren, weil ich dort den Fehler sehe, wenn ich das Kabel liegen lasse kommen gerade nur relativ gleiche Werte raus. Hebe ich das Kabel in die Luft und bleib aber so, dann wackeln die Werte wieder.
So langsam geb ichs auf...wenn ich den Sensor raus mache und einfach beobachte was passiert, dann kommen lauter komische Zahlen raus anstatt dass der Kontroller einfach nur noch die selben Zahlen anzeigt.
Okay hat sich erledigt war ein Problem in der Routine für den Sensor da ich dort einmal das rhh vergessen habe zu speichern...jetzt frag ich mich bloß woran es liegt dass sich immer wieder meine Endzeit auf 02:00 stellt... liegt irgendwo in der Schleife in der ich den Sensor abrufe.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.