www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 1-wire


Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hätte da eine frage (bin anfänger) ich hab mir das datenblatt vom
pic18f452 angeschaut und da steht was von i2c usw. aber ich möchte
disen pic mit 1-wire betreiben geht das?

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"aber ich möchte disen pic mit 1-wire betreiben geht das?"


Slave oder Master ?

1-Wire Master geht gut in Software bzw. mit der UART.

1-Wire Slave geht nicht bzw. nur mit Bit-HW-I2C, wie es z.B. die
ATTiny26 oder ATTiny2313 von Atmel haben.

Man braucht dazu nämlich das Clock-Stretching nach jedem Bit, welches
als 0 gesendet werden soll.

Der Master sendet einen 1µs Low-Puls und der Slave muß diesen auf etwas
30µs (15..60µs) strecken ohne dazwischen auf High zu gehen.


Peter

Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der Controller schnell genug ist, erkenne ich nicht, warum das
[Software-Slave] nicht gehen soll. Ich kenne den PIC nicht, aber der
wird sich ja wohl so takten lassen, daß er das packt: maximale
Interruptverzögerung plus Umschalten des Pins auf Ausgang innerhalb
einer µs.

Zumal in der Praxis kein Master sofort nach dem release prüft, weil da
in der Regel reichlich Kapazitäten auf der Leitung hängen, die der
Pullup gar nicht so schnell laden kann. Deshalb wird ja m.W. auch
empfohlen, am Ende des Bereichs zu lesen.


Für Christoph noch der Hinweis: praktisch niemand außer Dallas/Maxim
unterstützt den 1-wire-Bus in Hardware. Er ist aber so konzipiert, daß
er sich als Master mit wenig Aufwand realisieren läßt.

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Philipp,

"Wenn der Controller schnell genug ist, erkenne ich nicht, warum das
[Software-Slave] nicht gehen soll."


ich meinte das aus rein praktischen Erwägungen, d.h. ein Slave soll ja
in der Regel auch noch was anderes machen, als ständig nur auf 1-Wire
zu warten.

Mit dem HW-Bit-I2C des ATTiny2313 hat man dann die volle Bitzeit zur
Verfügung, d.h. 20MHz * 60µs = 1200 Zyklen.

Da können also bequem noch andere Interruptquellen (UART, Timer usw.)
aktiv sein ohne daß es zu Problemen kommt

Und man kann das Ganze in C programmieren.


Wichtig ist nur, daß es ein Bit-I2C ist, d.h. daß man für jede
1-0-Flanke im Voraus bestimmen kann, ob sie gestreckt (= Senden 0) oder
nicht gestreckt (= Senden 1 oder Empfang) werden soll.

Ein ATmega128 ist also nicht dafür geeignet.


Peter

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sry keine ahnung ob master oder slave ich möchte einfach
temperatursensoren abfragen deswegen schätze ich als master?

Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie fast immer also der gute DS1820? Ja, dann ist Dein PIC der Master
und das ist nicht schwer in Software zu machen.

@Peter: Die volle Bitzeit kann man immer nutzen (in der
Interruptroutine einen Timerinterrupt setzen, bei dem der Pin dann
wieder auf Input geschaltet wird). Der andere Punkt ist beim AVR
natürlich traurig wahr: solange andere Interrupts existieren, kann
(dank fehlender Prioritäten) der Interrupt vom 1-wire-Bus empfindlich
verzögert werden. Beim PIC mit seinen seltsamen Interruptregeln mag es
noch schlimmer sein.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Philipp

"Die volle Bitzeit kann man immer nutzen"

War natürlich gemeint als Interruptresponse, d.h. mit dem HW-Bit-I2C
kann der Interrupt bis zu 45µs verzögert werden, ohne das es Probleme
gibt.

Bzw. wenn man noch per Capture die genaue Zeit der Flanke ermittelt,
dann auch bis kurz vor Ablauf der 60µs.


Für Software-Master-1-Wire gibts ja bereits was in der Codesammlung in
C, sollte, sofern man den 1-Wire laut Datenblatt verstanden hat, leicht
auf einen PIC anpaßbar sein.


Peter

Autor: Weinga-Unity (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe einen 8-BIT IO Slave mit AT89C2051 realisiert (Relaiskarte). Der
µC ist nur mit 1wire-Timing beschäftigt und in den Lücken habe ich dann
eigentlich die Funktion implementiert. @22.xxx MHz

Was das für andere µC's heißt, kann man sich ausdenken. Aber
funktionieren tuts tadellos.

mfg W.K.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.