summaryrefslogtreecommitdiff
path: root/software/ihu/temp.inc
blob: 821223bdc57ddd1cf0911cac4eb7211951219585 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
  ;;
  ;;  mur.sat
  ;;
  ;;  Somewhen in the year 20xx, mur.at will have a nano satellite launched
  ;;  into a low earth orbit (310 km above the surface of our planet). The
  ;;  satellite itself is a TubeSat personal satellite kit, developed and
  ;;  launched by interorbital systems. mur.sat is a joint venture of mur.at,
  ;;  ESC im Labor and realraum.
  ;;
  ;;  Please visit the project hompage at sat.mur.at for further information.
  ;;
  ;;
  ;;  Copyright (C) 2011-2015 Christian Pointner <equinox@mur.at>
  ;;
  ;;  This file is part of mur.sat.
  ;;
  ;;  mur.sat is free software: you can redistribute it and/or modify
  ;;  it under the terms of the GNU General Public License as published by
  ;;  the Free Software Foundation, either version 3 of the License, or
  ;;  any later version.
  ;;
  ;;  mur.sat is distributed in the hope that it will be useful,
  ;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
  ;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  ;;  GNU General Public License for more details.
  ;;
  ;;  You should have received a copy of the GNU General Public License
  ;;  along with mur.sat. If not, see <http://www.gnu.org/licenses/>.
  ;;
  ;; -------------------------------------
  ;; DEFINES
  ;;   constants
TEMP_CMD_R_TEMP  EQU H'AA'
TEMP_CMD_START   EQU H'EE'
TEMP_CMD_STOP    EQU H'22'
TEMP_CMD_W_TH    EQU H'01'
TEMP_CMD_W_TL    EQU H'02'
TEMP_CMD_R_TH    EQU H'A1'
TEMP_CMD_R_TL    EQU H'A2'
TEMP_CMD_W_STAT  EQU H'0C'
TEMP_CMD_R_STAT  EQU H'AC'
TEMP_CMD_R_CNT   EQU H'A0'
TEMP_CMD_L_CNT   EQU H'41'

  ;; -------------------------------------
owire_presence
  bsf       STATUS,RP0
  bcf       OWIRE
  movlw     .161
  movwf     OWIRE_CNT
owire_presence_loop
  decfsz    OWIRE_CNT,f
  goto      owire_presence_loop
  bsf       OWIRE
  bcf       STATUS,RP0
  movlw     .21
  movwf     OWIRE_CNT
owire_response_loop1
  decfsz    OWIRE_CNT,f
  goto      owire_response_loop1
  swapf     PORTA,w
  andlw     b'00000001'
  movwf     OWIRE_BYTE
  movlw     .138
  movwf     OWIRE_CNT
owire_response_loop
  decfsz    OWIRE_CNT,f
  goto      owire_response_loop
  return

  ;; -------------------------------------
owire_write1
  bsf       STATUS,RP0
  bcf       OWIRE
  nop
  bsf       OWIRE
  bcf       STATUS,RP0
  movlw     .20
  movwf     OWIRE_CNT
owire_write1_loop
  decfsz    OWIRE_CNT,f
  goto      owire_write1_loop
  return

  ;; -------------------------------------
owire_write0
  bsf       STATUS,RP0
  bcf       OWIRE
  movlw     .21
  movwf     OWIRE_CNT
owire_write0_loop
  decfsz    OWIRE_CNT,f
  goto      owire_write0_loop
  bsf       OWIRE
  bcf       STATUS,RP0
  return

  ;; -------------------------------------
owire_write_byte
  movwf     OWIRE_BYTE
  movlw     .8
  movwf     OWIRE_BIT_CNT
owire_write_loop
  btfss     OWIRE_BYTE,0
  call      owire_write0
  btfsc     OWIRE_BYTE,0
  call      owire_write1
  rrf       OWIRE_BYTE,f
  decfsz    OWIRE_BIT_CNT,f
  goto      owire_write_loop
  return

  ;; -------------------------------------
owire_readbit
  bsf       STATUS,RP0
  bcf       OWIRE
  nop
  bsf       OWIRE
  bcf       STATUS,RP0
  nop
  btfss     OWIRE
  bcf       OWIRE_BYTE,7
  btfsc     OWIRE
  bsf       OWIRE_BYTE,7
  movlw     .17
  movwf     OWIRE_CNT
owire_readbit_loop
  decfsz    OWIRE_CNT,f
  goto      owire_readbit_loop
  return

  ;; -------------------------------------
owire_read_byte
  movlw     .8
  movwf     OWIRE_BIT_CNT
owire_read_loop
  call      owire_readbit
  decfsz    OWIRE_BIT_CNT,f
  goto      owire_read_next
  return

owire_read_next
  rrf       OWIRE_BYTE,f
  goto      owire_read_loop

  ;; -------------------------------------
temp_init
  call      owire_presence
  btfsc     OWIRE_BYTE,0
  goto      temp_init_error

  movlw     TEMP_CMD_W_STAT
  call      owire_write_byte
  movlw     b'01000011'
  call      owire_write_byte
  return

temp_init_error
  ;; TODO: react to missing device
  return

  ;; -------------------------------------
temp_read_value
  bcf       OWIRE
  call      owire_presence
  btfsc     OWIRE_BYTE,0
  goto      temp_read_value_error

  movlw     TEMP_CMD_START
  call      owire_write_byte

temp_read_value_loop
  movlw     .100
  call      wait_ms
  call      owire_presence
  btfsc     OWIRE_BYTE,0
  goto      temp_read_value_error

  movlw     TEMP_CMD_R_STAT
  call      owire_write_byte
  call      owire_read_byte
  btfss     OWIRE_BYTE,7
  goto      temp_read_value_loop


  call      owire_presence
  btfsc     OWIRE_BYTE,0
  goto      temp_read_value_error

  movlw     TEMP_CMD_R_TEMP
  call      owire_write_byte
  call      owire_read_byte
  return

temp_read_value_error
  ;; TODO: react to missing device
  return

  ;; -------------------------------------