#define _CHANGEABLE_ID_
#define _ZERO_POLLING_
-
+#define _DB_
#include "../common/OWConfig.s"
#include "../common/OWCRC8.s"
;Weitere Register sichern
push r_temp2
push r_temp
+ sdb
; Wegen Power Down Mode Widerherstellen der fallenden Flanke und disable von POWER DONW
SET_FALLING_RESET_SLEEP
push r_bcount
sbic OW_PIN,OW_PINN ;warten bis leitung wieder h
rjmp zeropolling_wait ;leitung ist low ->Schleie
in r_temp,TCNT_REG
- cpi r_temp,(~OWT_MIN_RESET)+50;aller zwei us zaehlt der timer
+ cpi r_temp,(~OWT_MIN_RESET)+OWT_ZP_WAIT_LOW_TO;aller zwei us zaehlt der timer
brsh zeropolling_timeout ;Timeout Reset?
rjmp zeropolling
zeropolling_wait:
sbis OW_PIN,OW_PINN ;warten bis leitung wieder l
rjmp zeropolling_low_imp ;Leitung ist low raus aus schleufe
in r_temp,TCNT_REG
- cpi r_temp,(~OWT_MIN_RESET)+70 ;aller zwei us zaehlt der timer
+ cpi r_temp,(~OWT_MIN_RESET)+OWT_ZP_WAIT_HIGH_TO ;aller zwei us zaehlt der timer
brsh zeropolling_timeout ;Timeout
rjmp zeropolling_wait
zeropolling_low_imp:
sts sendflag,r_sendflag
sts bcount,r_bcount
sts rwbyte,r_rwbyte
- //cdb
pop r_sendflag
pop r_rwbyte
pop r_bcount
pop r_temp
+ cdb
cbi OW_DDR,OW_PINN ;vorsichtsmassname Nicht dauerhaft auf low
pop r_temp2 //; die benutzten Register wiederherstellen
out _SFR_IO_ADDR(SREG),r_temp2
#define RESETZEROMARKER cbi _SFR_IO_ADDR(DDRB),3
#define TESTZEROMARKER sbic _SFR_IO_ADDR(DDRB),3
-//#define sdb sbi _SFR_IO_ADDR(PORTB),DB_PINN
-//#define cdb cbi _SFR_IO_ADDR(PORTB),DB_PINN
+#ifdef _DB_
+#define sdb sbi _SFR_IO_ADDR(PORTB),DB_PINN
+#define cdb cbi _SFR_IO_ADDR(PORTB),DB_PINN
+#else
+#define sdb
+#define cdb
+#endif
#define TIMER_INTERRUPT TIM0_OVF_vect
#define PIN_INTERRIPT EXT_INT0_vect
//#define OWT_WRITE 18
//#define OWT_READ 4
-#define OWT_MIN_RESET 120
+#define OWT_MIN_RESET 180
#define OWT_RESET2 80
#define OWT_RESET_PRESENT 30
#define OWT_PRESENT 130
#define OWT_WRITE 35
#define OWT_READ 12
+#define OWT_ZP_WAIT_LOW_TO 60 ; Zeit fuer die Maximale Lowzeit bei der Zerro Polling pruefung. Ist die Leitung laenger low, ist es vieleicht ein Reset
+#define OWT_ZP_WAIT_HIGH_TO 90 ; Zeit fuer die Maximale Hight zeit bis zu einem Low Impuls vom Master. Nach laengeren Pausen wird nicht mehr gepollt sondern der Interrup vererndet.
+
.macro CLEAR_TOV_FLAG
ldi r_temp,1
;set falling edge
ldi r_temp,(1<<ISC01)
out _SFR_IO_ADDR(MCUCR),r_temp
- //sbi DB_DDR,DB_PINN
+#ifdef _DB_
+ sbi DB_DDR,DB_PINN
+#endif
.endm
.global TIMER_INTERRUPT
TIMER_INTERRUPT:
+ sdb
push r_temp
in r_temp,_SFR_IO_ADDR(SREG)
push r_temp
+ cdb
sbic OW_PIN,OW_PINN ; abkuerzung wenn Leitung schon h
rjmp tint_end ; Leitung 1 kein Reset
ldi r_temp,0