Hallo,
muß ich den Temperatursensor an ein bestimmtes Port von Atmega
anschliessen oder kann ich beliebig irgend ein Port benutzen?
Hab etwas gegoogelt und meinstes ist an einem PWM Port angeschlossen,
gibt es ein besondere Grund?
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.
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
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 ;-)
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
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.
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.
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!
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.
Eumel schrieb:> Indem man die Interrupts für den Timing kritischen Teil ausschaltet?
Na prima,da verpasst Du evt, eine anderen Interrupt und verlierst da
Daten. Das hört sich nach Teufel mit dem Belzebug austreiben an. Wenn
man weiss, was man macht ist das okay.
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