Hallo,
aber dann um bei mehreren Devices an einem Bus auch ein einzelnes
ansprechen zu können und die Temperaturdaten von dem dann abzufragen.
ziemlich rum Unter Assembler würd ich mir einfach nen Bereich im
SRAM dafür reservieren und die Adressen für die Speicherstellen aus ner
Basisadresse und nem Offset der aus der Devicenummer und der Bytenummer
in der ROM-ID besteht berechnen. Dann einfach mit Load oder Store drauf
zugreifen und die Sache ist erledigt. Naja ... Hochsprachen sind da
ziemlich kompliziert und von hinten durch die Brust ins Auge
Mal sehen wann ich soweit bin das ich bei Bascom direkt im SRAM auf
die Variablen und Arrays drauf rumarbeite
In Assembler laufen meine 1Wire-Routinen ja absolut problemlos. Also die
gesamte Technik und wie man was macht ist kein Thema. Nur diese
Einschränkungen von Bascom gegenüber den Möglichkeiten in Assembler
sind im Moment etwas nervig
@Bonze ...
also das ganze läuft folgendermaßen ab ...
1. mit 1wcount nachsehen wieviel am Bus hängt
2. mit 1wsearchfirst die erste ROM-ID lesen
3. mit 1wsearchnext alle weiteren ROM-IDs lesen
--- jetzt kenn man für die Adressierung auf dem Bus alle ROM-IDs
4. entweder ein gewünschtes Device über die ROM-ID oder alle über Skip-ROM
ansprechen und die Messung starten
5. so 0,7..1s warten. Die Messungen dauert etwas
6. Über Adressierung mit den ROM-IDs bei jedem Device einzeln die Ergebnisse
auslesen.
Vor manchen Aktionen muß man über 1wreset die Devices am Bus initialisieren
damit sie in einem definierten Zustand anfangen. Mit dem Befehl dreht man
denen eigentlich nur für 0,5ms den Strom ab (Bus auf GND)
CodeBox 1Wtiming
das ist ein Stück aus meinem Assembler-Code
noch was eingefallen ...
wenn man die ROM-IDs die man auf dem Bus gefunden hat im EEPROM
speichert und festlegt welche ROM-ID zB im Wohnzimmer, Flur, ... sitzt
dann muß man nicht bei jedem Reboot den Bus neu durchsuchen und hat
eine feste Zuordung der gelesenen Meßwerte zum Ort der Messung.
Gruß
Dino
im Moment ist die Rede mehr vom Auslesen der ROM-ID. Die braucht manist das beispiel jetzt zum auslesen de rom daten oder zum auslesen der temp?
aber dann um bei mehreren Devices an einem Bus auch ein einzelnes
ansprechen zu können und die Temperaturdaten von dem dann abzufragen.
weiß ich doch Da ich aber iin Bascom noch am Anfang bin eier ich da nochwie du schon sagst, hast du da einiges an Firlefanz nur um ein Pseudo 2-dimensionales Array zu erzeugen.
Im SRAM liegen die Zellen des Arrays eh hintereinander. Wenn du nun die Berechnung des Offsets selber machst, kannst du in einer Schleife dann doch sehr einfach darauf zugreifen.
ziemlich rum Unter Assembler würd ich mir einfach nen Bereich im
SRAM dafür reservieren und die Adressen für die Speicherstellen aus ner
Basisadresse und nem Offset der aus der Devicenummer und der Bytenummer
in der ROM-ID besteht berechnen. Dann einfach mit Load oder Store drauf
zugreifen und die Sache ist erledigt. Naja ... Hochsprachen sind da
ziemlich kompliziert und von hinten durch die Brust ins Auge
Mal sehen wann ich soweit bin das ich bei Bascom direkt im SRAM auf
die Variablen und Arrays drauf rumarbeite
In Assembler laufen meine 1Wire-Routinen ja absolut problemlos. Also die
gesamte Technik und wie man was macht ist kein Thema. Nur diese
Einschränkungen von Bascom gegenüber den Möglichkeiten in Assembler
sind im Moment etwas nervig
@Bonze ...
also das ganze läuft folgendermaßen ab ...
1. mit 1wcount nachsehen wieviel am Bus hängt
2. mit 1wsearchfirst die erste ROM-ID lesen
3. mit 1wsearchnext alle weiteren ROM-IDs lesen
--- jetzt kenn man für die Adressierung auf dem Bus alle ROM-IDs
4. entweder ein gewünschtes Device über die ROM-ID oder alle über Skip-ROM
ansprechen und die Messung starten
5. so 0,7..1s warten. Die Messungen dauert etwas
6. Über Adressierung mit den ROM-IDs bei jedem Device einzeln die Ergebnisse
auslesen.
Vor manchen Aktionen muß man über 1wreset die Devices am Bus initialisieren
damit sie in einem definierten Zustand anfangen. Mit dem Befehl dreht man
denen eigentlich nur für 0,5ms den Strom ab (Bus auf GND)
CodeBox 1Wtiming
; __ ___________ _________
; Init/Reset |________________/ |____________/ :
; : : : : :
; | |- 15-60us -|- 60-240us -| |
; |- >=480us ------|--------- >=480us ------------|
; |- Master Tx ----|----------- Master Rx --------|
;
;
; ___ _______ <1us _______________________
; Master Tx |___________________________/ |_____/ : : :
; : : : : : : : :
; |- 15us -|- 15us -|- 30us -| |- 15us -|- 15us -|- 30us -|
; |----- 60-120us -----------|- >1us -|----- 60-120us -----------|
; | Slave-Sample^ | | Slave-Sample^ |
; |- Master Write 0-Slot ----| |- Master Write 1-Slot ----|
;
;
; ___ >1us _______ >1us ______________________
; Master Rx |____ ________/////////////// |____ // : : :
; : : : : : : : : : :
; |- 15us ---|--- 45us ------|- >1us -|- 15us ---|--- 45us ------|
; | : ^Master-Sample | | : ^Master-Sample |
; ##### vom Master generiert ##### vom Master generiert
;
; ========== DS18S20 - Commands ==========
; 0xF0 - Search ROM 0x44 - Convert T 0x48 - Copy Scratchpad
; 0x33 - Read ROM 0x4E - Write Scratchpad 0xB8 - Recall EEPROM
; 0x55 - Match ROM 0xBE - Read Scratchpad 0xB4 - Read Power Supply
; 0xCC - Skip ROM 0xEC - Alarm Search
das ist ein Stück aus meinem Assembler-Code
noch was eingefallen ...
wenn man die ROM-IDs die man auf dem Bus gefunden hat im EEPROM
speichert und festlegt welche ROM-ID zB im Wohnzimmer, Flur, ... sitzt
dann muß man nicht bei jedem Reboot den Bus neu durchsuchen und hat
eine feste Zuordung der gelesenen Meßwerte zum Ort der Messung.
Gruß
Dino