Hallo, ich habe hier im Forum und bei Google schon ein wenig gesucht, aber nicht 100%ig das gefunden was ich suche. Es gibt ja hier schon einige Umsetzungen des 1wire in Software. Was ich aber gerne hätte wäre die Umsetzung per Interrupt, bzw eine Art die nicht vom Software Timing abhängt. Mir fallen da 2 Möglichkeiten ein: 1) Interrupt Lösung: Empfang: einen Interruptfähigen Pin und einen Timer nutzen. Kommt ein Interrupt, kann man anhand der Zeit des Timers feststellen ob es eine "0" oder eine "1" ist. Senden: Der Timer löst einen Interrupt aus, der sich dann um das setzen des nächsten Bits kümmert. Ähnlich des Software UART. Allerdings sehe ich hier Probleme wenn bereits andere Interrupts aktiv sind. das dürfte das Timing durcheinanderbringen, da ja immer nur ein Interrupt zur gleichen Zeit bearbeitet werden kann. 2) Über UART SPI TWI simulieren UART ist bei mir belegt, also hier mal die Beschreibung für den SPI Anschlussbild siehe Anhang. Senden: Je nach auszugebenden Signal schreibt man jetzt "11111000" (1wire "1") bzw "11000000" (1wire "0") in das SPDR Register. Wird jetzt der Takt so gewählt, das hierbei das richtige Timing entsteht sollte das ja funktionieren Empfangen: Man schreibe eine 1wire "0". Sobald der SPI Interrupt kommt, sind 8 Bits gesampelt und man kann anhand der Bits feststellen ob "0" oder "1" empfangen wurde. Ungefähr so "if (SPDR > 127) Bit=1; else Bit=0". Da das Timing zwischen den Bits nur eine Mindestpause benötigt, sollte das kein Problem sein. Der Reset darf ja gerne auch etwas länger sein (Parasite Power nicht ?) Soweit zu Theorie :-) R2 dient als Schutz und Entkopplung des SPI beim Programmieren. C1 ist optional als "Slew rate" Limiter, R1 und R3 dürften klar sein. Bei Q1 könnte ein FET eventuell besser sein. Variante 2 würde ich bevorzugen. Der SPI müsste dann ja so eingestellt werden, das ein BYTE ungefähr 80us-100us dauert. Nachteilig ist das 2-3 Pins verloren gehen. Auch konnte ich nicht genau im Datenblatt erlesen ob ich den SCK Pin noch anderweitig nutzen kann, wenn der SPI im Master Modus läuft. Allerdings wäre das Timing komplett unkritisch in Hardware realisiert. Der Prozessor ist frei für andere Interrupts wie Softuart und Co, was ja auch Zeitkritisch ist. Kann das funktionieren ? Hat das schon mal jemand umgesetzt ? Mein DS18S20 sind leider falsch(nicht) geliefert worden, so das ich noch nichts testen kann. Gruss Juergen
Nachtrag: ich habe die AP Note gelesen, wo der UART genutzt wird um den One Wire zu erzeugen. Der ist bei mir aber schon RS485 belegt. Der SPI wäre noch verfügbar. Allerdings erzeugt der SPI ja kein Start und Stopbit. Theoretisch sollte das doch durch Bit 0 und Bit 7 simuliert werden können. Es beleiben dann eben nur noch 6 Bit für die Datengenerierung bzw Datensampeln übrig. [off topic] Konnte man nicht nachträglich seinen Beitrag editieren / Betreff ändern ? [/off topic]
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.