DS18S20 an AVR welche Port?

Gast #2891947
Lesenswert?

Um das One-Wire Protokoll  sicher zu erfuellen, muss man ein strenges 
Timing erfuellen. Und sicher geht das nur mit Hardware-Unterstuetzung 
z.B. durch Timer oder Uart(siehe gerade
http://dangerousprototypes.com/2012/10/28/app-note-using-uart-to-implement-a-1-wire-bus-master/
und damit nur an bestimmten Pins
Nichtdestotrotz wird aber haeufig auch nur Bitbang mit einer 
Verzoergerungsschleife gemacht, und man hat halt gelegentlich 
Uebertragungsfehler. Man kann die Fehler durch die Pruefsummen erkennen 
oder es funktioniert halt gelegentlich nicht ganz richtig.
#2892093
Lesenswert?

Uwe Bonnes schrieb:
> Und sicher geht das nur mit Hardware-Unterstuetzung

Woher hast Du denn dieses Gerücht?

Uwe Bonnes schrieb:
> Nichtdestotrotz wird aber haeufig auch nur Bitbang mit einer
> Verzoergerungsschleife gemacht, und man hat halt gelegentlich
> Uebertragungsfehler.

Dann hast Du es falsch programmiert. Bitbang ist zuverlässig und ganz 
ohne Übertragungsfehler. Die CRC spare ich mir deshalb. Ein Fehler würde 
beim Max-Min-Thermometer ja auffallen.

Wenn Fehler auftreten, dann durch Hardwareprobleme (lange Leitung, zu 
hoher Pullup, Störungen, Reflexionen).

Natürlich muß man Interrupts kurz halten und die 15µs atomar machen.
Bei Architekturen mit Prioritäten (8051) kann man das 1-Wire auch als 
Interrupt machen. Dann können andere Interrupts beliebig langsam sein.


Peter
#2892214
Lesenswert?

Uwe Bonnes schrieb:
> und man hat halt gelegentlich
> Uebertragungsfehler. Man kann die Fehler durch die Pruefsummen erkennen
> oder es funktioniert halt gelegentlich nicht ganz richtig.

Hi Uwe, ich habe 10 Stück am AVR NET IO, ~15.000 Messwerte am Tag,
davon ~80 Messfehler. Ich fange das im Programm ab, messe einfach ein 
zweites mal ...

Die Messfehler sind aber zu 90% von EINEM Sensor, der hängt parasitär
mit auf zwei freien Adern NYM 5x1,5 der 220v Zuleitung eines Zimmers,
ca ~20 Meter bis zum AVR ;-)
Gast #2892252
Lesenswert?

Hallo,

g457 schrieb:
> ..vorzugsweise einen Pin der frei(tm) ist.
>
>> [..] PWM [..] gibt es ein besondere Grund?
>
> nope.

alles klar vielen Dank!
Habe die meisten Schaltungen in web gesehen dass alle oder fast alle an 
PWM Port angeschlossen waren.

Gruß
Martin
#2892312
Lesenswert?

Martin schrieb:
> Hallo,
>
> g457 schrieb:
>> ..vorzugsweise einen Pin der frei(tm) ist.
>>
>>> [..] PWM [..] gibt es ein besondere Grund?
>>
>> nope.
>
> alles klar vielen Dank!
> Habe die meisten Schaltungen in web gesehen dass alle oder fast alle an
> PWM Port angeschlossen waren.

Das muss nix heißen.
Sieh dir halt die zugehörigen Programme und sieh nach, wie der Pin 
benutzt wird. Dann weißt du es in jedem Einzelfall genau.
Gast #2892317
Lesenswert?

Karl Heinz Buchegger:
> Das muss nix heißen.
> Sieh dir halt die zugehörigen Programme und sieh nach, wie der Pin
> benutzt wird. Dann weißt du es in jedem Einzelfall genau.

Jap, vielen Dank den Tipp.
Gast #2892411
Lesenswert?

Peter Dannegger schrieb:
> Dann hast Du es falsch programmiert. Bitbang ist zuverlässig und ganz
> ohne Übertragungsfehler. Die CRC spare ich mir deshalb. Ein Fehler würde
> beim Max-Min-Thermometer ja auffallen.

Peter, wie willst Du denn garantieren, dass nicht durch eine Anhaeufung 
von Interrupts dein Bitbanging doch irgendwann mal nicht funktioniert? 
Klar, ein Max-Min Thermometer braucht nicht 100 % Sicherheit. Aber falls 
Du eine Anwendung hast, die auch nur auf eine falsche Messung  falsch 
reagiert, aber halt auch bei einem richtigen  Messwert ausserhalb 
gewisser Grenzen sofort reagieren muss, dann ist Bitbang mit Software 
Timing und ohne CRC nicht der richtige Ansatz.

Aber ich habe doch Bitbanging nicht verteufelt. Wenn man weiss, was man 
macht, kann man damit gut leben, wie  Henrik's Beispiel zeigt. Nur Dein 
Ansatz geht halt auch nur in bestimmten Faellen und die Aussage "Bitbang 
ist zuverlässig" ist einfach falsch!
Gast #2892412
Lesenswert?

Uwe Bonnes schrieb:
> eter, wie willst Du denn garantieren, dass nicht durch eine Anhaeufung
> von Interrupts dein Bitbanging doch irgendwann mal nicht funktioniert?

Indem man die Interrupts für den  Timing kritischen Teil ausschaltet?

Uwe Bonnes schrieb:
> Nur Dein
> Ansatz geht halt auch nur in bestimmten Faellen und die Aussage "Bitbang
> ist zuverlässig" ist einfach falsch!

Natürlich ist es das, wenn man es richtig programmiert.
#2892750
Lesenswert?

Uwe Bonnes schrieb:
> Peter, wie willst Du denn garantieren, dass nicht durch eine Anhaeufung
> von Interrupts dein Bitbanging doch irgendwann mal nicht funktioniert?

Der Read-Time Slot (15µs) wird atomar (Interruptsperre) gemacht, damit 
ist er sicher.
Die Bit-Low Time (60µs) darf 120µs nicht überschreiten, also dürfen alle 
Interrupts zusammen max 60µs verbrauchen. Das sind bei 16MHz also 960 
Zyklen.
Ist das nicht der Fall, müssen die gesamten 60µs atomar sein. Und dann 
ist alles sicher.
15 bzw. 60µs Interruptsperre sind ja nicht soviel.

Beim 8051 geht es einfacher, da nehme ich einen Timerinterrupt für das 
Timing und gebe ihm die höchste Priorität. D.h. alle anderen Interrupts 
werden einfach unterbrochen, egal wie lange sie brauchen.


Uwe Bonnes schrieb:
> Klar, ein Max-Min Thermometer braucht nicht 100 % Sicherheit.

Es würde aber jeden Ausreißer speichern, d.h. ein Fehler wäre sofort 
aufgefallen.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren