From eb07c81c36a283327b156eeee4d3d5030a4ed75f Mon Sep 17 00:00:00 2001 From: Tobias Date: Tue, 22 Sep 2015 11:47:52 +0200 Subject: [PATCH] Change Time Values so it works for all Adapters --- DS18B20_DS2438/OWDS18B20_DS2438.S | 2 +- common/OWPinInterrupt.s | 7 ++++--- common/OWSet_ATTINYX4.s | 18 ++++++++++++++---- common/OWTimerInterrupt.s | 2 ++ 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/DS18B20_DS2438/OWDS18B20_DS2438.S b/DS18B20_DS2438/OWDS18B20_DS2438.S index 5ffafa3..d0503b7 100644 --- a/DS18B20_DS2438/OWDS18B20_DS2438.S +++ b/DS18B20_DS2438/OWDS18B20_DS2438.S @@ -33,7 +33,7 @@ #define _CHANGEABLE_ID_ #define _ZERO_POLLING_ - +#define _DB_ #include "../common/OWConfig.s" #include "../common/OWCRC8.s" diff --git a/common/OWPinInterrupt.s b/common/OWPinInterrupt.s index b5b7b87..5cf444b 100644 --- a/common/OWPinInterrupt.s +++ b/common/OWPinInterrupt.s @@ -43,6 +43,7 @@ PIN_INTERRIPT: ;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 @@ -117,14 +118,14 @@ zeropolling: 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: @@ -143,11 +144,11 @@ no_zerromaker: 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 diff --git a/common/OWSet_ATTINYX4.s b/common/OWSet_ATTINYX4.s index de42063..b157207 100644 --- a/common/OWSet_ATTINYX4.s +++ b/common/OWSet_ATTINYX4.s @@ -47,8 +47,13 @@ #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 @@ -61,12 +66,15 @@ //#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 @@ -126,7 +134,9 @@ ;set falling edge ldi r_temp,(1<