mikrocontroller.net

Forum: Compiler & IDEs AVR 1wire per interrupt


Autor: Jürgen Sachs (jsachs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jürgen Sachs (jsachs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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]

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.