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?
"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
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.
@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
sry keine ahnung ob master oder slave ich möchte einfach temperatursensoren abfragen deswegen schätze ich als master?
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.
@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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.