Guten Tag,
Ich versuche nun schon eine Weile den DS18B20 am STM32F103 zum Laufen zu
bringen jdoch ohne erfolg.
Angeschlossen ist der DS18B20 an PortC.0 mit externen Pullup 4,7K wie im
Datenblatt vom DS18B20 beschrieben.
Leider bekomme ich als Ausgabe nur null.
Vielleicht kann mir einer weiterhelfen
mfg
ARMIN schrieb:> void us_Delay (u16 us)> {> while(us--);> }
Sicher, daß diese Zeile 50 Zyklen benötigt?
Wenn Dein Compiler keine <delay.h> mitbringt, nimm einen Timer und laß
den Compiler dessen Vergleichswerte berechnen.
Die Delays ausprobieren, machen nur blutige Anfänger.
Gebhard Raich schrieb:> Weiters dürfen keine Interrupt's laufen, die wieder eine unbestimmte> Verzögerungszeit einbringen. So ein Eindrahtsensor ist die letzte> Sch....>> Grüsse
Ja wenn ich die Interrupts sperre dann kann ich ja die Delay Zeit ja
nich mit nen Timer
machen oder Irre ich mich da
>Ja wenn ich die Interrupts sperre dann kann ich ja die Delay Zeit ja>nich mit nen Timer>machen oder Irre ich mich da
Timer kann man auch ohne Interrupt betreiben.
Gebhard Raich schrieb:> So ein Eindrahtsensor ist die letzte> Sch....
So kann man die eigenen schlechten Programmierfähigkeiten auf den Punkt
bringen.
Die Sensoren sind sehr leicht zu programmieren. Dreh den Spieß einfach
um, gib dem Timerinterrupt für das Bittiming die höchste Priorität, dann
stören andere Interrupts nicht.
Etwas schwieriger ist es wirklich nur bei den AVRs, da die keine
Priorität zuweisen können. 60µs Interruptsperre sind aber oft auch kein
Problem.
>So kann man die eigenen schlechten Programmierfähigkeiten auf den Punkt>bringen.
Kann ich so nicht unwidersprochen stehen lassen. Ein peripheres Gerät,
bei dem ich alle Interrupts (bis auf ev. Timer)abdrehen muß, um ihn
anzusprechen ist definitiv eine Krücke. Einziger Vorteil ist ein Draht
weniger.
Grüsse
Sorry, meine Formulierung ist etwas zu krass ausgefallen, nehme ich
hiermit zurück.
Für einfache MC-Anwendungen ist der DS1820 gut zu gebrauchen.
Aber heutzutage geht ja nichts mehr ohne OS, GUI, Webinterface, da kann
die Integration in der Tat haarig werden.
Speziell für den stm32f103 hab ich mal spaßen halber im I-Net nach einem
Beispiel gesucht
Aber nix gefunden.
Das mit der Delay Geschichte würd ich lieber übern Timer machen.
Der stm hat ja genug
So per Timer die Delay Zeiten.
Leider kommt bei mir nur 00.0 Auf die Anzeige.
Vielleicht hat einer von ihnen noch eine Idee was ich hier verkehrt
mache
mfg
Den 1-Wire darf man niemals auf 1 setzen!
Außer für parasite Power.
Er wird initial 0 gesetzt und fürderhin nur Direktion umgeschaltet.
Der Lesestart-Puls (0) sollte >=1µs sein, lesen dann nach 5..10µs.
Peter Dannegger schrieb:> Den 1-Wire darf man niemals auf 1 setzen!
Meinten sie in der init_1820
SET_OP_1WIRE ();
> Außer für parasite Power.> Er wird initial 0 gesetzt und fürderhin nur Direktion umgeschaltet.>> Der Lesestart-Puls (0) sollte >=1µs sein, lesen dann nach 5..10µs.
ARMIN schrieb:> Meinten sie in der init_1820> SET_OP_1WIRE ();
Nö, überall.
SET_OP_1WIRE (); darf genau 0 mal vorkommen.
CLR_OP_1WIRE(); genau 1 mal
Der Rest macht nur:
DIR_1WIRE_OUT();
DIR_1WIRE_IN();
Peter Dannegger schrieb:> SET_OP_1WIRE (); darf genau 0 mal vorkommen.> CLR_OP_1WIRE(); genau 1 mal> Der Rest macht nur:> DIR_1WIRE_OUT();> DIR_1WIRE_IN();
ich habe das so gemacht und
bekomme aber als Anzeige immer noch Null.
Vielleicht könnte von ihnen nochmal drüber schauen.
mfg
Hallo,
Ich habe es nach dem Beispiel vom AVR mal umgesetzt, leider bekomm ich
als Anzeige immer noch o,o Grad.
vielleicht könnte mir von ihnen einer Weiterhelfen
Hast Du mal Deine Delayfunktion überprüft, ob sie stimmt?
Ohne Sensor müssen alle Bytes 0xFF gelesen werden, auch bei falschem
Timing.
Bzw. bei Kurzschluß 0x00.
Hier mal mein Code:
Beitrag "DS1820, DS18B20 in C"
Peter Dannegger schrieb:> Hast Du mal Deine Delayfunktion überprüft, ob sie stimmt?>
Das Timing müsste so passen mit dem Timer
> Ohne Sensor müssen alle Bytes 0xFF gelesen werden, auch bei falschem> Timing.> Bzw. bei Kurzschluß 0x00.>
Aloso ohne Sensor wandert die Anzeige mal 64 ,dann 128 ,dann 32.
Mit Sensor wanderts auch ab un an mal 0 mal 2048
ARMIN schrieb:> Aloso ohne Sensor wandert die Anzeige mal 64 ,dann 128 ,dann 32.
Dann liest Du was anderes ein, aber nicht den Pin, wo der Pullup dran
hängt.
So als Ausgabe bekomme ich 4095.0 wenn der Sensor angeschlossen ist.
Bei nicht angeschlossenen Sonsor der gleiche Wert.
Entferne ich den Pullup erhalte ich 0.0
Vielleicht könnt mir noch einer Weiterhelfen.
ARMIN schrieb:> Mit Sensor wanderts auch ab un an mal 0 mal 2048ARMIN schrieb:> So als Ausgabe bekomme ich 4095.0 wenn der Sensor angeschlossen ist.
Du mußt also offensichtlich was geändert haben.
Aber niemand kann hellsehen, was.
Nun schreibe einen Test auf den Presence-Puls.
ARMIN schrieb:> Das Timing müsste so passen mit dem Timer
"Müßte" zählt nicht, überprüfe es für alle gewünschten Delays.
Peter Dannegger schrieb:> ARMIN schrieb:>> Das Timing müsste so passen mit dem Timer>> "Müßte" zählt nicht, überprüfe es für alle gewünschten Delays.
DAS Wars jetz läufts.
Louis schrieb:> Für meine Projektarbeit.
Ist der Sinn einer Projektarbeit nicht, den Code selbst zu entwickeln
statt abzukupfern? Also schreibe ihn doch!
Ich mache den 4 Jahre alten Thread jetzt zu, bevor noch einer
versehentlich auf die uralten Beiträge antwortet.
Wenn Du Fragen zu Deinem eigenen STM32-Code hast, solltest Du diese
besser in einem neu erstellten Thread stellen.