;; ;; 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 ;; ;; 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 . ;; ;; ------------------------------------- ;; 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 ;; -------------------------------------