CONFIG 1WIRE/de
Contents |
Funktion
Konfiguriert den Pin zur Benutzung mit 1-Wire und überschreibt die Compiler-Einstellung.
Syntax
CONFIG 1WIRE = pin [, extended=0|1]
Beschreibung
Pin |
Der Port Pin wie z.B. PORTB.0 |
extended |
Eine optionale Konstante, welche 0 oder 1 sein muss. |
Der CONFIG 1WIRE Befehl überschreibt die Compiler-Einstellungen und sollte bevorzugt werden, da auf diesem Weg die Einstellung im Quellcode gespeichert wird. Es kann nur ein Pin für 1wire angegeben werden, da mehrere 1-Wire Gräte an einem Bus betrieben werden können.
Man kann auch mehrere Pins und damit mehrere Busse benutzen. Für diesen Fall benötigen alle 1-Wire Befehle und Funktionen die Angabe des Ports und des Pins.
Die 1-Wire Kommandos und Funktionen setzen automatisch das Datenrichtungsregister und das Portregister in den richtigen Zustand.
Es ist wichtig, dass am 1-wire-Bus ein Pullup-Widerstand von 4,7 Kiloohm vorhanden ist. Der interne Pullup-Widerstand des AVRs ist nicht geeignet.
Einige 1-Wire-Chips benötigen eine extra 5V-versorgung. 1-Wire ist nur ein Werbe-Begriff, die GND-Leitung wird trotzdem noch benötigt. Das Mindeste sind also 2 Leitungen, typischerweise werden 3 gebraucht.
Extended
Die Extended Option wird nur bei mehreren Bussen/Pins gebraucht, und wenn diese Pins normale und erweiterte Adressen mischen.
Hier die Aufklärung: Als der 1-wire-Code 1995 geschrieben wurde, waren alle Portadressen normale I/O Adressen. Also Adressen, die in den I/O Bereich bis &H60 passten. Um Code zu sparen, wurde Register R31 in der Bibliothek gelöscht und das Portregister in R30 übergeben. Als Atmel die erweiterten I/O Register mit Adressen > &HFF einführte, war es möglich, R31 auf einen festen Wert zu setzen, wenn der User-Port eine erweiterte I/O Adresse hatte.
Ein Mischen der Adressen geht aber nur über den Weg, die Word-Adresse des I/O Registers der Bibliothek zu übergeben.
Und genau das macht EXTENDED = 1. Es braucht dadurch mehr Code. Diese Option wurde für einen Nutzer geschrieben, der seine Leiterplatten schon fertig hatte. Wir raten, den gleichen Port zu benutzen, wenn mehrere Pins gebraucht werden.
Siehe auch
1WRESET , 1WREAD , 1WWRITE , 1WIRECOUNT , 1WRESET , 1WSEARCHFIRST , 1WSEARCHNEXT
Beispiel
'-------------------------------------------------------------------------------- 'name : 1wire.bas 'copyright : (c) 1995-2005, MCS Electronics 'purpose : demonstrates 1wreset, 1wwrite and 1wread() 'micro : Mega48 'suited for demo : yes 'commercial addon needed : no ' pull-up of 4K7 required to VCC from Portb.2 ' DS2401 serial button connected to Portb.2 '-------------------------------------------------------------------------------- $regfile = "m48def.dat" $crystal = 4000000 $hwstack = 32 'Grundeinstellung 32 für den Hardware Stack $swstack = 10 'Grundeinstellung 10 für den Software Stack $framesize = 40 'Grundeinstellung 40 für den Frame Space 'wenn nur Bytes benutzt werden, folgende Lib für kleineren Code verwenden $lib "mcsbyte.lib" Config 1wire = Portb.0 'Angabe des Pins 'Am STK200 muß Jumper B.0 gesteckt sein Dim Ar(8) As Byte , A As Byte , I As Byte Do Wait 1 1wreset 'Resettet den Bus Print Err 'Gibt bei einem Fehler eine 1 aus 1wwrite &H33 'Kommando ROM lesen For I = 1 To 8 Ar(i) = 1wread() 'Array beschreiben Next '8 Bytes können auch mit einem mal gelesen werden, dazu folgende Zeile auskommentieren 'und die For-Next-Schleife oben löschen 'Ar(1) = 1wread(8) 'read 8 bytes For I = 1 To 8 Print Hex(ar(i)); 'Ausgabe der gelesenen Werte Next Print 'Zeilenwechsel Loop 'Achtung, der Beispielcode läuft bis zu diesem Punkt, 'weil die Do-Loop-Schleife nicht verlassen wird 'neu ist die Möglichkeit, mehr als einen 1-Wire-Bus zu benutzen 'Dazu muß folgende Syntax verwendet werden: For I = 1 To 8 Ar(i) = 0 'Array löschen, um zu sehen, daß es funktioniert Next 1wreset Pinb , 2 'Verwendung von port und pin für den 2. Bus 1wwrite &H33 , 1 , Pinb , 2 'die Anzahl Bytes muß angegeben werden '1wwrite Ar(1) , 5,pinb,2 'lesen ist auch verschieden Ar(1) = 1wread(8 , Pinb , 2) 'liest 8 Bytes von Pin 2 an PortB For I = 1 To 8 Print Hex(ar(i)); Next 'man kann auch eine Schleife mit einer Variable für die Bitnummer erzeugen! For I = 0 To 3 'für Pin 0-3 1wreset Pinb , I 1wwrite &H33 , 1 , Pinb , I Ar(1) = 1wread(8 , Pinb , I) For A = 1 To 8 Print Hex(ar(a)); Next Print Next End
Languages | English • Deutsch |
---|