Ein 1-MHz getakteter ATmega8 steuert ein 1-WIRE BUS per TWI,I2C, USART
bzw. RS232.
Bei manchen zeitkritischen Anwendungen wäre die 1-WIRE Anbindung
ziemlich schwierig:
Beitrag "SEISMOGRAPH TV FBAS composite video Eigenbau selber bauen BMA020 ATmega1284p Assembler"
Beitrag "VGA 640x480 60Hz (164x120) RGB Vollgrafic ATmega1284p Assembler"
Bis zu 64 angeschlossenen 1WIRE-SLAVES erkennt die interne
ROM-SEARCH-Routine.
Einfach per USART oder TWI x20 senden, nach einiger Zeit liegen die
geprüften ROM-IDs im SRAM und können abgerufen werden.
Eine Automatik schaltet zwischen USART- und 1-WIRE-Betrieb um.
Eine Taste ermöglicht zusätzlich einen ROM-Suchlauf, leuchtet die
ROTE-LED, dann stimmt irgend etwas nicht (z.B. CRC-Prüfung,
RESET-PRSENCE).
Bei 29 Slaves dauert der Suchlauf ca. 800ms.
Der ONE-WIRE-BUS wird permanent überwacht, bei Kurzschluss oder zu hoher
Strombelastung leuchtet die GELBE-LED und der BUS wird nach einigen ms
abgeschaltet
Tritt im Normalbetrieb ein Fehler auf, dann leuchtet die ROTE-LED, der
Fehlercode lässt sich auslesen.
Einzelne Bits / Bytes können auf dem ONE-WIRE-BUS gelesen und
geschrieben werden, aber auch ganze Kommando-Ketten verarbeitet dieses
Interface.
Beispiel:
- RESET-PRESENCE + SKIP-ROM + CONVERT "T"
- BUS-RESET (einige ms BUS auf GND)
- RESET-PRESENCE-AUSWERTUNG
- ROM-SEARCH-ROUTINE
Problem:
Manche SLAVES benötigen einen relativ hohen Strom, um gewisse Aktionen
durchzuführen (z.B. bei Temperaturmessung).
Der Programmcode ist so gestaltet, dass in diesem Fall der BUS-PIN auf
Ausgang und HIGH geschaltet wird und einen höheren Strom zur Verfügung
stellt.
Bei Bedarf kann ein FET/Transistor Unterstützung leisten.
Alternativ wäre auch ein DS2482-100 Single-Channel 1-Wire Master, die
SMD-Technologie schreckte mich nur ab.
Für Hinweise und Verbesserungsvorschläge bin ich sehr dankbar
Bernhard