Hallo, hier nutzen viele den Temperaturfühler. Wie sind Eure Erfahrungen?
Wie oft melden die Müll ? Und wie lange leben die?
Ich versuche mich gerade damit an zu freunden.
Bascom stellt ja netterweise die nötigen Befehle bereit. Jedoch vertragen die keinerlei Unterbrechungen durch Interrupts. Dazu sind sie (protokollbedingt) sehr langsam. So langsam das die Interrupts zu sperren Probleme mit sich bringt. z.B. kann er nur bedingt (nicht über 19600Baud) zuhören. Für die drei wichtigsten habe ich Routinen die mit kleineren Unterbrechungen der Interrupt arbeiten. Jedoch wird dazu Timer2 verbraucht :
Display All
Die Prüfung beim Start, wie viele vorhanden sind und ob neue hinzu kamen, ist noch nicht ganz fertig.
Wie haltet Ihr das mit den Adressen? Wie wenn einer ersetzt werden muß?
Ich hab die IDs im Eeprom und frage beim Start ob alle da sind mit 1wsearchfirst/next. Dabei stellt sich raus ob einer fehlt oder ein unbekannter da zu kam.
Macht Ihr generell eine Crc Prüfung?
Zur Zeit hole ich nur die ersten beiden Byte rein. Das hatte bisher (ca 1 Stunde) keine Ausreisser obwohl der seid 15min mit einer (für ihn Müll)Datei zugebombt wird
Wie oft melden die Müll ? Und wie lange leben die?
Ich versuche mich gerade damit an zu freunden.

Source Code
- Config 1wire = Portc.5 'erzeugt keine Const :-(
- Const _1wport = Portc
- Const _1w_pin = 5
- #if _xtal >= 3500000
- Const _1ww480 = 256.5 - _xtal * 48 / 6393750
- Const _1ww420 = 256.5 - _xtal * 42 / 6393750
- Const _1ww60 = 256.5 - _xtal * 6 / 6393750
- Config Timer2 = Timer , Prescale = 64
- #else
- Const _1ww480 = 256.5 - _xtal * 48 / 799219
- Const _1ww420 = 256.5 - _xtal * 42 / 799219
- Const _1ww60 = 256.5 - _xtal * 6 / 799219
- Config Timer2 = Timer , Prescale = 8
- #endif
- Declare Sub M1wwrite(byreg R21 As Byte)
- Declare Sub M1wread(byref W() As Byte , Byreg R18 As Byte)
- 'Label M_1wreset
- Sub M1wwrite() 'R21=Daten, R16=Timerload, R17=Bitzähler
- $asm
- ldi r17,8 'Bitzähler
- cbi _1wport,_1w_pin 'reset 1Wpin
- M1wa:
- cli 'disable Ints
- sbi _1wdir,_1w_pin '1Wpin=Output
- ror r21 'Low bit in Carry
- @genus(2) 'warte 2µs
- brcc +2 'ist Bit High
- cbi _1wdir,_1w_pin 'dann 1Wpin=Input (High durch Pullup)
- ldi r16,_1ww60 'lade 60µs
- Out Tcnt2 , R16 'in Timer2
- #if _sim = 1
- cbi tifr,6
- #else
- sbi tifr,6 'Ovr2 Flag löschen
- #endif
- 'sei 'Enable Ints (3-11µs) testen???
- sbis tifr,6 'wieder High?
- Rjmp -3
- cbi _1wdir,_1w_pin 'dann 1Wpin=Input (High durch Pullup)
- @genus(2) 'warte 2µs
- sei 'Enable Ints (ca 70µs)
- dec r17 'alle Bit fertig
- brne M1wa 'nicht dann nächstes
- $end Asm
- End Sub
- Sub M1wread(w() , R18) 'x=arrayadresse, R18=Bytezähler, R21=Daten, R16=Timerload, R17=Bitzähler
- $asm
- cbi _1wport,_1w_pin
- M1ra:
- ldi r17,8
- M1rb:
- cli
- sbi _1wdir,_1w_pin
- @genus(1)
- cbi _1wdir,_1w_pin
- @genus(8)
- clc
- sbic _1wpin,_1w_pin
- sec
- ror r21
- sei
- ldi r16,_1ww60 '250
- Out Tcnt2 , R16
- #if _sim = 1
- cbi tifr,6
- #else
- sbi tifr,6
- #endif
- sbis tifr,6
- Rjmp -3
- dec r17
- brne M1rb
- st x+,r21
- dec r18
- brne M1ra
- $end Asm
- End Sub
- $asm 'M_1wreset
- Const _1wdir = _1wport - 1
- Const _1wpin = _1wport - 2
- M_1wreset:
- cbi _1wport,_1w_pin
- cli 'Disable Ints
- sbi _1wdir,_1w_pin
- ldi r16,_1ww480 'warte 480µs
- Out Tcnt2 , R16
- sei 'Enable Ints (ca 5µs)
- #if _sim = 1
- cbi tifr,6
- #else
- sbi tifr,6
- #endif
- sbis tifr,6
- Rjmp -3
- cbi _1wdir,_1w_pin
- ldi r16,_1ww60 'warte 60µs
- Out Tcnt2 , R16
- #if _sim = 1
- cbi tifr,6
- #else
- sbi tifr,6
- #endif
- sbis tifr,6
- Rjmp -3
- in r16,_1wpin
- bst r16,_1w_pin 'kein Low
- bld r6,2 'dann Err
- ldi r16,_1ww420 'warte 460µs
- Out Tcnt2 , R16
- #if _sim = 1
- cbi tifr,6
- #else
- sbi tifr,6
- #endif
- sbis tifr,6
- Rjmp -3
- ret
- $end Asm
Wie haltet Ihr das mit den Adressen? Wie wenn einer ersetzt werden muß?
Ich hab die IDs im Eeprom und frage beim Start ob alle da sind mit 1wsearchfirst/next. Dabei stellt sich raus ob einer fehlt oder ein unbekannter da zu kam.
Macht Ihr generell eine Crc Prüfung?
Zur Zeit hole ich nur die ersten beiden Byte rein. Das hatte bisher (ca 1 Stunde) keine Ausreisser obwohl der seid 15min mit einer (für ihn Müll)Datei zugebombt wird
