diff options
author | Christian Pointner <equinox@mur.at> | 2011-07-30 23:29:00 +0000 |
---|---|---|
committer | Christian Pointner <equinox@mur.at> | 2011-07-30 23:29:00 +0000 |
commit | 7a1f9c826730c7a0ce859dc75296ad39cebb2cf4 (patch) | |
tree | fde6274b14817b4e8c92018d1ec4e1c6985bc426 | |
parent | moved RTC specific defines to rtc.inc (diff) |
one wire write commands work
git-svn-id: https://svn.spreadspace.org/mur.sat@83 7de4ea59-55d0-425e-a1af-a3118ea81d4c
-rw-r--r-- | software/ihu/ihu.asm | 204 | ||||
-rw-r--r-- | software/ihu/temp.inc | 154 |
2 files changed, 261 insertions, 97 deletions
diff --git a/software/ihu/ihu.asm b/software/ihu/ihu.asm index 9c30f43..f81701d 100644 --- a/software/ihu/ihu.asm +++ b/software/ihu/ihu.asm @@ -41,65 +41,68 @@ ;; I/O Pins ;; PortA -SOLAR_C0 EQU 0 -SOLAR_C1 EQU 1 -SOLAR_C2 EQU 2 -SOLAR_C3 EQU 3 -OWIRE EQU 4 -SOLAR_C4 EQU 5 +SOLAR_C0 EQU 0 +SOLAR_C1 EQU 1 +SOLAR_C2 EQU 2 +SOLAR_C3 EQU 3 +OWIRE EQU 4 +SOLAR_C4 EQU 5 ;; PortB -DTMF_INT EQU 0 -BAT_V EQU 1 -SOLAR_V EQU 2 -BAT_C EQU 3 -RTC_SDA EQU 4 -RTC_SCL EQU 5 -RTC_INT EQU 6 -MPU_INT EQU 7 +DTMF_INT EQU 0 +BAT_V EQU 1 +SOLAR_V EQU 2 +BAT_C EQU 3 +RTC_SDA EQU 4 +RTC_SCL EQU 5 +RTC_INT EQU 6 +MPU_INT EQU 7 ;; PortC -MPU_PWRDWN EQU 0 -MPU_RESET EQU 1 -MPU_CS EQU 2 -MPU_SCK EQU 3 -MPU_SDI EQU 4 -MPU_SDO EQU 5 -ICOM_TX EQU 6 -ICOM_RX EQU 7 +MPU_PWRDWN EQU 0 +MPU_RESET EQU 1 +MPU_CS EQU 2 +MPU_SCK EQU 3 +MPU_SDI EQU 4 +MPU_SDO EQU 5 +ICOM_TX EQU 6 +ICOM_RX EQU 7 ;; PortD -DTMF_D0 EQU 0 -DTMF_D1 EQU 1 -DTMF_D2 EQU 2 -DTMF_D3 EQU 3 -DTMF_PWRDWN EQU 4 -TTX_RESET EQU 5 -TTX_SCL EQU 6 -TTX_SDA EQU 7 +DTMF_D0 EQU 0 +DTMF_D1 EQU 1 +DTMF_D2 EQU 2 +DTMF_D3 EQU 3 +DTMF_PWRDWN EQU 4 +TTX_RESET EQU 5 +TTX_SCL EQU 6 +TTX_SDA EQU 7 ;; PortE -SOLAR_C5 EQU 0 -SOLAR_C6 EQU 1 -SOLAR_C7 EQU 2 +SOLAR_C5 EQU 0 +SOLAR_C6 EQU 1 +SOLAR_C7 EQU 2 ;; variables ;; page 0 only -TMP EQU H'0020' -TTX_BYTE EQU H'0021' -TTX_BIT_CNT EQU H'0022' -TTX_BYTE_CNT EQU H'0023' -TTX_CSUM EQU H'0024' +TMP EQU H'0020' +TTX_BYTE EQU H'0021' +TTX_BIT_CNT EQU H'0022' +TTX_BYTE_CNT EQU H'0023' +TTX_CSUM EQU H'0024' -RTC_BYTE_CNT EQU H'0028' +RTC_BYTE_CNT EQU H'0028' -WAIT_CNT EQU H'0030' +WAIT_CNT EQU H'0030' -BUF EQU H'0040' -BUF_END EQU H'004F' +BUF EQU H'0040' +BUF_END EQU H'004F' ;; all pages -RTC_BYTE EQU H'0070' -RTC_BIT_CNT EQU H'0071' +RTC_BYTE EQU H'0070' +RTC_BIT_CNT EQU H'0071' +OWIRE_BYTE EQU H'0072' +OWIRE_BIT_CNT EQU H'0073' +OWIRE_CNT EQU H'0074' -W_TEMP EQU H'007E' -STATUS_TEMP EQU H'007F' +W_TEMP EQU H'007E' +STATUS_TEMP EQU H'007F' ;; bits @@ -167,6 +170,8 @@ init movlw b'00010000' movwf OSCCON movlw b'11111111' + movwf TRISA + movlw b'11111111' movwf TRISB movlw b'11111000' movwf TRISC @@ -242,72 +247,77 @@ uart_rx_fe include "rtc.inc" ;; ------------------------------------- + include "temp.inc" + + ;; ------------------------------------- ;; MAINLOOP main movf TMP,f btfsc STATUS,Z goto main - movlw BUF - movwf FSR - call rtc_get_time + ;; movlw BUF + ;; movwf FSR + ;; call rtc_get_time - swapf BUF+2,w - andlw b'00000011' - call digit - movwf TXREG - movlw .1 - call wait_ms + ;; swapf BUF+2,w + ;; andlw b'00000011' + ;; call digit + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms - movf BUF+2,w - andlw b'00001111' - call digit - movwf TXREG - movlw .1 - call wait_ms + ;; movf BUF+2,w + ;; andlw b'00001111' + ;; call digit + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms - movlw ':' - movwf TXREG - movlw .1 - call wait_ms + ;; movlw ':' + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms - swapf BUF+1,w - andlw b'00000111' - call digit - movwf TXREG - movlw .1 - call wait_ms + ;; swapf BUF+1,w + ;; andlw b'00000111' + ;; call digit + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms - movf BUF+1,w - andlw b'00001111' - call digit - movwf TXREG - movlw .1 - call wait_ms + ;; movf BUF+1,w + ;; andlw b'00001111' + ;; call digit + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms - movlw ':' - movwf TXREG - movlw .1 - call wait_ms + ;; movlw ':' + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms + + ;; swapf BUF,w + ;; andlw b'00000111' + ;; call digit + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms - swapf BUF,w - andlw b'00000111' - call digit - movwf TXREG - movlw .1 - call wait_ms + ;; movf BUF,w + ;; andlw b'00001111' + ;; call digit + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms - movf BUF,w - andlw b'00001111' - call digit - movwf TXREG - movlw .1 - call wait_ms + ;; movlw '\r' + ;; movwf TXREG + ;; movlw .1 + ;; call wait_ms - movlw '\r' - movwf TXREG - movlw .1 - call wait_ms + call temp_init clrf TMP goto main diff --git a/software/ihu/temp.inc b/software/ihu/temp.inc new file mode 100644 index 0000000..63eab26 --- /dev/null +++ b/software/ihu/temp.inc @@ -0,0 +1,154 @@ + ;; + ;; mur.sat + ;; + ;; Somewhen in the year 2011, 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 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 TRISA,OWIRE + movlw .161 + movwf OWIRE_CNT +owire_presence_loop + decfsz OWIRE_CNT,f + goto owire_presence_loop + bsf TRISA,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 TRISA,OWIRE + nop + bsf TRISA,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 TRISA,OWIRE + movlw .21 + movwf OWIRE_CNT +owire_write0_loop + decfsz OWIRE_CNT,f + goto owire_write0_loop + bsf TRISA,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 + return + + ;; ------------------------------------- +owire_read_byte + return + + ;; ------------------------------------- +temp_init + call owire_presence + ;; btfsc OWIRE_BYTE,0 + ;; goto temp_init_error + + movlw b'10101010' + call owire_write_byte + movlw b'01010101' + call owire_write_byte + movlw b'11001100' + call owire_write_byte + movlw b'00001111' + call owire_write_byte + movlw b'00111100' + call owire_write_byte + + + movlw '.' + movwf TXREG + return + +temp_init_error + movlw 'E' + movwf TXREG + return + + ;; ------------------------------------- +temp_read_value + ;; TODO: implement this + return + + ;; ------------------------------------- |