Hallo zusammen,
ich bin gerade am verzweifeln: Ich kann einfach nicht die Temperatur aus
dem Dallas DS18S20 mit meinem PIC12F1840 auslesen. Ich habe den
Beispiel-Code, der bei dem Compiler mikroC pro for PIC dabei war,
weitestgehend kopiert, bekomme aber als Temperatur immer nur "0000 0000
1111 1111" ausgelesen (dadurch ist "testOut" immer eingeschaltet...
Den uC takte ich mit dem internen Oszillator mit 4 MHz.
Hallo,
ja ein Pull-up von 4,7k ist angeschlossen. Auch habe ich deutlich
größere Zeiten ausprobiert (1s oder auch 10s): Der Effekt ist der
Gleiche. Habe die Zeit wieder zurückgesetzt auf den Wert, der auch in
dem Beispiel eingestellt war...
Gruß
Peter
Das er richtig angeschlossen ist weißt du auch ?
Im Datenblatt von Dallas wird für die Grafik "BOTTOM VIEW" angegeben,
nicht das du es vertauscht hast obwohl es im parasitären Modus egal ist.
Ich meine zwar das es funtionieren müßte aber versuch trotzdem mal die
komplette Temperatur auszulesen :
temp = Ow_Read(&PORTA, 4);
temp = (Ow_Read(&PORTA, 4) << 8) + temp;
Sonnst könntest du noch versuchen den kompletten Scratchpad auszulesen
und den CRC auszuwerten.
Ich habe jetzt mal einen ganz anderen uC ausprobiert und damit
funktioniert es einwandfrei (mit 750ms)...
Kann man irgendwo nachlesen, welche uC Eindraht-Kommunikation überhaupt
unterstützen? Ich habe bei dem PIC12F1840 so meine Zweifel... Außerdem
habe ich ihn jetzt anscheinend kaputt gekriegt :-(
> Ich meine zwar das es funtionieren müßte aber versuch trotzdem mal die> komplette Temperatur auszulesen :> temp = Ow_Read(&PORTA, 4);> temp = (Ow_Read(&PORTA, 4) << 8) + temp;
Was passiert hier? Das habe ich schon mal gesehen (und ausprobiert),
aber erkenne den Sinn dahinter nicht? :-/
Mit dem anderen uC macht das überhaupt keinen Unterschied... Kann das
überhaupt sein?
Danke schon mal für die Hilfe :-)
Ich komme aus der Avr - Welt, zu den Pics kann ich dir nichts sagen.
Aber im Prinzip sollte jeder µC oneWire beherrschen, da eigentlich
nichts anderes gemacht wird als den Pin in definierten Zeitabständen
high bzw. low zu schalten.
In wie fern deinen benutzten Funktionen mit dem Pic zusammenpassen mußt
du herausfinden.
P. S. schrieb:>> temp = Ow_Read(&PORTA, 4);>> temp = (Ow_Read(&PORTA, 4) << 8) + temp;> Was passiert hier? Das habe ich schon mal gesehen (und ausprobiert),> aber erkenne den Sinn dahinter nicht? :-/> Mit dem anderen uC macht das überhaupt keinen Unterschied... Kann das> überhaupt sein?
Die Temperatur wir in zwei Bytes ausgelesen (Byte 0 LSB, Byte 1 MSB),
und anschließend durch Linksshiften zusammengesetzt.
Näheres dazu verrät dir das Datenblatt auf
Seite 4 - Table 1. Temperature/Data Relationship
Seite 7 - Figure 7. DS18S20 Memory Map
http://datasheets.maximintegrated.com/en/ds/DS18S20.pdf
>Ich habe jetzt mal einen ganz anderen uC ausprobiert...
Da ist ja der erste Verdacht, eine der vielen Alternate Pin Functions
könnte noch aktiviert sein.
Ich habe jetzt den Code, der auf einem anderen uC lief, auf einem neuen
PIC12F1840 ausprobiert, aber hier will er einfach nicht funktionieren...
Ich habe sämtliche alternativen Pin Funktionen überprüft und die sind
soweit alle standardmäßig deaktiviert.
Ganz abstrus ist folgendes: Wenn ich den internen Oszillator auf 31 kHz
stelle, läuft mein uC schneller, als wenn ich ihn auf 32 MHz
einstelle...
Hier nochmal der Code: