VOC, Programmer with 4MHz (posible)
[owSlave2.git] / common / 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 ;       READ COMMAND and start operation
96 ;---------------------------------------------------
97
98
99 h_readcommand1:
100         clr r_bytep
101 #ifndef _DIS_FLASH_
102         FLASH_COMMANDS ; muss zu erst sein....
103 #endif
104         cjmp 0xBE,hrc_set_readscratchpad1
105         cjmp 0x4E,hrc_set_writescratchpad1
106         cjmp 0x44,hrc_set_convertT1
107         cjmp 0x48,hrc_copy_scratchpad1
108         cjmp 0xB8,hrc_recall_eeprom1
109         FW_CONFIG_INFO1
110 #ifdef _CHANGEABLE_ID_
111         CHANGE_ID_COMMANDS
112 #endif
113         ldi r_mode,OW_SLEEP
114         rjmp handle_end
115
116 hrc_set_readscratchpad1:
117         ldi r_mode,OW_READ_SCRATCHPAD1
118         ldi r_sendflag,1
119         CRCInit2
120         rjmp h_readscratchpad1
121
122 hrc_set_writescratchpad1:
123         ldi r_mode,OW_WRITE_SCRATCHPAD1
124         ldi r_bytep,2 ;start to write in 2
125         rjmp handle_end
126
127 hrc_recall_eeprom1:
128         rcall hrc_recall_eeprom_func1
129         rjmp handle_end
130
131
132
133 hrc_set_convertT1:
134         ldi r_temp,1
135         sts gcontrol,r_temp
136
137         ldi r_mode,OW_CONVERT_RUN1
138         ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling
139 h_convert_run1:
140         ldi r_bcount,0
141         ldi r_rwbyte,0
142         rjmp handle_end_no_bcount       
143
144
145 hrc_copy_scratchpad1:
146         ldi r_bytep,2
147         configZ pack1,r_bytep
148         clr r_bytep
149 hrc_copy_scratchpad_EEPROM_write1:
150         sbic _SFR_IO_ADDR(EECR), EEPE   
151         rjmp hrc_copy_scratchpad_EEPROM_write1
152         ldi r_temp, (0<<EEPM1)|(0<<EEPM0)
153         out _SFR_IO_ADDR(EECR), r_temp
154         ldi r_temp,0
155         out _SFR_IO_ADDR(EEARH),r_temp
156         out _SFR_IO_ADDR(EEARL), r_bytep
157         ld  r_rwbyte,Z+
158         out _SFR_IO_ADDR(EEDR), r_rwbyte
159         sbi _SFR_IO_ADDR(EECR), EEMPE
160         sbi _SFR_IO_ADDR(EECR), EEPE
161         inc r_bytep
162         cpi r_bytep,3
163         brne hrc_copy_scratchpad_EEPROM_write1
164         rjmp handle_end
165
166
167 hrc_recall_eeprom_func1:
168         ldi r_bytep,2
169         configZ pack1,r_bytep
170         clr r_bytep
171         clr r_temp
172 hrc_recall_eeprom_EEPROM_read1:
173         sbic _SFR_IO_ADDR(EECR), EEPE
174         rjmp hrc_recall_eeprom_EEPROM_read1
175         out _SFR_IO_ADDR(EEARH), r_temp
176         out _SFR_IO_ADDR(EEARL), r_bytep
177         sbi _SFR_IO_ADDR(EECR), EERE
178         in r_rwbyte,_SFR_IO_ADDR(EEDR)
179         st Z+,r_rwbyte
180         inc r_bytep
181         cpi r_bytep,3
182         brne hrc_recall_eeprom_EEPROM_read1
183         ret
184
185
186
187
188
189
190 ;---------------------------------------------------
191 ;   READ SCRATCHPAD
192 ;---------------------------------------------------
193
194 h_readscratchpad1:
195         cpi  r_bytep,8
196         breq h_readscratchpad_crc1
197         cpi  r_bytep,9
198         breq h_readscratchpad_all1
199         configZ pack1,r_bytep
200         ld   r_rwbyte,Z
201         rjmp h_readscratchpad_endc1
202 h_readscratchpad_crc1:
203         lds  r_rwbyte,crc
204 h_readscratchpad_endc1:
205         inc  r_bytep
206         ldi  r_bcount,1 
207         rjmp handle_end
208 h_readscratchpad_all1:
209         rjmp handle_end_sleep
210
211
212
213
214
215 ;---------------------------------------------------
216 ;   WRITE SCRATCHPAD
217 ;---------------------------------------------------
218
219 h_writescratchpad1:
220         configZ pack1,r_bytep
221         inc  r_bytep
222         cpi  r_bytep,5
223         breq h_writescratchpad_all1
224         st   Z,r_rwbyte
225         rjmp handle_end
226 h_writescratchpad_all1:
227         ori r_rwbyte,0x1F ; Alle unteren Bits sind immer 1
228         st   Z,r_rwbyte
229         rjmp handle_end_sleep
230
231 ;*****************************************************************************************************************************************************************************************
232 ;*****************************************************************************************************************************************************************************************
233 ;*****************************************************************************************************************************************************************************************
234 ;*****************************************************************************************************************************************************************************************
235 ;*****************************************************************************************************************************************************************************************
236
237
238
239
240
241 h_readcommand2:
242         clr r_bytep
243 #ifndef _DIS_FLASH_
244         FLASH_COMMANDS ; muss zu erst sein....
245 #endif
246         cset 0xBE,OW_READ_SCRATCHPAD_ADR2
247         cset 0x4E,OW_WRITE_SCRATCHPAD_ADR2
248         cjmp 0x44,hrc_set_convertT2
249         cjmp 0xB4,hrc_set_convertV2
250         FW_CONFIG_INFO2
251 #ifdef _CHANGEABLE_ID_
252         CHANGE_ID_COMMANDS
253 #endif
254         rjmp handle_end_sleep
255
256
257 hrc_set_convertT2:
258         ldi r_temp,2
259         sts gcontrol,r_temp
260         lds r_temp,am2302_temp
261         sts pack2+1,r_temp
262         lds r_temp,am2302_temp+1
263         sts pack2+2,r_temp
264         rjmp handle_end_sleep
265 hrc_set_convertV2:
266         lds r_temp,pack2
267         sbrs r_temp,3
268         rjmp hrc_set_convertVV2
269         ldi r_temp,0xF4
270         sts pack2+3,r_temp
271         ldi r_temp,0x01
272         sts pack2+4,r_temp
273         rjmp hrc_set_convertend2
274 hrc_set_convertVV2:
275         ldi r_temp,3
276         sts gcontrol,r_temp
277         lds r_temp,am2302_hum
278         sts pack2+3,r_temp
279         lds r_temp,am2302_hum+1
280         sts pack2+4,r_temp
281 hrc_set_convertend2:
282         rjmp handle_end_sleep
283
284
285
286 ;---------------------------------------------------
287 ;   READ SCRATCHPAD
288 ;---------------------------------------------------
289
290 h_readscratchpad_adr2:
291         lsl r_rwbyte
292         lsl r_rwbyte
293         lsl r_rwbyte
294 #if  defined(__AVR_ATtiny25__)
295         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen
296 #endif
297         sts block,r_rwbyte
298         ldi r_sendflag,1
299         ldi r_mode,OW_READ_SCRATCHPAD2
300         CRCInit2
301 h_readscratchpad2:
302         cpi  r_bytep,8
303         breq h_readscratchpad_crc2
304         cpi  r_bytep,9
305         breq h_readscratchpad_all2
306         lds  r_temp,block
307         add  r_temp,r_bytep
308         configZ pack2,r_temp
309         ld   r_rwbyte,Z
310         rjmp handle_end_inc
311 h_readscratchpad_crc2:
312         lds  r_rwbyte,crc
313         rjmp handle_end_inc
314 h_readscratchpad_all2:
315         rjmp handle_end_sleep
316
317
318
319
320 ;---------------------------------------------------
321 ;   WRITE SCRATCHPAD
322 ;---------------------------------------------------
323 h_writescratchpad_adr2:
324         lsl r_rwbyte
325         lsl r_rwbyte
326         lsl r_rwbyte
327 #if  defined(__AVR_ATtiny25__)
328         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen
329 #endif
330         sts block,r_rwbyte
331         ldi r_mode,OW_WRITE_SCRATCHPAD2
332         ldi  r_bcount,1 
333         rjmp handle_end 
334 h_writescratchpad2:
335         cpi  r_bytep,8
336         breq h_writescratchpad_all2
337         lds  r_temp,block
338         add  r_temp,r_bytep
339         configZ pack2,r_temp
340         st   Z,r_rwbyte
341         rjmp handle_end_inc
342 h_writescratchpad_all2:
343         rjmp handle_end_sleep
344
345
346
347
348
349
350
351
352
353 #include "../common/OWPinInterrupt.s"
354 .end