Change Slave sends '0' during convert prozess on all DS18B20
[owSlave2.git] / DS18B20_BMP280_DS2438_SHT / OWDS18B20_DS2438.S
1
2 // Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
3 // All rights reserved. 
4 // 
5 // Redistribution and use in source and binary forms, with or without 
6 // modification, are permitted provided that the following conditions are 
7 // met: 
8 // 
9 //  * Redistributions of source code must retain the above copyright 
10 //    notice, this list of conditions and the following disclaimer. 
11 //  * Redistributions in binary form must reproduce the above copyright 
12 //    notice, this list of conditions and the following disclaimer in the 
13 //    documentation and/or other materials provided with the 
14 //    distribution. 
15 //  * All advertising materials mentioning features or use of this 
16 //    software must display the following acknowledgement: This product 
17 //    includes software developed by tm3d.de and its contributors. 
18 //  * Neither the name of tm3d.de nor the names of its contributors may 
19 //    be used to endorse or promote products derived from this software 
20 //    without specific prior written permission. 
21 // 
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
25 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
26 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
27 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
28 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
29 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
30 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
31 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
32 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
33
34 #define _CHANGEABLE_ID_
35 #define _ZERO_POLLING_
36 #define _DB_
37
38 #include "../common/OWConfig.s"
39 #include "../common/OWCRC8.s"
40
41 .extern pack1,8
42
43 //.extern  am2302_temp,2
44
45 #if  defined(__AVR_ATtiny25__)
46 .extern pack2,16
47 #else
48 .extern pack2,64
49 #endif
50 .extern  am2302_temp,2
51 .extern  am2302_hum,2
52 .comm block,1 ; Block der augegeben, geschrieben wird (Parameter von READ/WRITE Scratchpad)
53
54
55 .macro CHIP_INIT        
56 Init_EEPROM_read:
57         sbic _SFR_IO_ADDR(EECR), EEPE
58         rjmp Init_EEPROM_read
59         ldi r_temp,0
60         out _SFR_IO_ADDR(EEARH), r_temp
61         ldi r_temp,2
62         out _SFR_IO_ADDR(EEARL), r_temp
63         sbi _SFR_IO_ADDR(EECR), EERE
64         in r_temp,_SFR_IO_ADDR(EEDR)
65         sbrs r_temp,7
66         rcall hrc_recall_eeprom_func1
67 .endm
68
69 .macro COMMAND_TABLE
70                 rjmp h_readscratchpad1
71                 rjmp h_writescratchpad1
72                 rjmp h_convert_run1
73                 rjmp h_readscratchpad_adr2
74                 rjmp h_readscratchpad2
75                 rjmp h_writescratchpad_adr2
76                 rjmp h_writescratchpad2
77 .endm
78
79 #include "../common/OWRomFunctionsDual.s"
80 #include "../common/OWTimerInterrupt.s"
81
82
83
84 ; Ab hier Geraeteabhaenging
85 #define OW_READ_SCRATCHPAD1 OW_FIRST_COMMAND+0
86 #define OW_WRITE_SCRATCHPAD1 OW_FIRST_COMMAND+1
87 #define OW_CONVERT_RUN1  OW_FIRST_COMMAND+2
88 #define OW_READ_SCRATCHPAD_ADR2 OW_FIRST_COMMAND+3
89 #define OW_READ_SCRATCHPAD2 OW_FIRST_COMMAND+4
90 #define OW_WRITE_SCRATCHPAD_ADR2 OW_FIRST_COMMAND+5
91 #define OW_WRITE_SCRATCHPAD2 OW_FIRST_COMMAND+6
92
93
94
95 ;---------------------------------------------------
96 ;       READ COMMAND and start operation
97 ;---------------------------------------------------
98
99
100 h_readcommand1:
101         clr r_bytep
102 #ifndef _DIS_FLASH_
103         FLASH_COMMANDS ; muss zu erst sein....
104 #endif
105         cjmp 0xBE,hrc_set_readscratchpad1
106         cjmp 0x4E,hrc_set_writescratchpad1
107         cjmp 0x44,hrc_set_convertT1
108         cjmp 0x48,hrc_copy_scratchpad1
109         cjmp 0xB8,hrc_recall_eeprom1
110         FW_CONFIG_INFO1
111 #ifdef _CHANGEABLE_ID_
112         CHANGE_ID_COMMANDS
113 #endif
114         ldi r_mode,OW_SLEEP
115         rjmp handle_end
116
117 hrc_set_readscratchpad1:
118         ldi r_mode,OW_READ_SCRATCHPAD1
119         ldi r_sendflag,1
120         CRCInit2
121         rjmp h_readscratchpad1
122
123 hrc_set_writescratchpad1:
124         ldi r_mode,OW_WRITE_SCRATCHPAD1
125         ldi r_bytep,2 ;start to write in 2
126         rjmp handle_end
127
128 hrc_recall_eeprom1:
129         rcall hrc_recall_eeprom_func1
130         rjmp handle_end
131
132
133
134 hrc_set_convertT1:
135         ldi r_temp,1
136         sts gcontrol,r_temp
137
138         ldi r_mode,OW_CONVERT_RUN1
139         ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling
140 h_convert_run1:
141         ldi r_bcount,0
142         ldi r_rwbyte,0
143         rjmp handle_end_no_bcount       
144
145
146 hrc_copy_scratchpad1:
147         ldi r_bytep,2
148         configZ pack1,r_bytep
149         clr r_bytep
150 hrc_copy_scratchpad_EEPROM_write1:
151         sbic _SFR_IO_ADDR(EECR), EEPE   
152         rjmp hrc_copy_scratchpad_EEPROM_write1
153         ldi r_temp, (0<<EEPM1)|(0<<EEPM0)
154         out _SFR_IO_ADDR(EECR), r_temp
155         ldi r_temp,0
156         out _SFR_IO_ADDR(EEARH),r_temp
157         out _SFR_IO_ADDR(EEARL), r_bytep
158         ld  r_rwbyte,Z+
159         out _SFR_IO_ADDR(EEDR), r_rwbyte
160         sbi _SFR_IO_ADDR(EECR), EEMPE
161         sbi _SFR_IO_ADDR(EECR), EEPE
162         inc r_bytep
163         cpi r_bytep,3
164         brne hrc_copy_scratchpad_EEPROM_write1
165         rjmp handle_end
166
167
168 hrc_recall_eeprom_func1:
169         ldi r_bytep,2
170         configZ pack1,r_bytep
171         clr r_bytep
172         clr r_temp
173 hrc_recall_eeprom_EEPROM_read1:
174         sbic _SFR_IO_ADDR(EECR), EEPE
175         rjmp hrc_recall_eeprom_EEPROM_read1
176         out _SFR_IO_ADDR(EEARH), r_temp
177         out _SFR_IO_ADDR(EEARL), r_bytep
178         sbi _SFR_IO_ADDR(EECR), EERE
179         in r_rwbyte,_SFR_IO_ADDR(EEDR)
180         st Z+,r_rwbyte
181         inc r_bytep
182         cpi r_bytep,3
183         brne hrc_recall_eeprom_EEPROM_read1
184         ret
185
186
187
188
189
190
191 ;---------------------------------------------------
192 ;   READ SCRATCHPAD
193 ;---------------------------------------------------
194
195 h_readscratchpad1:
196         cpi  r_bytep,8
197         breq h_readscratchpad_crc1
198         cpi  r_bytep,9
199         breq h_readscratchpad_all1
200         configZ pack1,r_bytep
201         ld   r_rwbyte,Z
202         rjmp h_readscratchpad_endc1
203 h_readscratchpad_crc1:
204         lds  r_rwbyte,crc
205 h_readscratchpad_endc1:
206         inc  r_bytep
207         ldi  r_bcount,1 
208         rjmp handle_end
209 h_readscratchpad_all1:
210         rjmp handle_end_sleep
211
212
213
214
215
216 ;---------------------------------------------------
217 ;   WRITE SCRATCHPAD
218 ;---------------------------------------------------
219
220 h_writescratchpad1:
221         configZ pack1,r_bytep
222         inc  r_bytep
223         cpi  r_bytep,5
224         breq h_writescratchpad_all1
225         st   Z,r_rwbyte
226         rjmp handle_end
227 h_writescratchpad_all1:
228         ori r_rwbyte,0x1F ; Alle unteren Bits sind immer 1
229         st   Z,r_rwbyte
230         rjmp handle_end_sleep
231
232 ;*****************************************************************************************************************************************************************************************
233 ;*****************************************************************************************************************************************************************************************
234 ;*****************************************************************************************************************************************************************************************
235 ;*****************************************************************************************************************************************************************************************
236 ;*****************************************************************************************************************************************************************************************
237
238
239
240
241
242 h_readcommand2:
243         clr r_bytep
244 #ifndef _DIS_FLASH_
245         FLASH_COMMANDS ; muss zu erst sein....
246 #endif
247         cset 0xBE,OW_READ_SCRATCHPAD_ADR2
248         cset 0x4E,OW_WRITE_SCRATCHPAD_ADR2
249         cjmp 0x44,hrc_set_convertT2
250         cjmp 0xB4,hrc_set_convertV2
251         FW_CONFIG_INFO2
252 #ifdef _CHANGEABLE_ID_
253         CHANGE_ID_COMMANDS
254 #endif
255         rjmp handle_end_sleep
256
257
258 hrc_set_convertT2:
259         ldi r_temp,2
260         sts gcontrol,r_temp
261         lds r_temp,am2302_temp
262         sts pack2+1,r_temp
263         lds r_temp,am2302_temp+1
264         sts pack2+2,r_temp
265         rjmp handle_end_sleep
266 hrc_set_convertV2:
267         lds r_temp,pack2
268         sbrs r_temp,3
269         rjmp hrc_set_convertVV2
270         ldi r_temp,0xF4
271         sts pack2+3,r_temp
272         ldi r_temp,0x01
273         sts pack2+4,r_temp
274         rjmp hrc_set_convertend2
275 hrc_set_convertVV2:
276         ldi r_temp,3
277         sts gcontrol,r_temp
278         lds r_temp,am2302_hum
279         sts pack2+3,r_temp
280         lds r_temp,am2302_hum+1
281         sts pack2+4,r_temp
282 hrc_set_convertend2:
283         rjmp handle_end_sleep
284
285
286
287 ;---------------------------------------------------
288 ;   READ SCRATCHPAD
289 ;---------------------------------------------------
290
291 h_readscratchpad_adr2:
292         lsl r_rwbyte
293         lsl r_rwbyte
294         lsl r_rwbyte
295 #if  defined(__AVR_ATtiny25__)
296         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen
297 #endif
298         sts block,r_rwbyte
299         ldi r_sendflag,1
300         ldi r_mode,OW_READ_SCRATCHPAD2
301         CRCInit2
302 h_readscratchpad2:
303         cpi  r_bytep,8
304         breq h_readscratchpad_crc2
305         cpi  r_bytep,9
306         breq h_readscratchpad_all2
307         lds  r_temp,block
308         add  r_temp,r_bytep
309         configZ pack2,r_temp
310         ld   r_rwbyte,Z
311         rjmp handle_end_inc
312 h_readscratchpad_crc2:
313         lds  r_rwbyte,crc
314         rjmp handle_end_inc
315 h_readscratchpad_all2:
316         rjmp handle_end_sleep
317
318
319
320
321 ;---------------------------------------------------
322 ;   WRITE SCRATCHPAD
323 ;---------------------------------------------------
324 h_writescratchpad_adr2:
325         lsl r_rwbyte
326         lsl r_rwbyte
327         lsl r_rwbyte
328 #if  defined(__AVR_ATtiny25__)
329         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen
330 #endif
331         sts block,r_rwbyte
332         ldi r_mode,OW_WRITE_SCRATCHPAD2
333         ldi  r_bcount,1 
334         rjmp handle_end 
335 h_writescratchpad2:
336         cpi  r_bytep,8
337         breq h_writescratchpad_all2
338         lds  r_temp,block
339         add  r_temp,r_bytep
340         configZ pack2,r_temp
341         st   Z,r_rwbyte
342         rjmp handle_end_inc
343 h_writescratchpad_all2:
344         rjmp handle_end_sleep
345
346
347
348
349
350
351
352
353
354 #include "../common/OWPinInterrupt.s"
355 .end