You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Title:<br />
nCube <strong>–</strong> Power supply<br />
Enclosures<br />
Arthur:<br />
Student number Surname Name<br />
310135 Cederblad Henrik<br />
310133 Fasseland Joar<br />
310134 Nordin Olof<br />
Division: Branch:<br />
Technology Electrotechnology 5 Th. Grade<br />
Teaching supervisor:<br />
Waldemar Sulkowski (<strong>HIN</strong>), Per Johan Nicklasson (<strong>HIN</strong>)<br />
Employer: Reference:<br />
<strong>HIN</strong> <strong>–</strong> <strong>Diploma</strong><br />
Master of Science<br />
P.o.box 385, Lodve Langes gate 2<br />
8501 NARVIK<br />
Telephone 76 96 60 00<br />
Fax 76 96 68 10<br />
Date: June 27 2003<br />
Graded: Open<br />
Pages: 147
1. Pre study report<br />
2. Flow scheme<br />
3. Power management program code<br />
4. PIC18LF452<br />
5. MAX1896 step up converter<br />
6. MAX1524 step up converter<br />
7. TPS62203 step down converter<br />
8. Part list DC/DC converters<br />
9. DC/DC test results<br />
10. MAX4372 current sensor<br />
11. MAX6575H,L temperature sensor<br />
12. Danionics DLP485368 battery<br />
13. 555 timer<br />
14. Micronector200 connector<br />
15. PCF8574 I/O expander<br />
16. PC74HC153D Data selector<br />
17. MAX4051 Analog multiplexer<br />
18. 4081 Logical AND<br />
19. 4070 Logical XOR<br />
20. MAX 6129 Voltage reference<br />
21. FDN335N MOSFET<br />
22. ZXM62N02E6 MOSFET<br />
23. ZXM62P02E6 MOSFET<br />
Content<br />
24. 2MHZ Crystal<br />
25. Inductance<br />
26. Resistance<br />
27. Capacitance<br />
28. Sensitivity report Step down converter<br />
29. Sensitivity report Step up converter
Title:<br />
Pre-study report<br />
nCube <strong>–</strong> Norwegian student satellite<br />
Power supply, <strong>HIN</strong><br />
Arthur:<br />
Student number Surname Name<br />
310135 Cederblad Henrik<br />
310133 Fasseland Joar<br />
310134 Nordin Olof<br />
Division: Branch:<br />
Technology Electrotechnology 5 Th. Grade<br />
Teaching supervisor:<br />
Waldemar Sulkowski (<strong>HIN</strong>), Per Johan Nicklasson (<strong>HIN</strong>)<br />
Employer: Reference:<br />
Norwegian Space Centre (NRS) Marianne Vinje Tantillo<br />
Date: March 22 2003<br />
Graded: Open<br />
Pages: 7<br />
Enclosure: 0<br />
Abstract:<br />
This report contains a pre-study for the nCube Power Supply diploma. There is a short<br />
summation on or previous work, and a figure presentation of what we are working on right<br />
now. There are also presented three “special topics” to fulfill the demands on the Master of<br />
Science diploma.<br />
Keywords:<br />
CubeSat, Power Management, DC/DC, reliability,<br />
structure, sensitivity analysis, risk analysis, hardware<br />
in the loop, simulation<br />
<strong>HIN</strong> <strong>–</strong> Project report<br />
Master of Science<br />
P.o.box 385, Lodve Langes gate 2<br />
8501 NARVIK<br />
Telephone 76 96 60 00<br />
Fax 76 96 68 10<br />
Norske stikkord:<br />
CubeSat, Power Management, DC/DC, pålitlighet,<br />
struktur, sensitivitets analyse, risikoanalyse,<br />
hardware in the loop, simulering
1. Preface<br />
After a brief discussion with our technical supervisors in this project; we have agreed that a<br />
pre-study is unnecessary. We have been working with this project since January 2001 and we<br />
all have a pretty good idea about what it involves. There have been made several reports on<br />
the subject.<br />
In the diploma there have been added three subjects which will be studied in dept. We will<br />
also deliver a brief abstract on the previous reports together with a work flow sheet, and a<br />
small presentation of what we are doing right now. We will also present the three “special<br />
topics” to be able to accomplish the demands on Master of Science diploma.
2. Introduction<br />
We are a group of three students at <strong>HIN</strong>; which is only a small part of a total of 25 students<br />
divided between three different Universities (<strong>HIN</strong>, HTNU and NLH). The purpose of this<br />
project (beside constructing and launce the first Norwegian student satellite) was to gain a<br />
better cooperation between the different Universities in Norway together with increasing the<br />
interest of science study in high school.<br />
3. Concept<br />
nCube is a Cube Sat, a concept developed by Stanford University. The concept is based on a<br />
fixed size satellite, and a standard launch method (p-pod). The satellite must not exceed these<br />
limits.<br />
Size: 10*10*10 cm<br />
Weight 1 kg<br />
Picture 1: Shows a CubeSat
4. A brief summation of our previous work<br />
4.1. Power Supply<br />
When we were promoted to this task in January 2001; or main task was to make some<br />
suggestions on a technical solution on the power supply part, and deliver a report to Norsk<br />
Rom Senter (NRS) the 1 July (Technical solution). There were made three different solutions<br />
all based on switch mode power supply, and a micro controller which will handle the power<br />
management.<br />
Since 1 July 2001, one of the solutions was chosen, and upgraded several times. There have<br />
also been bought several components which we have tested in the laboratory, and documented<br />
in a report delivered to <strong>HIN</strong> January 2002 (Fase 3). Between these reports we have been<br />
participating in several work shops in Narvik, Trondheim and Oslo. Revues have been done<br />
on our work to be able to integrate the other sub systems.<br />
In these days the first “over sized” circuit board is designed and produced. The power supply<br />
block schema will look like this:<br />
Picture 2: Shows a block schematic overview of the Power Supply circuit board. The chosen components<br />
and voltage, current and temperature sensors are displayed. The different currents and voltages are also<br />
displayed.
4.2. Backplane<br />
Beside the power supply circuit board, the backplane on satellite is also produced together<br />
with Egil Eide. The backplane will be like a motherboard on a PC. It will contain all the<br />
connectors connecting the different subsystems together in the satellite. The backplane circuit<br />
board will be two of the total four layer power supply circuit.<br />
The backplane is also under construction and will look like this.<br />
Picture 3: Shows the top side of the Backplane circuit board. All the connectors from all of the<br />
subsystems, the solar cells and the antennas are displayed.
5. Special topics<br />
These tasks should contain:<br />
- Literature study<br />
- Analyze of the existing topologies with focus on demands and challenge.<br />
- Construction of a practical model and testing<br />
5.1. Power management <strong>–</strong> Structure with focus on reliability<br />
This task will be very theoretically. It will document on how the power management<br />
should be constructed to be reliable and well structured. The power management on board<br />
the nCube satellite is a soft “real time system”, so there is no room for malfunctions, but<br />
no hard. This task should survey what could go wrong in the complete power supply<br />
system. Are there other ways to built it to get it more reliably, redundancy?<br />
5.2. DC/DC power converter/ power valve <strong>–</strong> structure,<br />
sensitivity analysis, evaluation of EMC<br />
The task is mainly a theoretical one. To study the structure of dc/dc converters and make<br />
sensitivity analyses. This is to study how to make dc/dc converters more stable and<br />
reliable. One part is to look at the EMC problems, how to shield the converter from being<br />
disturbed by other systems and to make sure not to disturb.<br />
5.3. “Hardware in the loop” <strong>–</strong> preparation for simulation/<br />
testing in realistic environments.<br />
The task with “hardware in the loop” is to build and program a realistic environment for<br />
testing the power supply system on the satellite. This is made by connecting the different<br />
inputs and outputs on the satellite to simulated inputs/outputs in dSpace. dSpace is<br />
programmed with matlab/simulink. The different inputs to the satellite are temperature and<br />
sunlight, outputs is different subsystem loads. The I2C data communication busses are<br />
divided in one output bus and one input bus.
6. Work flow sheet<br />
Picture 4: Shows the work flow sheet of the nCube and the diploma work
main_routine(1)<br />
INIT<br />
Check recived_i2c_data()<br />
Read_iu_routine ()<br />
Read_temp_routine_line1()<br />
Read_temp_routine_line2()<br />
ctrl_sens_value_routine()<br />
write_to_logg()<br />
Empty registers<br />
init I2C interrupt routine<br />
(10 byte)
Read_iu_routine() part1<br />
START<br />
Init AD<br />
MUX=port0, AD=AN0<br />
(sensor I_mag)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_mag Bank0<br />
AD=AN1<br />
(sensor U_sun)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to U_sun Bank0<br />
MUX=port1<br />
(sensor U_bat)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to U_bat Bank0<br />
AD=AN0<br />
(sensor I_in)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_in Bank0<br />
MUX=port2<br />
(sensor I_out)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_out Bank0<br />
AD=AN1<br />
(sensor U_dd)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to U_dd Bank0<br />
MUX=port3<br />
(sensor U_s)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to U_s Bank0<br />
AD=AN1<br />
(sensor I_dd)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_dd Bank0<br />
MUX=port4<br />
(sensor U_vhf)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to U_vhf Bank0<br />
To the next side
Read_iu_routine() part2<br />
AD=AN0<br />
(sensor I_uhf)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_uhf Bank0<br />
MUX=port5<br />
(sensor I_s)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_s Bank0<br />
AD=AN1<br />
(sensor U_ais)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to U_ais Bank0<br />
MUX=port6<br />
(sensor U_mag)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to U_mag Bank0<br />
AD=AN0<br />
(sensor I_vhf)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_vhf Bank0<br />
MUX=port7<br />
(sensor I_ais)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_ais Bank0<br />
AD=AN1<br />
(sensor U_uhf)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to U_uhf Bank0<br />
AD=AN2<br />
(sensor I_sun)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_sun Bank0<br />
AD=AN5<br />
(I_uaf_ampl)<br />
Call<br />
Subrutine_Read_AD<br />
Writes to I_amp_uhf<br />
Return
Subrutine_ Read_AD()<br />
Delay<br />
(Wait for MUX)<br />
If AD finish?<br />
YES<br />
START<br />
Start AD converter<br />
(sample & hold)<br />
Delay<br />
(wait one cycle)<br />
Reads 8 MSB to<br />
Work memory<br />
Return<br />
NO
Read_temp_routine_line1()<br />
NO<br />
Clr Flag0<br />
Empty registers<br />
(Data_pins=output)<br />
Init t_pointer = h51<br />
Init i_counter = h52<br />
Set timer0 = 63536<br />
Save error_return_adr<br />
Data=0?<br />
YES<br />
START<br />
Reset<br />
Temperature sensores<br />
(data=0; for 16ms)<br />
Setup (enable) sensores<br />
(Data=1; for min 10us)<br />
Startup pulse<br />
(Data=0; for min 2,5us)<br />
Data=1<br />
Data_pins=input<br />
Start timer_0<br />
Enable timer_0_interrupt<br />
Start timer_1<br />
NO<br />
YES<br />
Data=1?<br />
Stop timer_1<br />
Read timer_1<br />
(reads the temperature)<br />
NO<br />
Inc t_pointer<br />
T_pointer=h57?<br />
YES<br />
Flag0=1?<br />
NO<br />
Return<br />
YES<br />
Error_return_adr
Read_temp_routine_line2()<br />
NO<br />
YES<br />
START<br />
Clear Flag0<br />
Empty registers<br />
(Data_pins=output)<br />
Init t_pointer = h57<br />
Init i_counter = h58<br />
Set timer0 = 63536<br />
Save error_return_adr<br />
Reset<br />
Temperature sensores<br />
(data=0; for 16ms)<br />
Setup (enable) sensores<br />
(Data=1; for min 10us)<br />
Startup pulse<br />
(Data=0; for min 2,5us)<br />
Data=1<br />
Data_pins=input<br />
Start timer_0<br />
Enable timer_0_interrupt<br />
Data=0?<br />
Start timer_1<br />
NO<br />
YES<br />
Data=1?<br />
Stop timer_1<br />
Read timer_1<br />
(reads the temperature)<br />
NO<br />
Inc t_pointer<br />
T_pointer=h5C?<br />
YES<br />
Flag0=1?<br />
NO<br />
Return<br />
YES<br />
Error_return_adr
ctrl_sense_routine()<br />
NO<br />
Init ctrl_pointer = h40<br />
Init limit_pointer=h8C<br />
(=min)<br />
Limit_pointer<<br />
Ctrl_pointer?<br />
YES<br />
START<br />
Inc limit_pointer<br />
(=max)<br />
Limit_pointer><br />
Ctrl_pointer?<br />
YES<br />
Inc limit_pointer<br />
inc ctrl_pointer<br />
Limit_pointer=<br />
h5D<br />
YES<br />
NO<br />
NO<br />
call error_subroutine()<br />
call error_subroutine()<br />
Call error_handler_subroutine()<br />
Call check_digipeat_subroutine()<br />
Return<br />
Brings the error_byte
error_subroutine() Part1<br />
START<br />
Limit_pointer<br />
Limit_pointer=<br />
hB4hD2?<br />
(U)<br />
NO<br />
NO<br />
Limit_pointer=<br />
H8ChB2?<br />
(I)<br />
Limit_pointer=<br />
hD4hFE?<br />
(T)<br />
NO<br />
YES<br />
YES<br />
YES<br />
Limit_pointer=<br />
BC?<br />
NO<br />
Limit_pointer<br />
=C0?<br />
NO<br />
Limit_pointer<br />
=C4?<br />
NO<br />
YES<br />
YES<br />
YES<br />
Subsytem<br />
on?<br />
Limit_pointer=<br />
8C?<br />
NO<br />
Limit_pointer<br />
=A0?<br />
NO<br />
Limit_pointer<br />
=A8?<br />
NO<br />
YES<br />
YES<br />
YES<br />
Subsytem<br />
on?<br />
YES<br />
NO<br />
Set error_byte =<br />
00010000<br />
Set error_byte =<br />
00100000<br />
Set error_byte =<br />
01000000<br />
Continue at error_subroutine()Part2
error_subroutine() Part2<br />
Limit_pointer=<br />
h8E||hC0||hC2?<br />
NO<br />
Limit_pointer=<br />
h9A||hB4||hD4<br />
||hD6?<br />
NO<br />
Limit_pointer=<br />
hBC||hBE||hA6||hE8<br />
||hEA<br />
NO<br />
Limit_pointer=<br />
hAE||hC4||hC6<br />
||hDC||hDE?<br />
NO<br />
YES<br />
YES<br />
YES<br />
YES<br />
Limit_pointer=<br />
hC4?<br />
YES<br />
AIS<br />
On?<br />
Limit_pointer=<br />
hBC?<br />
NO<br />
YES<br />
S-band<br />
On?<br />
Limit_pointer=<br />
hC0?<br />
YES<br />
YES<br />
Magnetometer<br />
On?<br />
NO<br />
NO<br />
NO<br />
YES<br />
NO<br />
YES<br />
Set error_byte =<br />
00000001<br />
Set error_byte =<br />
00000010<br />
Set error_byte =<br />
00000100<br />
Set error_byte =<br />
00001000<br />
Return
error_handler_subroutine()<br />
Error_byte=0<br />
NO<br />
START<br />
Error_byte=<br />
00000001<br />
NO<br />
Error_byte=<br />
00000010<br />
NO<br />
Error_byte=<br />
00000100<br />
NO<br />
Error_byte=<br />
00001000<br />
NO<br />
Call write_to_logg()<br />
(h5C Bank0)<br />
YES<br />
YES<br />
YES<br />
YES<br />
YES<br />
Turn of mag<br />
RC6=0<br />
Turn of all subsystem<br />
RC5RC7=0<br />
Turn of S-band<br />
RC5=0<br />
Turn of AIS<br />
RC7=0<br />
Error_byte = 0<br />
Return
Write_to_log()<br />
Get pointers from EEPROM<br />
Initialize loop values<br />
Copy value from RAM to FLASH latch<br />
Loop numbers=<br />
8?<br />
NO<br />
START<br />
10<br />
minutes since<br />
last written<br />
log?<br />
YES<br />
NO<br />
Step up pointers and loop numbers<br />
NO<br />
YES<br />
Return<br />
Write to Flash<br />
Step up loop2 number<br />
Loop2 numbers<br />
=4?<br />
Save pointers to EEPROM<br />
Save time for last log<br />
Return
I2C_interupt_routine()<br />
Inc i2c_pointer<br />
NO<br />
START<br />
Load i2c_pointer<br />
Move I2C data to<br />
What i2c_pointer points at<br />
Clr i2c_buffer<br />
I2c_pointer<br />
= complete?<br />
i2c_pointer = start adr<br />
Put I2C ready state<br />
Return<br />
YES
Timer0_interrupt()<br />
START<br />
T_pointer=i_counter? YES<br />
NO<br />
Stop Timer1<br />
Put hFF to tmr1H & tmr1L<br />
Increase t_pointer<br />
Pop stack<br />
Load error_return_adr to satck<br />
Load timer0 from Tab[t_pointer]<br />
Inc i_counter<br />
Return
Send_from_logg()<br />
START<br />
Save log_pointer value<br />
Init tmp_mem = 0<br />
Inc tmp_mem<br />
Sum=Log_pointer-tmp_mem*30<br />
Sum=negative?<br />
YES<br />
NO<br />
Log_pointer= temp_mem*30+1<br />
I2C buffer<br />
Ready?<br />
YES<br />
NO<br />
Move from Log_pointer to I2C buffer<br />
Inc log_pointer<br />
YES<br />
Log_pointer=d141? Set log_pointer=0<br />
NO<br />
Log_pointer=<br />
temp_mem*30?<br />
NO<br />
YES<br />
Load log_pointer value<br />
Return
I2C_command() part1<br />
NO<br />
NO<br />
Flag2=1?<br />
NO<br />
START<br />
YES<br />
Flag1=1?<br />
Flag3=1?<br />
NO<br />
YES<br />
Flag1=1?<br />
YES<br />
YES<br />
Call<br />
subroutine send_status<br />
Call<br />
subroutine send_logg<br />
Flag0 = interrupt occurred or no I2C_ack<br />
Flag1 = I2C_send enable<br />
Flag2 = status_send_complete<br />
Flag3 = logg_send_complete<br />
Continues on next page
NO<br />
YES<br />
Return<br />
Command=<br />
clk_command?<br />
Set flag1<br />
Command=<br />
Pause_cmd?<br />
NO<br />
YES<br />
Return<br />
NO<br />
YES<br />
Command=<br />
resume_cmd?<br />
Command=<br />
Send_status?<br />
NO<br />
YES<br />
Call<br />
Subroutine<br />
Send_status<br />
NO<br />
YES<br />
Command=<br />
AIS_on?<br />
Command=<br />
AIS_off?<br />
NO<br />
YES<br />
NO<br />
YES<br />
Command=<br />
mag_on?<br />
Command=<br />
mag_off?<br />
NO<br />
YES<br />
YES<br />
Command=<br />
Send_logg?<br />
NO<br />
YES<br />
Command=<br />
S-band_on?<br />
NO<br />
Call<br />
Subroutine<br />
Send_logg<br />
Call<br />
Subroutine<br />
AIS_on<br />
Call<br />
Subroutine<br />
AIS_off<br />
Call<br />
Subroutine<br />
Mag_on<br />
Call<br />
Subroutine<br />
mag_off<br />
Call<br />
Subroutine<br />
S-band_on<br />
NO<br />
YES<br />
Command=<br />
S-band_off<br />
Command=<br />
AIS_off?<br />
NO<br />
YES<br />
NO<br />
Command=<br />
Reset_PMU?<br />
YES<br />
Call<br />
Subroutine<br />
Sband_off<br />
Call<br />
Subroutine<br />
AIS_off<br />
Reset<br />
Return<br />
Continue from<br />
previous page<br />
I2C_command() part2
#INCLUDE EQUN.ASM<br />
#INCLUDE TEXT.ASM<br />
#INCLUDE COMANDS.ASM<br />
#INCLUDE P18F452.INC<br />
vector<br />
PMUcode.txt<br />
ORG RES_V<br />
GOTO START ;Puts the start address in start<br />
ORG INT_H<br />
GOTO I2C_INTERUPT ;Put I2C as high priority<br />
interrupt<br />
ORG INT_L<br />
GOTO TIMER0_INTERUPT ;Put Timer0 as low priority<br />
interrupt<br />
ORG RETADR1<br />
GOTO ERROR_RETURN1 ;Sets return address in<br />
temp-routines<br />
ORG RETADR2<br />
GOTO ERROR_RETURN2<br />
ORG RETADRI2C<br />
GOTO SEND_I2C<br />
ORG START_ADR ;Sets the start address<br />
START<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;Initialising of memories, flags and registers ;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
MOVLW B'11000000'<br />
MOVWF INTCON<br />
CLRF INTCON2<br />
CLRF INTCON3<br />
CLRF ADCON0<br />
MOVLW B'01000011'<br />
MOVWF ADCON1<br />
MOVLW B'00001000'<br />
MOVWF T0CON<br />
MOVLW B'10000000'<br />
MOVWF T1CON<br />
MOVLW H'01'<br />
MOVWF FSR1H<br />
CLRF FSR1L<br />
CLRF BSR<br />
CLRF PIR1<br />
CLRF PIR2<br />
MOVLW B'00001000'<br />
MOVWF IPR1<br />
MOVLW B'00001000'<br />
MOVWF PIE1<br />
CLRF PIE2<br />
CLRF IPR2<br />
Side 1
PMUcode.txt<br />
MOVLW B'10000000'<br />
MOVWF RCON<br />
MOVLW B'11000100'<br />
MOVWF SSPSTAT<br />
MOVLW B'00110110'<br />
MOVWF SSPCON1<br />
MOVLW B'10000000'<br />
MOVWF SSPCON2<br />
MOVLW B'00011000'<br />
MOVWF TRISC<br />
CLRF TRISD ;Sets PORTD To outputs<br />
CLRF PORTD<br />
CLRF TRISE ;Sets PORTE To outputs<br />
CLRF PORTE<br />
SETF TRISA ;Sets PORTA as Inputs<br />
MOVLW B'11111000'<br />
MOVWF TRISB ;Sets PORTB as In/Out-puts<br />
CLRF PORTB<br />
CLRF MEM<br />
CLRF COMAND<br />
MOVLW ADR_PMU<br />
MOVWF SSPADD ;ADDRESS To PMU<br />
MOVLW H'FF'<br />
MOVWF SSPBUF,0<br />
CALL AIS_OFF ;Turns off AIS<br />
CALL SBAND_OFF ;Turns off S-Band<br />
CALL MAG_OFF ;Turns off Magnetometer<br />
CLRF PORTB<br />
CLRF FLAG<br />
CLRF SUBSYSTEMS<br />
CLRF ADR<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;; Clear memory where the housekeeping data will ;;;<br />
;;; be stored ;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
CLRF FSR0H<br />
MOVLW H'3B'<br />
MOVWF FSR0L,0<br />
MOVWF I2Cbyte,0<br />
CLR_MEM<br />
CLRF INDF0<br />
INCF FSR0L,1<br />
MOVF FSR0L,0<br />
SUBLW H'5C'<br />
BTFSS STATUS,Z<br />
GOTO CLR_MEM<br />
MOVLW H'3B'<br />
MOVWF FSR0L<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
Side 2
PMUcode.txt<br />
;;; Main routin ;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
MAIN<br />
sensors<br />
CALL I2C_COMAND ;Check for received commands<br />
CLRWDT ;Clears the watch dog timer<br />
CALL READ_IU ;Reads Voltage and Current sensors<br />
CLRWDT ;Clears the watch dog timer<br />
CALL READ_TEMP_LINE1 ;Reads temperature of internal<br />
CLRWDT ;Clears the watch dog timer<br />
CALL READ_TEMP_LINE2 ;Read temperature of Solar cells<br />
CLRWDT ;Clears the watch dog timer<br />
CALL CTRL_SENSE_VALUE;Controls if values are ok<br />
CLRWDT ;Clears the watch dog timer<br />
CALL WRITE_TO_LOGG ;Write log<br />
CLRWDT ;Clears the watch dog timer<br />
GOTO MAIN ;Jump to start of Main<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;; End Of Main ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Receive I2C data check if any command has been ;;;;<br />
;; received on the I2C bus ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
I2C_COMAND<br />
BTFSS FLAG,2<br />
BRA CH_LOGG ;Check for interruption in send<br />
status<br />
BTFSC FLAG,1<br />
CALL SEND_STATUS<br />
CH_LOGG<br />
BTFSS FLAG,3<br />
BRA CH_CMDS ;Check for interruption in send<br />
log<br />
BTFSC FLAG,1<br />
CALL SEND_LOGG<br />
CH_CMDS<br />
MOVF COMAND,0<br />
BTFSC STATUS,Z<br />
RETURN ;Return if no new command<br />
MOVF COMAND,0<br />
SUBLW CLK_COMAND ;Check for clock command<br />
BTFSC<br />
RETURN<br />
STATUS,Z<br />
MOVF COMAND,0<br />
SUBLW CMD_PAUSE ;Check for pause command<br />
BTFSC<br />
RETURN<br />
STATUS,Z<br />
Side 3
CC1<br />
command<br />
CC2<br />
command<br />
command<br />
CC3<br />
command<br />
PMUcode.txt<br />
MOVF COMAND,0<br />
SUBLW CMD_RESUME ;Check for resume command<br />
BTFSC STATUS,Z<br />
BSF FLAG,1<br />
MOVLW CMD_STATUS_DATA ;Check for "send status" command<br />
SUBWF COMAND,0<br />
BTFSC STATUS,Z<br />
CALL SEND_STATUS<br />
MOVLW CMD_LOGG_DATA ;Check for "send log" command<br />
SUBWF COMAND,0<br />
BTFSC STATUS,Z<br />
CALL SEND_LOGG<br />
MOVLW CMD_AIS_ON ;Check for "Turn on AIS" command<br />
SUBWF COMAND,0<br />
BTFSS STATUS,Z<br />
GOTO CC1<br />
CALL AIS_ON<br />
CLRF COMAND<br />
MOVLW CMD_AIS_OFF ;Check for "Turn off AIS" command<br />
SUBWF COMAND,0<br />
BTFSC STATUS,Z<br />
CALL AIS_OFF<br />
MOVLW CMD_MAG_ON ;Check for "Turn on Magnetometer"<br />
SUBWF COMAND,0<br />
BTFSS STATUS,Z<br />
GOTO CC2<br />
CALL MAG_ON<br />
CLRF COMAND<br />
MOVLW CMD_MAG_OFF ;Check for "Turn off Magnetometer"<br />
SUBWF COMAND,0<br />
BTFSC STATUS,Z<br />
CALL MAG_OFF<br />
MOVLW CMD_SBAND_ON ;Check for "Turn on S-band"<br />
SUBWF COMAND,0<br />
BTFSS STATUS,Z<br />
GOTO CC3<br />
CALL SBAND_ON<br />
CLRF COMAND<br />
MOVLW CMD_SBAND_OFF ;Check for "Turn off S-band"<br />
SUBWF COMAND,0<br />
BTFSC STATUS,Z<br />
CALL SBAND_OFF<br />
MOVLW CMD_RESET ;Check for Reset command<br />
SUBWF COMAND,0<br />
Side 4
PMUcode.txt<br />
BTFSC<br />
RESET<br />
RETURN<br />
STATUS,Z<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Receive I2C data routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;; Read UI reads input Current and Voltage;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
READ_IU<br />
MOVLW B'01000011'<br />
MOVWF ADCON1<br />
BSF ADCON0,6 ;A/D OSC 1/16<br />
BSF ADCON0,0 ;Starts A/D<br />
BCF PORTB,0 ;Put Mux in position 0<br />
BCF PORTB,1<br />
BCF PORTB,2<br />
BCF ADCON0,3 ;Put A/D to channel AN0<br />
BCF ADCON0,4<br />
BCF ADCON0,5<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IMAG ;Save value to IMAG<br />
BSF ADCON0,3 ;Put A/D to channel AN1<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF VSOL ;Save value to VSOL<br />
BSF PORTB,0 ;Put Mux in position 1<br />
CALL READ_AD ;Reads VBAT<br />
MOVWF VBAT ;Save value to VBAT<br />
BCF ADCON0,3 ;Put A/D to channel AN0<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IIN ;Save value to IIN<br />
BCF PORTB,0<br />
BSF PORTB,1 ;Put Mux in position 2<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IUT ;Save value to IUT<br />
BSF ADCON0,3 ;Put A/D to channel AN1<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF VDD ;Save value to VDD<br />
BSF PORTB,0 ;Put Mux in position 3<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF VS ;Save value to VS<br />
BCF ADCON0,3 ;Put A/D to channel AN0<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IDD ;Save value to IDD<br />
BSF PORTB,2 ;Put Mux in position 7<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IAIS ;Save value to IAIS<br />
BSF ADCON0,3 ;Put A/D to channel AN1<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF VUHF ;Save value to VUHF<br />
BCF PORTB,0 ;Put Mux in position 6<br />
Side 5
PMUcode.txt<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF VMAG ;Save value to VMAG<br />
BCF ADCON0,3 ;Put A/D to channel AN0<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IVHF ;Save value to IVHF<br />
BCF PORTB,1 ;Put Mux in position 4<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IUHF ;Save value to IUHF<br />
BSF ADCON0,3 ;Put A/D to channel AN1<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF VVHF ;Save value to VVHF<br />
BSF PORTB,0 ;Put Mux in position 5<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF VAIS ;Save value to VAIS<br />
BCF ADCON0,3 ;Put A/D to channel AN0<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IS ;Save value to IS (S-band current)<br />
BSF ADCON0,4 ;Put A/D to channel AN2<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF ISOL ;Save value to ISOL<br />
BSF ADCON0,5<br />
BCF ADCON0,4 ;Put A/D to channel AN4<br />
BCF ADCON0,3<br />
CALL READ_AD ;Read value from A/D<br />
MOVWF IPAUHF ;Save value to IPAUHF<br />
BCF ADCON0,0 ;Turns off A/D<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;; Read AD routine reads the value ;;;;<br />
;;; on Selected AD port ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
READ_AD<br />
MOVLW D'1'<br />
CALL DELAY<br />
BSF ADCON0,2 ;Starts converting<br />
NOP<br />
ADLOOP BTFSC ADCON0,2,0 ;Tests if A/D is finish<br />
GOTO ADLOOP<br />
MOVF ADRESH,0<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End Of Read_AD ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Read_Temp_Line1 reads the temperature sensors ;;;;<br />
;; at Line1 (Subsystems & Batt)(PortC pin 0) ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
READ_TEMP_LINE1<br />
CLRF BSR ;Bank0 selected<br />
Side 6
cleared<br />
PMUcode.txt<br />
CLRF FSR0H ;Pointer0 points at Bank0<br />
MOVLW TMR0_VALUES<br />
MOVWF T0VALUE<br />
MOVLW D'6' ;6 registers that should be<br />
MOVWF MEM<br />
MOVLW H'52'<br />
MOVWF FSR0L ;Points at first temp-1<br />
MOVLW H'01' ;ERROR return address<br />
MOVWF ERROR_RETH<br />
MOVLW H'30'<br />
MOVWF ERROR_RETL<br />
CLR_TEMP1<br />
INCF FSR0L ;Loop that clears all temperature<br />
CLRF INDF0 ;registers<br />
DECFSZ MEM,1<br />
GOTO CLR_TEMP1<br />
BCF FLAG,0 ;FLAG I2C=0<br />
BCF TRISC,0 ;PortC pin0=output<br />
MOVLW H'52'<br />
MOVWF FSR0L<br />
MOVLW H'53'<br />
MOVWF MEM ;MEM = I_COUNTER<br />
MOVLW H'F8'<br />
MOVWF TMR0H ;Inits Timer0 low byte<br />
MOVLW H'30'<br />
MOVWF TMR0L ;Inits Timer0 high byte<br />
BCF PORTC,0 ;RESET TEMPSENSORS ON PORTC PIN0<br />
MOVLW D'20'<br />
CALL DELAY ;20ms delay<br />
BSF<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
PORTC,0 ;TSETUP<br />
Side 7
DATA01<br />
DATA11<br />
PMUcode.txt<br />
NOP<br />
NOP<br />
BCF PORTC,0 ;send trig pulse<br />
CLRF TMR1H<br />
CLRF TMR1L<br />
BSF PORTC,0<br />
BSF TRISC,0 ;Sets PortC BITO To Input<br />
BSF INTCON,5 ;Enable TIMER0 Interrupt<br />
BSF T0CON,7 ;Starts Timer 0<br />
BTFSC PORTC,0<br />
GOTO DATA01<br />
CLRF TMR1H<br />
CLRF TMR1L<br />
BSF T1CON,0 ;Starts TIMER1<br />
BTFSS PORTC,0<br />
GOTO DATA11<br />
BCF T1CON,0 ;Stops TIMER1<br />
CALL TEMP_ADJ<br />
MOVWF INDF0<br />
ERROR_RETURN1<br />
INCF FSR0L,1 ;Increase T_pionter<br />
MOVF FSR0L,0<br />
SUBLW H'58'<br />
BTFSS STATUS,Z<br />
GOTO DATA01<br />
BCF T0CON,7 ;Stops timer0<br />
BCF INTCON,5 ;Disable TIMER0 Interrupt<br />
BTFSC FLAG,0<br />
BRA READ_TEMP_LINE1<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Returns from Temperature line 1 function ;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;; Read_Temp_Line2 reads the temperature in the sensors ;;<br />
;;; on the second Line (Solar Cells) (PortC pin 1) ;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
READ_TEMP_LINE2<br />
CLRF BSR ;Bank0 selected<br />
CLRF FSR0H ;Pointer0 points at Bank0<br />
MOVLW TMR0_VALUES<br />
MOVWF T0VALUE<br />
MOVLW D'5' ;5 registers should be cleared<br />
MOVWF MEM<br />
Side 8
DATA02<br />
DATA12<br />
PMUcode.txt<br />
MOVLW H'58'<br />
MOVWF FSR0L<br />
MOVLW H'59'<br />
MOVWF MEM ;MEM = I_COUNTER<br />
MOVLW H'F8'<br />
MOVWF TMR0H ;Inits Timer0 low byte<br />
MOVLW H'30'<br />
MOVWF TMR0L ;Inits Timer0 high byte<br />
BCF PORTC,1 ;RESET TEMPSENSORS ON PORTC PIN1<br />
MOVLW D'20'<br />
CALL DELAY ;20ms delay<br />
BSF PORTC,1 ;TSETUP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
BCF PORTC,1 ;send trig pulse<br />
CLRF TMR1H<br />
CLRF TMR1L<br />
BSF PORTC,1<br />
BSF TRISC,1 ;Sets PortC BITO To Inputs<br />
BSF INTCON,5 ;Enable TIMER0 interrupt<br />
BSF T0CON,7 ;Starts Timer 0<br />
BTFSC PORTC,1<br />
GOTO DATA02<br />
CLRF TMR1H<br />
CLRF TMR1L<br />
BSF T1CON,0 ;Starts TIMER1<br />
BTFSS PORTC,1<br />
GOTO DATA12<br />
BCF T1CON,0 ;Stops TIMER1<br />
Side 9
PMUcode.txt<br />
CALL TEMP_ADJ<br />
MOVWF INDF0<br />
ERROR_RETURN2<br />
INCF FSR0L,1 ;Increase T_pionter<br />
MOVF FSR0L,0<br />
SUBLW H'5D'<br />
BTFSS STATUS,Z<br />
GOTO DATA02<br />
BCF T0CON,7 ;Stops timer0<br />
BCF INTCON,5 ;Disable TIMER0 Interrupt<br />
BTFSC FLAG,0<br />
BRA READ_TEMP_LINE2<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Returns from Temperature line 2 function ;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Temp_ADJ routine adjusts the 2Byte timer1 value ;;;;<br />
;; to a 1Byte temperature value with 0,8C/bit ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
TEMP_ADJ<br />
MOVLW H'46' ;Subtract Timer1<br />
SUBWF TMR1L,1 ;Value with 246<br />
BTFSS STATUS,C ;<br />
DECF TMR1L,1 ;<br />
MOVLW H'2' ;<br />
SUBWF TMR1H,1 ;and divide it with 2<br />
RRNCF TMR1H,1 ;<br />
RRCF TMR1L,0 ;<br />
RETURN ;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Return from adjust temperature routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Control Sense value routine controls that the ;;;;<br />
;; sensor values is´ out of the limits ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
CTRL_SENSE_VALUE<br />
CLRF FSR0H ;BANK0<br />
MOVLW H'40'<br />
MOVWF FSR0L<br />
MOVLW H'8C'<br />
MOVWF<br />
SENSE_LOOP<br />
LIMIT_POINTER<br />
CALL READ_LIMIT<br />
SUBFWB INDF0,0<br />
BTFSS STATUS,C<br />
CALL ERROR_SUB<br />
Side 10
PMUcode.txt<br />
INCF LIMIT_POINTER,1 ;Increase Limit pointer<br />
INCF LIMIT_POINTER,1 ;2 step for 2byte<br />
CALL READ_LIMIT<br />
SUBFWB INDF0,0<br />
BTFSC STATUS,C<br />
CALL ERROR_SUB<br />
INCF LIMIT_POINTER,1 ;Increase Limit pointer<br />
INCF LIMIT_POINTER,1 ;2 step for 2byte<br />
INCF FSR0L,1 ;Increase senor pointer<br />
MOVF FSR0L,0<br />
SUBLW H'5D'<br />
BTFSS STATUS,Z<br />
GOTO SENSE_LOOP<br />
GOTO ERROR_HANDLER<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Control sensor value routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Read Limit is returning a value from the address;;;;<br />
;; in the table that LIMIT_POINTER is pointing at ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
READ_LIMIT<br />
MOVF LIMIT_POINTER,0<br />
MOVWF PCL<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of READ_LIMIT ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Error sub_routine sets different flags ;;;;<br />
;; depending on what error occur ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
ERROR_SUB<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'B3'<br />
BTFSC STATUS,C ;Check if currents are ok<br />
GOTO FLAG4<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'D3'<br />
BTFSC STATUS,C ;Check if voltages are ok<br />
GOTO FLAG5<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'FF'<br />
BTFSC STATUS,C ;Check if temperature are ok<br />
FLAG6<br />
GOTO FLAG6<br />
GOTO ERR_ACTION<br />
BSF ERRORS,6 ;Sets Error flag6<br />
Side 11
PMUcode.txt<br />
GOTO ERR_ACTION<br />
FLAG5<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'C0' ;Check the reason for the error<br />
BZ<br />
Magnetometer<br />
FLAG5_MAG ;Check if error is from<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'BC'<br />
BZ FLAG5_SBAND ;Check if error is from S-Band<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'C4'<br />
BZ FLAG5_AIS ;Check if error is from AIS<br />
BSF ERRORS,5<br />
GOTO<br />
FLAG5_MAG<br />
ERR_ACTION<br />
BTFSC SUBSYSTEMS,0 ;Check if subsystem is turned on<br />
BSF ERRORS,5 ;Sets Error flag5 if it is<br />
GOTO<br />
FLAG5_SBAND<br />
ERR_ACTION<br />
BTFSC SUBSYSTEMS,2 ;Check if subsystem is turned on<br />
BSF ERRORS,5 ;Sets Error flag5 if it is<br />
GOTO<br />
FLAG5_AIS<br />
ERR_ACTION<br />
BTFSC SUBSYSTEMS,3 ;Check if subsystem is turned on<br />
BSF ERRORS,5 ;Sets Error flag5 if it is<br />
GOTO ERR_ACTION<br />
FLAG4<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'8C'<br />
BZ<br />
Magnetometer<br />
FLAG4_MAG ;Check if error is from<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'A0'<br />
BZ FLAG4_SBAND ;Check if error is from S-Band<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'A8'<br />
BZ FLAG4_AIS ;Check if error is from AIS<br />
BSF ERRORS,4 ;Sets Error flag4<br />
GOTO<br />
FLAG4_MAG<br />
ERR_ACTION<br />
BTFSC SUBSYSTEMS,0 ;Check if subsystem is turned on<br />
BSF ERRORS,4 ;Sets Error flag4 if on<br />
GOTO<br />
FLAG4_SBAND<br />
ERR_ACTION<br />
BTFSC SUBSYSTEMS,2 ;Check if subsystem is turned on<br />
BSF ERRORS,4 ;Sets Error flag4 if on<br />
GOTO<br />
FLAG4_AIS<br />
ERR_ACTION<br />
BTFSC SUBSYSTEMS,3 ;Check if subsystem is turned on<br />
BSF ERRORS,4 ;Sets Error flag4 if on<br />
GOTO ERR_ACTION<br />
Side 12
PMUcode.txt<br />
ERR_ACTION<br />
MOVF LIMIT_POINTER,0 ;Checks if flag0 should be set<br />
SUBLW H'8E'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,0 ;Sets Error flag0<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'C0'<br />
BTFSC STATUS,Z<br />
CALL FLAG0<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'C2'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,0 ;Sets Error flag0<br />
MOVF LIMIT_POINTER,0 ;Checks if flag1 should be set<br />
SUBLW H'96'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,1 ;Sets Error flag1<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'B4'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,1 ;Sets Error flag1<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'D4'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,1 ;Sets Error flag1<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'D6'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,1 ;Sets Error flag1<br />
MOVF LIMIT_POINTER,0 ;Checks if flag2 should be set<br />
SUBLW H'BC'<br />
BTFSC STATUS,Z<br />
CALL FLAG2 ;Sets Error flag2<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'BE'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,2 ;Sets Error flag2<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'A2'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,2 ;Sets Error flag2<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'E8'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,2 ;Sets Error flag2<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'EA'<br />
Side 13
PMUcode.txt<br />
BTFSC STATUS,Z<br />
BSF ERRORS,2 ;Sets Error flag2<br />
MOVF LIMIT_POINTER,0 ;Checks if flag3 should be set<br />
SUBLW H'AA'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,3 ;Sets Error flag3<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'C4'<br />
BTFSC STATUS,Z<br />
CALL FLAG3<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'C6'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,3 ;Sets Error flag3<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'DC'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,3<br />
MOVF LIMIT_POINTER,0<br />
SUBLW H'DE'<br />
BTFSC STATUS,Z<br />
BSF ERRORS,3 ;Sets Error flag3<br />
MOVLW VB_digpt ;Checks Digipeat voltage level on<br />
Batteries<br />
CPFSGT VBAT<br />
BRA DIGPT_OFF<br />
MOVLW VS_digpt ;Checks Digipeat voltage level on<br />
Solar Cells<br />
CPFSGT VSOL<br />
BRA DIGPT_OFF<br />
BSF PORTA,5 ;Turns on digipeat<br />
RETURN<br />
DIGPT_OFF<br />
BCF PORTA,5 ;Turns of digipeat<br />
RETURN<br />
FLAG0<br />
FLAG2<br />
FLAG3<br />
BTFSC SUBSYSTEMS,0 ;Check if subsystem is turned on<br />
BSF ERRORS,0 ;Set flag0 if it is<br />
RETURN<br />
BTFSC SUBSYSTEMS,2 ;Check if subsystem is turned on<br />
BSF ERRORS,2 ;Set flag2 if it is<br />
RETURN<br />
BTFSC SUBSYSTEMS,3 ;Check if subsystem is turned on<br />
BSF<br />
RETURN<br />
ERRORS,3 ;Set flag3 if it is<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
Side 14
PMUcode.txt<br />
;; End of Error subrutine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
MAG_OFF<br />
BTFSS PORTB,5 ;Check if portB pin5 is set<br />
BTG PORTC,6 ;toggle pin6 if not set<br />
BCF SUBSYSTEMS,0 ;Clear bit0 subsystem register<br />
RETURN ;Return from routine<br />
MAG_ON<br />
BTFSC PORTB,5 ;Check if portb pin5 is low<br />
BTG PORTC,6 ;toggle pin6 of not low<br />
BSF SUBSYSTEMS,0 ;Set bit0 subsystem register<br />
MOVLW D'20' ;Wait for DC/DC to start up<br />
CALL DELAY<br />
RETURN ;Return from routine<br />
SBAND_OFF<br />
BTFSS PORTB,4 ;Check if port is set<br />
BTG PORTC,5 ;toggle pin5 if not set<br />
BCF SUBSYSTEMS,2 ;Clear bit2 subsystem register<br />
RETURN ;Return from routine<br />
SBAND_ON<br />
BTFSC PORTB,4 ;Check if port is low<br />
BTG PORTC,5 ;toggle pin5 if not low<br />
BSF SUBSYSTEMS,2 ;Set bit2 subsystem register<br />
MOVLW D'20' ;Wait for DC/DC to start up<br />
CALL DELAY<br />
RETURN ;Return from routine<br />
AIS_OFF<br />
AIS_ON<br />
BTFSC PORTB,3 ;Check if port is low<br />
BTG PORTC,7 ;toggle pin7 if not low<br />
BCF SUBSYSTEMS,3 ;Clear bit7 subsystem register<br />
RETURN ;Return from routine<br />
BTFSS PORTB,3 ;Check if port is set<br />
BTG PORTC,7 ;toggle pin7 if not set<br />
BSF SUBSYSTEMS,3 ;Set bit3 subsystem register<br />
MOVLW D'20' ;Wait for DC/DC to start up<br />
CALL DELAY<br />
RETURN ;Return from routine<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Error handler routine check if subsystems should;;;;<br />
;; be turned of ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
ERROR_HANDLER<br />
BTFSS ERRORS,0 ;Check error flag0<br />
GOTO ALLSUB_TEST<br />
CALL MAG_OFF ;Turn off all magnetometer if set<br />
Side 15
PMUcode.txt<br />
GOTO<br />
ALLSUB_TEST<br />
END_HANDLER<br />
BTFSS ERRORS,1 ;Check error flag1<br />
GOTO SBAND_TEST<br />
CALL MAG_OFF ;Turn off all subsystems if set<br />
CALL SBAND_OFF<br />
CALL AIS_OFF<br />
GOTO<br />
SBAND_TEST<br />
END_HANDLER<br />
BTFSS ERRORS,2 ;Check error flag2<br />
GOTO AIS_TEST<br />
CALL SBAND_OFF ;Turn off S-Band if set<br />
GOTO<br />
AIS_TEST<br />
END_HANDLER<br />
BTFSC ERRORS,3 ;Check error flag3<br />
CALL<br />
END_HANDLER<br />
AIS_OFF ;Turn off AIS if set<br />
CLRF<br />
RETURN<br />
ERRORS<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of error handler routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Write to log writes the sensor values in Bank0;;;;<br />
;; to the log in FLASH ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
WRITE_TO_LOGG<br />
MOVF HOUR,0,0 ;Converts time to minutes<br />
MULLW D'60'<br />
MOVF MIN,0,0<br />
ADDWF PRODL,1,0<br />
BTFSC STATUS,C<br />
INCF PRODH,1,0<br />
MOVF PRODL,0<br />
MOVWF TEMP<br />
MOVF PRODH,0<br />
MOVWF TEMP2<br />
MOVF OLD_TIMEL,0<br />
SUBWF TEMP,1<br />
MOVF OLD_TIMEH,0<br />
SUBWFB TEMP2,1<br />
BTFSC STATUS,C<br />
GOTO CHECK_TIME<br />
MOVF TEMP,0<br />
SUBLW D'9'<br />
BTFSC STATUS,C<br />
Side 16
RETURN<br />
GOTO WRITE_LOGG<br />
RETURN<br />
PMUcode.txt<br />
CHECK_TIME ;Check if there are ten minutes<br />
since last log<br />
MOVF OLD_TIMEL,0<br />
SUBLW H'A0'<br />
BTFSC STATUS,C<br />
DECF OLD_TIMEH,0<br />
SUBLW H'05'<br />
ADDWF PRODL,0<br />
SUBLW D'9'<br />
BTFSS STATUS,C<br />
RETURN<br />
WRITE_LOGG<br />
MOVF PRODH,0<br />
MOVWF OLD_TIMEH ;Save last update time<br />
MOVF PRODL,0<br />
MOVWF OLD_TIMEL<br />
MOVLW HOUR<br />
MOVWF FSR0L<br />
CLRF FSR0H<br />
CLRF TBLPTRU<br />
MOVLW EE_STARTH<br />
CALL READ_EE<br />
MOVWF TBLPTRH<br />
MOVLW EE_STARTL<br />
CALL READ_EE<br />
MOVWF TBLPTRL<br />
MOVLW D'4' ;Sets that there is 4 loop that<br />
should be run<br />
MOVWF TEMP2<br />
PROG_LOOP<br />
MOVLW D'8' ;8 bytes of data that should be<br />
written<br />
MOVWF TEMP<br />
WRITE_BYTE<br />
MOVF POSTINC0,0<br />
MOVWF TABLAT<br />
TBLWT+*<br />
DECFSZ TEMP,1<br />
BRA WRITE_BYTE<br />
PROGRAM_FLASH<br />
BSF EECON1,EEPGD ;POINT TO FLASH<br />
Side 17
PMUcode.txt<br />
BCF EECON1,CFGS ;ACCESS FLASH<br />
BSF EECON1,WREN ;ENABLE WRITE<br />
BCF INTCON,GIE ;DISABLE INTERRUPTS<br />
MOVLW H'55'<br />
MOVWF EECON2<br />
MOVLW H'AA'<br />
MOVWF EECON2<br />
BSF EECON1,WR<br />
BSF INTCON,GIE ;ENABLE INTERUPTS<br />
DECFSZ TEMP2,1<br />
BRA PROG_LOOP<br />
BCF EECON1,WREN ;DISABLE FLASH WRITE<br />
MOVLW EE_STOPL<br />
CALL READ_EE<br />
MOVWF TEMP<br />
MOVLW EE_STOPH<br />
CALL READ_EE<br />
MOVWF TEMP2<br />
MOVLW D'32' ;32BYTE<br />
ADDWF TEMP,1<br />
BTFSC STATUS,C<br />
INCF TEMP2,1<br />
MOVLW STOP_LOGG_ADRL ;Check if pointer is at the end<br />
CPFSEQ TEMP,0<br />
BRA END_LOGG<br />
MOVLW STOP_LOGG_ADRH<br />
CPFSEQ TEMP2,0<br />
BRA END_LOGG<br />
MOVLW START_LOGG_ADRL<br />
MOVWF TEMP<br />
MOVLW START_LOGG_ADRH<br />
MOVWF TEMP2<br />
END_LOGG<br />
MOVLW EE_STOPL ;Save pointer values to EEPROM<br />
CALL WRITE_EE<br />
MOVF TEMP2,0<br />
MOVWF TEMP<br />
MOVLW EE_STOPH<br />
CALL WRITE_EE<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; EE address in W in, and EE data in w out ;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
Side 18
READ_EE<br />
PMUcode.txt<br />
MOVWF EEADR<br />
BCF EECON1,EEPGD ;POINT TO EE<br />
BCF EECON1,CFGS ;ACCESS MEM<br />
BSF EECON1,RD ;EE READ<br />
MOVF EEDATA,0<br />
RETURN<br />
WRITE_EE<br />
MOVWF EEADR<br />
MOVF TEMP,0<br />
MOVWF EEDATA<br />
BCF EECON1,EEPGD<br />
BCF EECON1,CFGS<br />
BSF EECON1,WREN<br />
EE_WAIT<br />
BCF INTCON, GIE ;DISABLE INTERRUPTS<br />
MOVLW H'55'<br />
MOVWF EECON2<br />
MOVLW H'AA'<br />
MOVWF EECON2<br />
BSF EECON1,WR ;WRITE<br />
BSF INTCON,GIE ;ENABLE INTERRUPTS<br />
BTFSS PIR2,EEIF<br />
BRA EE_WAIT<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Write to log routine ;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Send STATUS Sends the latest housekeeping data;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
SEND_STATUS<br />
BCF INTCON,GIE ;DISABLE INTERRUPTS<br />
MOVLW D'1' ;NUMBERS OF ATTEMPTS TO SEND ON<br />
I2C<br />
MOVWF I2C_ERROR<br />
CLRF COMAND<br />
BSF FLAG,1<br />
BCF FLAG,2<br />
BTFSS FLAG,2<br />
BRA CONT_STATUS<br />
MOVF STATUS_PTR_SAVE,0<br />
MOVWF FSR0L<br />
CLRF FSR0H<br />
BRA SEND_LOOP<br />
Side 19
PMUcode.txt<br />
CONT_STATUS<br />
MOVLW<br />
registers<br />
H'3E' ;Sets pointer to start value of<br />
MOVWF FSR0L<br />
CLRF FSR0H<br />
SEND_LOOP<br />
MOVF INDF0,0<br />
MOVWF CONT<br />
CALL CONVERT ;Convert a byte to BCD<br />
MOVLW ADR_TNC<br />
MOVWF I2Cdata<br />
CALL I2C_STARTS ;Send start and address<br />
BTFSC FLAG,0 ;CHECK FOR INTERRUPT<br />
BRA STOP_STATUS_SEND<br />
MOVF CONHH,0,0<br />
ADDLW H'30'<br />
MOVWF I2Cdata<br />
CALL SEND_BYTE ;Send byte1<br />
BTFSC FLAG,0 ;Check if flag0 is set<br />
GOTO STOP_STATUS_SEND<br />
BTFSS FLAG,1 ;Check if flag1 is set<br />
BRA STOP_STATUS_SEND<br />
BTFSC FLAG,5 ;Check if flag5 is set<br />
BRA STOP_STATUS_SEND<br />
BTFSC FLAG,0 ;CHECK FOR INTERRUPT<br />
BRA STOP_STATUS_SEND<br />
MOVF CONH,0,0<br />
ADDLW H'30'<br />
MOVWF I2Cdata<br />
CALL SEND_BYTE ;Send Byte2<br />
BTFSC FLAG,0 ;Check if flag0 is set<br />
GOTO STOP_STATUS_SEND<br />
BTFSS FLAG,1 ;Check if flag1 is set<br />
BRA STOP_STATUS_SEND<br />
BTFSC FLAG,5 ;Check if flag5 is set<br />
BRA STOP_STATUS_SEND<br />
BTFSC FLAG,0 ;CHECK FOR INTERRUPT<br />
BRA STOP_STATUS_SEND<br />
MOVF CONL,0,0<br />
ADDLW H'30'<br />
MOVWF I2Cdata<br />
CALL SEND_BYTE ;Send Byte3<br />
BTFSS FLAG,0<br />
INCF FSR0L,1<br />
BTFSC FLAG,0 ;Check if flag0 is set<br />
GOTO STOP_STATUS_SEND<br />
BTFSS FLAG,1 ;Check if flag1 is set<br />
Side 20
PMUcode.txt<br />
BRA STOP_STATUS_SEND<br />
BTFSC FLAG,5 ;Check if flag5 is set<br />
BRA STOP_STATUS_SEND<br />
CALL I2C_STOPS ;Send Stop condition on I2C bus<br />
MOVLW D'50'<br />
CALL DELAY<br />
MOVLW H'5D' ;Wait for TNC to handle data<br />
CPFSGT FSR0L,0<br />
BRA SEND_LOOP<br />
MOVLW ADR_TNC<br />
MOVWF I2Cdata<br />
CALL I2C_STARTS ;Send start and address<br />
MOVLW D'13' ;Sends "Enter" on I2C<br />
MOVWF I2Cdata<br />
CALL SEND_BYTE<br />
CALL I2C_STOPS<br />
BSF INTCON,GIE ;ENABLE INTERRUPTS<br />
RETURN<br />
STOP_STATUS_SEND<br />
BSF FLAG,2 ;Set flag2 (Send status<br />
interrupted)<br />
MOVF FSR0L,0<br />
MOVWF STATUS_PTR_SAVE ;Save pointers<br />
CALL I2C_STOPS ;Send stop condition on I2C<br />
BSF INTCON,GIE ;ENABLE INTERRUPTS<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Send STATUS routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Send logg sends all logged values to ;;;;<br />
;; the I2C data bus ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
SEND_LOGG<br />
BSF FLAG,1<br />
BTFSS FLAG,3 ;Check if sending is allowed<br />
CLRF COMAND<br />
BRA SEND_LOGG_START<br />
BCF FLAG,3<br />
CLRF TBLPTRU<br />
MOVLW EE_tempH ;Get pointers from EEPROM<br />
CALL READ_EE<br />
MOVWF TBLPTRH<br />
MOVLW EE_tempL<br />
CALL READ_EE<br />
MOVWF TBLPTRL<br />
Side 21
TBLRD*<br />
BRA LOGG_LOOP<br />
PMUcode.txt<br />
SEND_LOGG_START<br />
CLRF TBLPTRU ;Initiate pointers<br />
MOVLW EE_STARTH<br />
CALL READ_EE<br />
MOVWF TBLPTRH<br />
MOVLW EE_STARTL<br />
CALL READ_EE<br />
MOVWF TBLPTRL<br />
TBLRD* ;Read from table<br />
LOGG_LOOP<br />
MOVF TABLAT,0<br />
CALL SEND_I2C ;Send byte on I2C<br />
BTFSS FLAG,0 ;Check for interrupt flag<br />
BRA LOGG_CONT<br />
BTFSS FLAG,1 ;Check for "no sending allowed"<br />
BRA LOGG_LOOP<br />
BSF FLAG,3<br />
BRA END_WLOGG_NOTCOMP<br />
LOGG_CONT<br />
TBLRD*+ ;Step up table pointer<br />
MOVLW STOP_LOGG_ADRL ;Check if pointer is at the end of<br />
log<br />
CPFSEQ TBLPTRL<br />
BRA LOGG_ENDCH<br />
MOVLW STOP_LOGG_ADRH<br />
CPFSEQ TBLPTRH<br />
BRA LOGG_ENDCH<br />
MOVLW START_LOGG_ADRL<br />
MOVWF TBLPTRL<br />
MOVLW START_LOGG_ADRH<br />
MOVWF TBLPTRH<br />
LOGG_ENDCH<br />
MOVLW EE_STOPH ;Check if whole log is sent<br />
CALL READ_EE ;Read from EEPROM<br />
CPFSEQ TBLPTRH<br />
BRA LOGG_LOOP<br />
MOVLW EE_STARTL<br />
CALL READ_EE<br />
CPFSEQ TBLPTRL<br />
BRA LOGG_LOOP<br />
BRA END_WLOGG<br />
END_WLOGG ;Complete Send log<br />
MOVF TBLPTRH,0,0 ;Update the Log pointers<br />
MOVWF TEMP<br />
MOVLW EE_STARTH<br />
CALL WRITE_EE ;Save pointers to EEPROM<br />
MOVF TBLPTRL,0,0<br />
Side 22
MOVWF TEMP<br />
MOVLW EE_STARTL<br />
CALL WRITE_EE<br />
RETURN<br />
PMUcode.txt<br />
END_WLOGG_NOTCOMP ;Not complete send log<br />
MOVF TBLPTRH,0,0 ;save the log pointer in temporary<br />
EE<br />
MOVWF TEMP ;addresses<br />
MOVLW EE_tempH<br />
CALL WRITE_EE<br />
MOVF TBLPTRL,0,0<br />
MOVWF TEMP<br />
MOVLW EE_tempL<br />
CALL WRITE_EE<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of send log routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Send I2C is sending a byte of data on the bus ;;;;<br />
;; The byte must be stored as I2Cdata ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
SEND_I2C<br />
MOVWF I2CTemp<br />
BCF FLAG,0<br />
MOVLW ADR_TNC<br />
MOVWF I2Cdata<br />
CALL I2C_STARTS<br />
BTFSC FLAG,0 ;CHECK FOR INTERRUPT<br />
RETURN ;Return if interrupt occurred<br />
MOVF I2CTemp,0,0<br />
MOVWF I2Cdata<br />
CALL SEND_BYTE ;Sending a byte on I2C Bus<br />
BTFSC FLAG,0 ;CHECK FOR INTERRUPT<br />
CALL I2C_STOPS ;Send Stop condition<br />
RETURN<br />
I2C_STARTS<br />
BCF LATB,SCLP ;CLK LOW WHEN OUTPUT<br />
BCF LATB,SDAP ;DATA LOW WHEN OUTPUT<br />
BCF PORTB,SCLP<br />
BCF PORTB,SDAP<br />
BSF TRISB,SDAP<br />
BSF<br />
NOP<br />
NOP<br />
NOP<br />
TRISB,SCLP<br />
Side 23
PMUcode.txt<br />
NOP<br />
BCF TRISB,SDAP ;START<br />
BCF TRISB,SCLP<br />
BCF PORTB,SCLP<br />
SEND_BYTE<br />
BCF FLAG,0<br />
BCF TRISB,SDAP<br />
BCF PORTB,SDAP<br />
BCF STATUS,C<br />
RLCF I2Cdata,1<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cdata,1 ;BYTE1<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cdata,1 ;BYTE2<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cdata,1 ;BYTE3<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cdata,1 ;BYTE4<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cdata,1 ;BYTE5<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
Side 24
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
PMUcode.txt<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cdata,1 ;BYTE6<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cdata,1 ;BYTE7<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP ;BYTE8<br />
NOP<br />
NOP<br />
BCF TRISB,SCLP<br />
BCF PORTB,SCLP<br />
BSF TRISB,SDAP ;RELEASE DATA<br />
BSF TRISB,SCLP<br />
BTFSC PORTB,SDAP ;check ack<br />
GOTO ERR_I2C<br />
BCF TRISB,SCLP<br />
RETURN<br />
I2C_STOPS ;Stop condition<br />
BCF TRISB,SDAP<br />
BCF PORTB,SDAP<br />
NOP<br />
NOP<br />
BSF TRISB,SCLP<br />
NOP<br />
NOP<br />
BSF TRISB,SDAP<br />
NOP<br />
NOP<br />
BSF TRISB,SCLP<br />
RETURN<br />
ERR_I2C<br />
DECF I2C_ERROR,1<br />
BCF TRISB,SCLP<br />
BCF PORTB,SCLP<br />
;Handles error on I2C<br />
Side 25
NOP<br />
NOP<br />
BSF TRISB,SCLP<br />
NOP<br />
NOP<br />
BSF TRISB,SDAP<br />
BSF FLAG,0<br />
MOVF I2C_ERROR,1<br />
BTFSC STATUS,Z<br />
GOTO I2C_FAIL<br />
I2C_ERR_WAIT<br />
MOVLW H'FF'<br />
CALL DELAY<br />
RETURN<br />
PMUcode.txt<br />
I2C_FAIL<br />
BSF FLAG,5 ;Set Flag5 (Interrupt occurred)<br />
MOVLW D'1'<br />
MOVWF I2C_ERROR<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Send From I2C routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Delay sub routine is a delay routine that ;;;;<br />
;; the input value in mS ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
DELAY<br />
MOVWF DELAY2 ;Moves value of W to DELAY2<br />
MOVLW D'165' ;Puts the value 2FH to W<br />
MOVWF DELAY1 ;Moves W to DELAY1<br />
LOOP1 DECFSZ DELAY1,1 ;Decreases DELAY1 with 1<br />
GOTO LOOP1 ;Jumps to LOOP1 if DELAY1>=1<br />
REFIL MOVLW D'165' ;Moves the value 2FH to W<br />
MOVWF DELAY1 ;Puts W to DELAY1<br />
DECFSZ DELAY2 ;Decreases DELAY2 with 1<br />
GOTO LOOP1 ;Jumps to LOOP1 if DELAY2>=1<br />
RETURN ;Returns from routine<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Delay routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; I2C interrupt routine reads an byte received ;;;;<br />
;; on the I2C bus, and store it in I2C memory ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
I2C_INTERUPT<br />
BSF FLAG,0<br />
BCF PIR1,3 ;Resets the Interrupt flag<br />
Side 26
PMUcode.txt<br />
BCF SSPCON1,6,0<br />
MOVF SSPBUF,0,0<br />
BTFSS<br />
address or data<br />
SSPSTAT,5,0 ;Check if there is a received<br />
GOTO I2C_ADR<br />
MOVLW H'40'<br />
CPFSLT FSR0L,0<br />
RETFIE ;Return if pointer is out of range<br />
MOVF SSPBUF,0,0 ;Move data from I2C buffer to<br />
MOVWF POSTINC0,0 ;where the pointer0 points<br />
MOVLW<br />
received<br />
CMD_PAUSE ;Check if there’s a Pause command<br />
CPFSEQ COMAND<br />
RETFIE ;Return if not<br />
BSF<br />
received<br />
FLAG,0 ;Set flag0 if Pause command is<br />
RETFIE ;return from routine<br />
I2C_ADR ;Handel received address<br />
BTFSC SSPBUF,0,0 ;Check if data direction is right<br />
CALL RESET_I2C ;Reset if wrong<br />
MOVLW H'3B' ;Move start value of registers<br />
MOVWF FSR0L,0 ;put value to pointer0<br />
MOVF SSPBUF,0,0 ;Move address<br />
MOVWF POSTINC0,0 ;Puts to register<br />
RETFIE ;Return from routine<br />
RESET_I2C<br />
RESET ;Resets the PMU<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of I2C interrupt routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Timer0 interrupt, hold track of max time ;;;;<br />
;; to the temperature sensors, skip sensor after ;;;;<br />
;; a max time and report an error ;;;;<br />
;; value FF = sensor didn’t answer ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
TIMER0_INTERUPT<br />
BCF INTCON,2 ;Clear interrupt<br />
MOVF MEM,0<br />
CPFSEQ FSR0L<br />
GOTO STOP_TMR<br />
GOTO<br />
STOP_TMR<br />
LOAD_TMR<br />
BCF T1CON,0 ;Stops TIMER1<br />
MOVLW H'FF'<br />
MOVWF INDF0 ;Puts FF to temp<br />
MOVF ERROR_RETH,0 ;as error value<br />
Side 27
PMUcode.txt<br />
MOVWF TOSH<br />
MOVF ERROR_RETL,0<br />
MOVWF TOSL<br />
CLRF<br />
LOAD_TMR<br />
TOSU<br />
CALL READ_TABLE ;Get value from table<br />
MOVWF TMR0H<br />
INCF T0VALUE,1<br />
INCF T0VALUE,1<br />
CALL READ_TABLE ;Get value from table<br />
MOVWF TMR0L<br />
INCF MEM,1<br />
INCF T0VALUE,1<br />
INCF<br />
RETFIE<br />
T0VALUE,1<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Interrupt routine Timer0 ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Read table is returning a value from the address;;;;<br />
;; in the table that T0value is pointing at ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
READ_TABLE<br />
CLRF PCLATH<br />
MOVF T0VALUE,0<br />
MOVWF PCL<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of READ LIMIT ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Convert is converting a byte to BCD values ;;;;<br />
;; The byte must be stored as CONT and the ;;;;<br />
;; converted values will be returned as ;;;;<br />
;; CONHH for hundreds, CONH for tens and ;;;;<br />
;; CONL for one values ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
CONVERT CLRF CONTH ;Resets high byte<br />
CLRF CONHH ;Clears 100:s<br />
CLRF CONH ;Clears 10:s<br />
CLRF CONL ;Clears 1:s<br />
HUNDRA MOVLW D'100' ;Counts hundreds<br />
SUBWF CONT,0<br />
BTFSS STATUS,C<br />
GOTO HCONTH<br />
MOVWF CONT<br />
Side 28
HCONTH<br />
INCF CONHH<br />
GOTO HUNDRA<br />
PMUcode.txt<br />
MOVWF TEMP<br />
MOVLW D'1'<br />
SUBWF CONTH,0<br />
BTFSS STATUS,C<br />
GOTO TIOTAL<br />
MOVWF CONTH<br />
MOVF TEMP,0<br />
MOVWF CONT<br />
INCF CONHH,1<br />
GOTO HUNDRA<br />
TIOTAL ;Counts 10s<br />
MOVLW D'10'<br />
SUBWF CONT,0<br />
BTFSS STATUS,C<br />
GOTO ENTAL<br />
MOVWF CONT<br />
INCF CONH<br />
GOTO TIOTAL<br />
ENTAL ;Counts 1s<br />
MOVF CONT,0<br />
MOVWF CONL<br />
JUSTERA ;Adjust values<br />
MOVLW D'10'<br />
SUBWF CONHH,0<br />
BTFSS STATUS,C<br />
RETURN<br />
MOVWF CONHH<br />
INCF CONHHH<br />
GOTO JUSTERA<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of convert routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
END<br />
Side 29
text.txt<br />
ORG TMR0_VALUES ;Table for Timer0 values<br />
RETLW H'F4'<br />
RETLW H'48'<br />
RETLW H'E8'<br />
RETLW H'90'<br />
RETLW H'D5'<br />
RETLW H'3A'<br />
RETLW H'AA'<br />
RETLW H'74'<br />
RETLW H'58'<br />
RETLW H'D0'<br />
ORG LIMITS ;Tabel with limits<br />
RETLW D'000' ;I_mag min<br />
RETLW D'133' ;I_mag max 133<br />
RETLW D'000' ;I_in min<br />
RETLW D'102' ;I_in max<br />
RETLW D'000' ;I_out min<br />
RETLW D'153' ;I_out max 153<br />
RETLW D'000' ;I_dd min<br />
RETLW D'92' ;I_dd max 92<br />
RETLW D'000' ;I_uhf min<br />
RETLW D'102' ;I_uhf max 102<br />
RETLW D'000' ;I_s min<br />
RETLW D'92' ;I_s max 92<br />
RETLW D'000' ;I_vhf min<br />
RETLW D'27' ;I_vhf max 27<br />
RETLW D'000' ;I_ais min<br />
RETLW D'92' ;I_ais max 92<br />
RETLW D'000' ;I_sun min<br />
RETLW D'204' ;I_sun max<br />
RETLW D'000' ;I_PAUHF MIN<br />
RETLW D'46' ;I_PAUHF MAX 46<br />
RETLW D'168' ;U_bat min<br />
RETLW D'214' ;U_bat max<br />
RETLW D'158' ;U_dd min<br />
RETLW D'179' ;U_dd max<br />
RETLW D'115' ;U_s min<br />
RETLW D'255' ;U_s max<br />
RETLW D'140' ;U_mag min 140<br />
RETLW D'255' ;U_mag max<br />
RETLW D'158' ;U_ais min 158<br />
RETLW D'255' ;U_ais max<br />
RETLW D'158' ;U_uhf min 158<br />
RETLW D'255' ;U_uhf max<br />
RETLW D'158' ;U_vhf min 158<br />
RETLW D'179' ;U_vhf max<br />
RETLW D'51' ;U_sol min<br />
RETLW D'255' ;U_sol max<br />
RETLW H'62' ;T_bat min<br />
Side 1<br />
+10
text.txt<br />
RETLW D'112' ;T_bat max +50<br />
RETLW H'19' ;T_adcs min -20<br />
RETLW H'96' ;T_adcs max +80<br />
RETLW H'19' ;T_ais min -20<br />
RETLW H'96' ;T_ais max +80<br />
RETLW H'19' ;T_tnc min -20<br />
RETLW H'96' ;T_tnc max +80<br />
RETLW H'19' ;T_uhf min -20<br />
RETLW H'96' ;T_uhf max +80<br />
RETLW H'19' ;T_s min -20<br />
RETLW H'96' ;T_s max +80<br />
RETLW H'19' ;T_a min -20<br />
RETLW H'96' ;T_a max +80<br />
RETLW H'19' ;T_b min -20<br />
RETLW H'96' ;T_b max +80<br />
RETLW H'19' ;T_s min -20<br />
RETLW H'96' ;T_s max +80<br />
RETLW H'19' ;T_a min -20<br />
RETLW H'96' ;T_a max +80<br />
RETLW H'19' ;T_b min -20<br />
RETLW H'96' ;T_b max +80<br />
RETLW H'19' ;T_c min -20<br />
RETLW H'96' ;T_c max +80<br />
RETLW H'19' ;T_d min -20<br />
RETLW H'96' ;T_d max +80<br />
RETLW H'19' ;T_z min -20<br />
RETLW H'96' ;T_z max +80<br />
Side 2
#INCLUDE EQUN.ASM<br />
#INCLUDE TEXT.ASM<br />
#INCLUDE COMANDS.ASM<br />
#INCLUDE P18F442.INC<br />
ORG RES_V<br />
GOTO START<br />
ORG INT_H<br />
GOTO I2C_INTERUPT<br />
ORG INT_L<br />
GOTO TIMER0_INTERUPT<br />
tnc.txt<br />
ORG START_ADR<br />
START<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;Initsialation of memories, register ;;;;;<br />
;and display ;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
MOVLW B'11000000'<br />
MOVWF INTCON<br />
MOVLW B'11110000'<br />
MOVWF INTCON2<br />
CLRF INTCON3<br />
CLRF ADCON0<br />
MOVLW B'01000011'<br />
MOVWF ADCON1<br />
MOVLW B'00000111'<br />
MOVWF T0CON<br />
MOVLW B'10000000'<br />
MOVWF T1CON<br />
MOVLW H'01'<br />
MOVWF FSR1H<br />
CLRF FSR1L<br />
CLRF BSR<br />
CLRF PIR1<br />
CLRF PIR2<br />
MOVLW B'00001000'<br />
MOVWF PIE1<br />
CLRF PIE2<br />
CLRF IPR2<br />
MOVLW B'10000000'<br />
MOVWF RCON<br />
MOVLW B'11000100'<br />
MOVWF SSPSTAT<br />
MOVLW B'00110110'<br />
MOVWF SSPCON1<br />
MOVLW B'10000000'<br />
MOVWF SSPCON2<br />
MOVLW B'00011000'<br />
MOVWF TRISC<br />
CLRF TRISD ;SETS PORTD TO OUTPUTS<br />
Side 1
tnc.txt<br />
CLRF PORTD<br />
CLRF TRISE ;SETS PORTE TO OUTPUTS<br />
CLRF PORTE<br />
SETF TRISA ;SETS PORTA TO INPUTS<br />
MOVLW B'11111000'<br />
MOVWF TRISB ;SETS PORTB AS IN/OUT-PUTS<br />
CLRF PORTB<br />
CLRF MEM<br />
CLRF COMAND<br />
MOVLW ADR_TNC<br />
MOVWF SSPADD ;ADDRESS TO PMU<br />
;;;;;;;;;;;;;;;;;Initsiering av display;;;;;;;;;;;;;;;;;;;;;;;;;<br />
MOVLW H'10'<br />
CALL DELAY<br />
MOVLW B'00001100'<br />
CALL ADRES ;Puls to display<br />
MOVLW B'00111100' ;SETS TWO rows on display<br />
CALL ADRES<br />
CALL CLEAR_DISP ;CLEARS DISPLAY<br />
;;;;;;;;;;;;;;;;;; Display initsiering slut;;;;;;;;;;;;;;;;;;;;;<br />
MOVLW B'00001000' ;ENABLE I2C INTERUPT<br />
MOVWF IPR1<br />
MOVLW A'T' ;Writes "TIME HH:MM" to display<br />
CALL SKRIV_CHAR<br />
MOVLW A'i'<br />
CALL SKRIV_CHAR<br />
MOVLW A'm'<br />
CALL SKRIV_CHAR<br />
MOVLW A'e'<br />
CALL SKRIV_CHAR<br />
MOVLW A' '<br />
CALL SKRIV_CHAR<br />
MOVLW A'H'<br />
CALL SKRIV_CHAR<br />
MOVLW A'H'<br />
CALL SKRIV_CHAR<br />
MOVLW A':'<br />
CALL SKRIV_CHAR<br />
MOVLW A'M'<br />
CALL SKRIV_CHAR<br />
MOVLW A'M'<br />
CALL SKRIV_CHAR<br />
MOVLW D'12'<br />
MOVWF HOUR ;Presets hour to 12<br />
CLRF MIN ;Clears minutes<br />
CLRF SEC<br />
Side 2
tnc.txt<br />
TIME_SET_HOUR ;Seting hours<br />
CALL PRINT_TIME ;Print the current time to display<br />
MOVLW D'150'<br />
CALL DELAY<br />
BTFSC PORTB,4<br />
GOTO TIME_SET_MIN<br />
BCF STATUS,C<br />
BTFSC PORTB,5<br />
INCF HOUR,1<br />
MOVLW D'23'<br />
BSF STATUS,C<br />
BTFSC PORTB,3<br />
DECF HOUR,1<br />
BTFSS STATUS,C<br />
MOVWF HOUR<br />
MOVLW D'24'<br />
CPFSLT HOUR<br />
CLRF HOUR<br />
GOTO TIME_SET_HOUR<br />
TIME_SET_MIN ;Seting minutes<br />
CALL PRINT_TIME<br />
MOVLW D'150'<br />
CALL DELAY<br />
BTFSC PORTB,4<br />
GOTO MAIN_STEP<br />
BCF STATUS,C<br />
BTFSC PORTB,5<br />
INCF MIN,1<br />
BSF STATUS,C<br />
MOVLW D'59'<br />
BTFSC PORTB,3<br />
DECF MIN,1<br />
BTFSS STATUS,C<br />
MOVWF MIN<br />
MOVLW D'60'<br />
CPFSLT MIN<br />
CLRF MIN<br />
GOTO TIME_SET_MIN<br />
MAIN_STEP<br />
BTFSS PORTB,4<br />
GOTO MAIN_STEP<br />
CALL TIME_SEND<br />
CALL CLEAR_MEM<br />
MOVLW H'F8'<br />
MOVWF TMR0H<br />
MOVLW H'62'<br />
MOVWF TMR0L<br />
BSF INTCON,5 ;ENABLE TIMER0 INTERUPT<br />
BSF T0CON,7 ;Starts Timer 0<br />
Side 3
tnc.txt<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;; Main rutin startar här;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
MAIN<br />
CALL PRINT_TIME<br />
MOVLW D'32'<br />
MOVWF I2Cdata<br />
KNAPP<br />
CALL PRINT_TIME ;Print time to display<br />
CALL PRINT_DISP ;Print comand on display<br />
MOVLW D'10'<br />
CALL DELAY<br />
BTFSC PORTB,3 ;Check if buttom 1 is down<br />
DECF I2Cdata,1 ;Steps down comando<br />
BTFSC PORTB,4 ;Check if buttom 2 is down<br />
GOTO KNAPP2<br />
BTFSC PORTB,5 ;Check if buttom 3 is down<br />
INCF I2Cdata,1 ;Steps upp comando<br />
MOVLW D'40'<br />
CPFSGT I2Cdata<br />
GOTO KNAPP_CH<br />
MOVLW D'31'<br />
MOVWF<br />
KNAPP_CH<br />
I2Cdata<br />
MOVLW D'31'<br />
CPFSLT I2Cdata<br />
GOTO KNAPP<br />
MOVLW D'40'<br />
MOVWF I2Cdata<br />
GOTO KNAPP<br />
KNAPP2<br />
SENDD<br />
MOVLW D'31'<br />
CPFSEQ I2Cdata<br />
GOTO SENDD<br />
CALL SHOW_LOGG<br />
GOTO MAIN<br />
CALL ALT_I2C<br />
GOTO MAIN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;; End Of Main ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
Side 4
tnc.txt<br />
;; SHOW LOG is a routine that prints the ;;;<br />
;; recived values on the display ;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
PRINT_STOPP<br />
MOVF PREINC1,0<br />
SUBLW H'FE'<br />
BTFSC STATUS,Z<br />
RETURN<br />
MOVF POSTDEC1,0<br />
GOTO RET_STOP<br />
SHOW_LOGG<br />
CLRF VARV<br />
MOVLW H'80'<br />
MOVWF FSR1L<br />
CLRF FSR1H<br />
LOGG_LOOP<br />
MOVF INDF1,0<br />
SUBLW H'FE'<br />
BTFSC STATUS,Z<br />
GOTO PRINT_STOPP<br />
RET_STOP<br />
CLRF TBLPTRU<br />
MOVLW PRES_STARTL<br />
MOVWF TBLPTRL<br />
MOVLW PRES_STARTH<br />
MOVWF TBLPTRH<br />
PRINT_H<br />
dispaly<br />
;Print recived time to<br />
MOVLW H'80'<br />
CALL ADRES<br />
MOVLW A'T'<br />
CALL SKRIV_CHAR<br />
MOVLW A'i'<br />
CALL SKRIV_CHAR<br />
MOVLW A'm'<br />
CALL SKRIV_CHAR<br />
MOVLW A'e'<br />
CALL SKRIV_CHAR<br />
MOVF VARV,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVF CONHH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONL,0<br />
CALL SKRIV_DIGIT<br />
Side 5
MOVF POSTINC1,0<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
MOVLW A':'<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
MOVLW H'FF'<br />
CALL DELAY<br />
tnc.txt<br />
PRINT_I ;Print Recived currents to<br />
display<br />
MOVLW D'10'<br />
MOVWF TTMP,0<br />
PRINT_I_LOOP<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'80'<br />
CALL ADRES<br />
MOVLW A'I'<br />
CALL SKRIV_CHAR<br />
TBLRD*+<br />
MOVF TABLAT,0<br />
CALL SKRIV_CHAR<br />
TBLRD*+<br />
MOVF TABLAT,0<br />
CALL SKRIV_CHAR<br />
MOVF VARV,0,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVF CONHH,0,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONH,0,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONL,0,0<br />
CALL SKRIV_DIGIT<br />
Side 6
MOVLW A' '<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
CALL PRINT_SPACE<br />
CALL PRINT_SPACE<br />
DECFSZ TTMP,1,0<br />
GOTO PRINT_I_LOOP<br />
tnc.txt<br />
PRINT_V<br />
display<br />
Prints recived Voltages to<br />
MOVLW D'8'<br />
MOVWF<br />
PRINT_V_LOOP<br />
TTMP<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'80'<br />
CALL ADRES<br />
MOVLW A'V'<br />
CALL<br />
TBLRD*+<br />
SKRIV_CHAR<br />
MOVF TABLAT,0<br />
CALL<br />
TBLRD*+<br />
SKRIV_CHAR<br />
MOVF TABLAT,0<br />
CALL SKRIV_CHAR<br />
MOVF VARV,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVF CONHH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONL,0<br />
CALL SKRIV_DIGIT<br />
MOVLW A' '<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
Side 7
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0<br />
CALL SKRIV_CHAR<br />
DECFSZ TTMP,1<br />
GOTO PRINT_V_LOOP<br />
tnc.txt<br />
PRINT_T<br />
Temperatures to display<br />
;Prints recived<br />
MOVLW D'11'<br />
MOVWF<br />
PRINT_T_LOOP<br />
TTMP<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'80'<br />
CALL ADRES<br />
MOVLW A'T'<br />
CALL<br />
TBLRD*+<br />
SKRIV_CHAR<br />
MOVF TABLAT,0<br />
CALL<br />
TBLRD*+<br />
SKRIV_CHAR<br />
MOVF TABLAT,0<br />
CALL SKRIV_CHAR<br />
MOVF VARV,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVF CONHH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONL,0<br />
CALL SKRIV_DIGIT<br />
MOVLW A' '<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0,0<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0,0<br />
CALL SKRIV_CHAR<br />
MOVF POSTINC1,0,0<br />
CALL SKRIV_CHAR<br />
Side 8
DECFSZ TTMP,1<br />
GOTO PRINT_T_LOOP<br />
MOVLW H'80'<br />
CALL ADRES<br />
MOVLW A'E'<br />
CALL SKRIV_CHAR<br />
CALL PRINT_SPACE<br />
MOVF ERRORS,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVF CONHH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONL,0<br />
CALL SKRIV_DIGIT<br />
INCF VARV,1<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
MOVLW H'FF'<br />
CALL DELAY<br />
GOTO LOGG_LOOP<br />
tnc.txt<br />
SPACERS ;Prints a number of spaces<br />
MOVLW D'12'<br />
MOVWF TEMP<br />
LOOPS<br />
MOVLW A' '<br />
CALL SKRIV_CHAR<br />
DECFSZ TEMP,1<br />
GOTO LOOPS<br />
RETURN<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;<br />
;; Print Disp prints out the present comando value to the display<br />
;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;<br />
PRINT_DISP<br />
MOVLW H'80'<br />
Side 9
NEXT1<br />
NEXT2<br />
NEXT3<br />
NEXT4<br />
NEXT5<br />
NEXT6<br />
NEXT7<br />
NEXT8<br />
NEXT9<br />
NEXT10<br />
CALL ADRES<br />
MOVLW D'31'<br />
CPFSEQ I2Cdata<br />
GOTO NEXT1<br />
GOTO PRINT_PRINT<br />
MOVLW CMD_STATUS_DATA<br />
CPFSEQ I2Cdata<br />
GOTO NEXT2<br />
GOTO PRINT_STAUS<br />
MOVLW CMD_LOGG_DATA<br />
CPFSEQ I2Cdata<br />
GOTO NEXT3<br />
GOTO PRINT_LOGG<br />
MOVLW CMD_AIS_ON<br />
CPFSEQ I2Cdata<br />
GOTO NEXT4<br />
GOTO PRINT_AIS_ON<br />
MOVLW CMD_AIS_OFF<br />
CPFSEQ I2Cdata<br />
GOTO NEXT5<br />
GOTO PRINT_AIS_OFF<br />
MOVLW CMD_MAG_ON<br />
CPFSEQ I2Cdata<br />
GOTO NEXT6<br />
GOTO PRINT_MAG_ON<br />
MOVLW CMD_MAG_OFF<br />
CPFSEQ I2Cdata<br />
GOTO NEXT7<br />
GOTO PRINT_MAG_OFF<br />
MOVLW CMD_SBAND_ON<br />
CPFSEQ I2Cdata<br />
GOTO NEXT8<br />
GOTO PRINT_SBAND_ON<br />
MOVLW CMD_SBAND_OFF<br />
CPFSEQ I2Cdata<br />
GOTO NEXT9<br />
GOTO PRINT_SBAND_OFF<br />
MOVLW CMD_RESET<br />
CPFSEQ I2Cdata<br />
GOTO NEXT10<br />
GOTO PRINT_RESET<br />
MOVLW CMD_PAUSE<br />
tnc.txt<br />
Side 10
NEXT11<br />
NEXT12<br />
CPFSEQ I2Cdata<br />
GOTO NEXT11<br />
GOTO PRINT_PAUSE<br />
MOVLW CMD_RESUME<br />
CPFSEQ I2Cdata<br />
GOTO NEXT12<br />
GOTO PRINT_RESUME<br />
RETURN<br />
PRINT_PRINT<br />
MOVLW PRINTT<br />
CALL PRINT<br />
CALL SPACERS<br />
RETURN<br />
PRINT_STAUS<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW STATUSS<br />
CALL PRINT<br />
CALL SPACERS<br />
RETURN<br />
PRINT_LOGG<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW A'L'<br />
CALL SKRIV_CHAR<br />
MOVLW A'o'<br />
CALL SKRIV_CHAR<br />
MOVLW A'g'<br />
CALL SKRIV_CHAR<br />
MOVLW A'g'<br />
CALL SKRIV_CHAR<br />
CALL SPACERS<br />
RETURN<br />
PRINT_AIS_ON<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW AIS_ON<br />
CALL PRINT<br />
CALL SPACERS<br />
RETURN<br />
PRINT_AIS_OFF<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW AIS_OFF<br />
CALL PRINT<br />
CALL SPACERS<br />
tnc.txt<br />
Side 11
RETURN<br />
PRINT_MAG_ON<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW MAG_ON<br />
CALL PRINT<br />
CALL SPACERS<br />
RETURN<br />
PRINT_MAG_OFF<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW MAG_OFF<br />
CALL PRINT<br />
RETURN<br />
PRINT_SBAND_ON<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW SBAND_ON<br />
CALL PRINT<br />
CALL SPACERS<br />
RETURN<br />
PRINT_SBAND_OFF<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW SBAND_OFF<br />
CALL PRINT<br />
CALL SPACERS<br />
RETURN<br />
PRINT_RESET<br />
MOVLW RESETT<br />
CALL PRINT<br />
CALL SPACERS<br />
RETURN<br />
PRINT_PAUSE<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW PAUSE<br />
CALL PRINT<br />
CALL SPACERS<br />
RETURN<br />
PRINT_RESUME<br />
MOVLW SEND<br />
CALL PRINT<br />
MOVLW RESUME<br />
CALL PRINT<br />
tnc.txt<br />
Side 12
CALL SPACERS<br />
RETURN<br />
CLEAR_MEM<br />
MOVLW H'80'<br />
MOVWF FSR0L<br />
CLRF FSR0H<br />
MEM_LOOP<br />
MOVLW H'FE'<br />
MOVWF POSTINC0<br />
MOVF FSR0H,0<br />
SUBLW H'06'<br />
BTFSS STATUS,Z<br />
GOTO MEM_LOOP<br />
MOVLW H'80'<br />
MOVWF FSR0L<br />
CLRF FSR0H<br />
RETURN<br />
tnc.txt<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; ALT_I2C sends data to the I2C Bus ;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
ALT_I2C<br />
BCF INTCON,7<br />
MOVLW ADR_PMU<br />
MOVWF I2Cbyte<br />
CALL I2C_STARTS<br />
MOVF I2Cdata,0<br />
MOVWF I2Cbyte<br />
CALL SEND_BYTE<br />
CALL I2C_STOPS<br />
BSF INTCON,7<br />
RETURN<br />
TIME_SEND<br />
BCF INTCON,7<br />
MOVLW H'00'<br />
MOVWF I2Cbyte<br />
CALL I2C_STARTS<br />
MOVLW CLK_COMAND<br />
MOVWF I2Cbyte<br />
CALL SEND_BYTE<br />
MOVLW d'02'<br />
MOVWF I2Cbyte<br />
CALL SEND_BYTE<br />
MOVF HOUR,0<br />
MOVWF I2Cbyte<br />
CALL SEND_BYTE<br />
MOVF MIN,0<br />
Side 13
MOVWF I2Cbyte<br />
CALL SEND_BYTE<br />
CALL I2C_STOPS<br />
BSF INTCON,7<br />
RETURN<br />
tnc.txt<br />
I2C_STARTS<br />
BCF LATB,SCLP ;CLK LOW WHEN OUTPUT<br />
BCF LATB,SDAP ;DATA LOW WHEN OUTPUT<br />
BCF PORTB,SCLP<br />
BCF PORTB,SDAP<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
NOP<br />
NOP<br />
NOP<br />
NOP<br />
BCF TRISB,SDAP ;START<br />
BCF TRISB,SCLP<br />
BCF PORTB,SCLP<br />
SEND_BYTE<br />
BCF TRISB,SDAP<br />
BCF PORTB,SDAP<br />
BCF STATUS,C<br />
RLCF I2Cbyte,1<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cbyte,1 ;BYTE1<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cbyte,1 ;BYTE2<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cbyte,1 ;BYTE3<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
Side 14
BSF TRISB,SDAP<br />
tnc.txt<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cbyte,1 ;BYTE4<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cbyte,1 ;BYTE5<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cbyte,1 ;BYTE6<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP<br />
BCF STATUS,C<br />
RLCF I2Cbyte,1 ;BYTE7<br />
BCF TRISB,SCLP<br />
BCF TRISB,SDAP<br />
BTFSC STATUS,C<br />
BSF TRISB,SDAP<br />
BSF TRISB,SCLP ;BYTE8<br />
NOP<br />
NOP<br />
BCF TRISB,SCLP<br />
BCF PORTB,SCLP<br />
BSF TRISB,SDAP ;RELEASE DATA<br />
BSF TRISB,SCLP<br />
BTFSC PORTB,SDAP ;check ack<br />
GOTO ERR_I2C<br />
BCF TRISB,SCLP<br />
RETURN<br />
I2C_STOPS<br />
BCF TRISB,SDAP<br />
BCF PORTB,SDAP<br />
BSF TRISB,SCLP<br />
NOP<br />
Side 15
NOP<br />
BSF TRISB,SDAP<br />
NOP<br />
NOP<br />
RETURN<br />
ERR_I2C<br />
BCF TRISB,SCLP<br />
BCF<br />
NOP<br />
NOP<br />
PORTB,SCLP<br />
BSF TRISB,SCLP<br />
CALL CLEAR_DISP<br />
BSF TRISB,SDAP<br />
MOVLW A'E'<br />
CALL SKRIV_CHAR<br />
MOVLW A'R'<br />
CALL SKRIV_CHAR<br />
MOVLW A'R'<br />
CALL SKRIV_CHAR<br />
MOVLW A'O'<br />
CALL SKRIV_CHAR<br />
MOVLW A'R'<br />
CALL SKRIV_CHAR<br />
MOVLW D'22'<br />
MOVWF<br />
I2C_ERR_WAIT<br />
MEM<br />
MOVLW H'FF'<br />
CALL DELAY<br />
DECFSZ MEM,1<br />
GOTO<br />
RESET<br />
I2C_ERR_WAIT<br />
tnc.txt<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Send From I2C rutine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Delay sub routine is a delay routine that ;;;;<br />
;; the input value in mS ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
DELAY<br />
MOVWF DELAY2 ;FLYTTAR TALET I ACC TILL DELAY2<br />
MOVLW D'165' ;LÄGGER TALET 2FH I ACC<br />
MOVWF DELAY1 ;FLYTTAR ACC TILL DELAY1<br />
LOOP1 DECFSZ DELAY1,1 ;MINSKA DELAY1 MED 1<br />
GOTO LOOP1 ;GÅR TILL LOOP1 OM DELAY1>=1<br />
REFIL MOVLW D'165' ;FLYTTAR TALET 2FH TILL ACC<br />
MOVWF DELAY1 ;LÄGGER ACC I DELAY1<br />
DECFSZ DELAY2 ;MINSKAR DELAY2 MED 1<br />
GOTO LOOP1 ;GÅR TILL LOOP1 OM DELAY2>=1<br />
Side 16
tnc.txt<br />
RETURN ;ÅTERGÅR<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Delay routine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; I2C interupt routine reads an byte recived ;;;;<br />
;; on the I2C bus, and store it in I2C memory ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
I2C_INTERUPT<br />
BCF PIR1,3 ;NOLLAR INTERUPT FLAGGA<br />
BCF SSPCON1,6,0<br />
BTFSS SSPSTAT,5,0 ;data/adress?<br />
GOTO I2C_DATAR<br />
MOVF SSPBUF,0,0<br />
MOVWF POSTINC0,0<br />
RETFIE<br />
I2C_DATAR<br />
MOVF SSPBUF,0,0<br />
BTFSC SSPBUF,0,0<br />
CALL RESET_I2C<br />
RETFIE<br />
RESET_I2C<br />
RESET<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of I"C interupt rutine ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Timer 0 keeps the time in the emulator ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
TIMER0_INTERUPT<br />
BCF INTCON,2 ;Clear interupt<br />
MOVLW H'F8'<br />
MOVWF TMR0H<br />
MOVLW H'61'<br />
MOVWF TMR0L<br />
INCF SEC,1<br />
MOVLW D'59'<br />
CPFSGT SEC<br />
GOTO RET_INT<br />
CLRF SEC<br />
INCF MIN,1<br />
MOVLW D'59'<br />
CPFSGT MIN<br />
GOTO RET_INT<br />
CLRF MIN<br />
Side 17
RET_INT<br />
INCF HOUR,1<br />
MOVLW D'23'<br />
CPFSGT HOUR<br />
GOTO RET_INT<br />
CLRF HOUR<br />
MOVF SEC,1<br />
BTFSC STATUS,Z<br />
CALL TIME_SEND<br />
RETFIE<br />
tnc.txt<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of Interupt routine Timer0 ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Read table is returning a value from the adres ;;;;<br />
;; in the tabel that T0value is pointing at ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
READ_TABLE<br />
CLRF PCLATH<br />
MOVF T0VALUE,0<br />
MOVWF PCL<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; End of READ_LIMIT ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;;;;;;;;;;;;;;;;;Display rutiner;;;;;;;;;;;;;;;;;;;;;;;<br />
PRINT_TIME<br />
MOVLW H'E0'<br />
CALL ADRES<br />
MOVF HOUR,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVF CONH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONL,0<br />
CALL SKRIV_DIGIT<br />
MOVLW A':'<br />
CALL SKRIV_CHAR<br />
MOVF MIN,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVF CONH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONL,0<br />
CALL SKRIV_DIGIT<br />
MOVLW A':'<br />
CALL SKRIV_CHAR<br />
MOVF SEC,0<br />
MOVWF CONT<br />
Side 18
DISPLAY<br />
CALL CONVERT<br />
MOVF CONH,0<br />
CALL SKRIV_DIGIT<br />
MOVF CONL,0<br />
CALL SKRIV_DIGIT<br />
RETURN<br />
;GOTO PRINT_UI<br />
;GOTO PRINT_TEMPERATUR<br />
MOVF DISP_ADR,0<br />
CALL ADRES<br />
MOVF I2Cdata,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVF CONHH,0<br />
ADDLW H'30'<br />
CALL SKRIV_CHAR<br />
MOVF CONH,0<br />
ADDLW H'30'<br />
CALL SKRIV_CHAR<br />
MOVF CONL,0<br />
ADDLW H'30'<br />
CALL SKRIV_CHAR<br />
RETURN<br />
tnc.txt<br />
PRINT_TEMPERATUR<br />
MOVLW H'80'<br />
CALL ADRES<br />
MOVLW A'T'<br />
CALL SKRIV_CHAR<br />
MOVLW A'e'<br />
CALL SKRIV_CHAR<br />
MOVLW A'm'<br />
CALL SKRIV_CHAR<br />
MOVLW A'p'<br />
CALL SKRIV_CHAR<br />
MOVLW TEMPS1<br />
CALL PRINT<br />
MOVLW H'51' ;;;;SKA VA 51<br />
MOVWF FSR2L<br />
CLRF<br />
TEMP_LOOP<br />
FSR2H<br />
MOVF INDF2,0<br />
SUBLW H'FF'<br />
BZ ERRORP<br />
MOVF INDF2,0<br />
SUBLW D'50'<br />
BN PLUS<br />
MINUS MOVF INDF2,0<br />
Side 19
SUBLW D'50'<br />
MOVWF INDF2<br />
MOVWF TEMPT<br />
MINL MOVLW D'4'<br />
SUBWF TEMPT,1<br />
BN MINEND<br />
DECF INDF2,1<br />
GOTO MINL<br />
MINEND<br />
MOVF INDF2,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVLW H'FD'<br />
MOVWF CONHH<br />
GOTO BCD<br />
PLUS MOVLW D'50'<br />
SUBWF INDF2,1<br />
MOVF INDF2,0<br />
MOVWF TEMPT<br />
PLUL MOVLW D'4'<br />
SUBWF TEMPT,1<br />
BN PLUEND<br />
DECF INDF2,1<br />
GOTO PLUL<br />
PLUEND<br />
MOVF INDF2,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
MOVLW H'FB'<br />
MOVWF CONHH<br />
GOTO BCD<br />
ERRORP<br />
BCD<br />
MOVLW H'15'<br />
MOVWF CONHH<br />
MOVLW H'42'<br />
MOVWF CONH<br />
MOVLW H'42'<br />
MOVWF CONL<br />
CALL PRINT_CONV<br />
INCF FSR2L,1<br />
MOVF FSR2L,0<br />
SUBLW H'5B'<br />
BTFSS STATUS,C<br />
RETURN<br />
MOVF FSR2L,0<br />
SUBLW H'57'<br />
BTFSC STATUS,Z<br />
tnc.txt<br />
Side 20
CALL NEW_LINE<br />
GOTO TEMP_LOOP<br />
PRINT_UI<br />
MOVLW H'80'<br />
CALL ADRES<br />
MOVLW A'I'<br />
CALL SKRIV_CHAR<br />
MOVLW A'&'<br />
CALL SKRIV_CHAR<br />
MOVLW A'U'<br />
CALL SKRIV_CHAR<br />
MOVLW TEMPS1<br />
CALL PRINT<br />
MOVLW H'40'<br />
MOVWF FSR2L<br />
CLRF FSR2H<br />
DISP_LOOP<br />
MOVF INDF2,0<br />
MOVWF CONT<br />
CALL CONVERT<br />
CALL PRINT_CONV<br />
INCF FSR2L,1<br />
MOVF FSR2L,0<br />
SUBLW H'50'<br />
BTFSS STATUS,C<br />
RETURN<br />
SUBLW H'46'<br />
BTFSC STATUS,Z<br />
CALL NEW_LINE<br />
GOTO DISP_LOOP<br />
PRINT MOVWF TABELL<br />
PRINT_LOOP<br />
CALL ANROPA_TABELL<br />
ADDLW H'0'<br />
BTFSC STATUS,Z<br />
RETURN<br />
CALL SKRIV_CHAR<br />
INCF TABELL,1<br />
INCF TABELL,1<br />
GOTO PRINT_LOOP<br />
ANROPA_TABELL<br />
MOVF TABELL,0<br />
MOVWF PCL<br />
SKRIV_DIGIT<br />
tnc.txt<br />
Side 21
tnc.txt<br />
ADDLW<br />
SKRIV_CHAR<br />
H'30'<br />
BSF PORTE,1 ;SETS BIT1 PORTA=1 (RS)<br />
MOVWF PORTD ;SETS W TO PORTd<br />
CALL PULS<br />
MOVLW H'10'<br />
CALL<br />
RETURN<br />
DELAY<br />
PULS<br />
BSF PORTE,0 ;SETS E HÖG<br />
MOVLW H'08'<br />
CALL DELAY ;WAIT FOR 3 mS<br />
BCF PORTE,0 ;SETS E LOW<br />
MOVLW H'08'<br />
CALL DELAY<br />
RETURN<br />
PRINT_SPACE<br />
MOVLW H'FE'<br />
CALL SKRIV_CHAR<br />
RETURN<br />
CLEAR_DISP<br />
MOVLW H'01' ;SETS DISPLAY COMMANDO<br />
GOTO ADRES<br />
NEW_LINE<br />
MOVLW H'C0'<br />
ADRES<br />
MOVWF ADRESS ;SAVE W TO ADRESS<br />
CLRF PORTE ;CLEARS PORT E<br />
MOVF ADRESS,0 ;MOVES ADRESS TO W<br />
MOVWF PORTD ;MOVES W TO PORTB<br />
MOVLW H'05' ;WAIT<br />
CALL DELAY ;5mS<br />
CALL PULS ;SEND A PULSE<br />
MOVLW H'05' ;WAIT<br />
CALL DELAY ;5mS<br />
RETURN<br />
CONVERT<br />
CLRF CONHH ;Clears 100:s<br />
CLRF CONH ;Clears 10:s<br />
CLRF CONL ;Clears 1:s<br />
HUNDRA MOVLW D'100' ;Counts hundreds<br />
SUBWF CONT,0<br />
BTFSS STATUS,C<br />
GOTO TIOTAL<br />
MOVWF CONT<br />
Side 22
INCF CONHH<br />
GOTO HUNDRA<br />
tnc.txt<br />
TIOTAL ;Counts 10s<br />
MOVLW D'10'<br />
SUBWF CONT,0<br />
BTFSS STATUS,C<br />
GOTO ENTAL<br />
MOVWF CONT<br />
INCF CONH<br />
GOTO TIOTAL<br />
ENTAL ;Counts 1s<br />
MOVF CONT,0<br />
MOVWF CONL<br />
RETURN<br />
PRINT_CONV ;Prints a converted value to the<br />
display<br />
MOVF CONHH,0<br />
ADDLW H'30'<br />
CALL SKRIV_CHAR<br />
MOVF CONH,0<br />
ADDLW H'30'<br />
CALL SKRIV_CHAR<br />
MOVF CONL,0<br />
ADDLW H'30'<br />
CALL SKRIV_CHAR<br />
RETURN<br />
END<br />
Side 23
text_TNC.txt<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Tables with ASCII signs ;;;<br />
;; for writing on dislpay ;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
ORG PRINTT<br />
RETLW A'P'<br />
RETLW A'r'<br />
RETLW A'i'<br />
RETLW A'n'<br />
RETLW A't'<br />
RETLW A' '<br />
RETLW A'L'<br />
RETLW A'o'<br />
RETLW A'g'<br />
RETLW A'g'<br />
RETLW H'00'<br />
ORG SEND<br />
RETLW A'S'<br />
RETLW A'e'<br />
RETLW A'n'<br />
RETLW A'd'<br />
RETLW A' '<br />
RETLW H'00'<br />
ORG STATUSS<br />
RETLW A'S'<br />
RETLW A't'<br />
RETLW A'a'<br />
RETLW A't'<br />
RETLW A'u'<br />
RETLW A's'<br />
RETLW H'00'<br />
ORG AIS_ON<br />
RETLW A'A'<br />
RETLW A'I'<br />
RETLW A'S'<br />
RETLW A' '<br />
RETLW A'O'<br />
RETLW A'n'<br />
RETLW H'00'<br />
ORG AIS_OFF<br />
RETLW A'A'<br />
RETLW A'I'<br />
RETLW A'S'<br />
RETLW A' '<br />
RETLW A'O'<br />
RETLW A'F'<br />
Side 1
RETLW A'F'<br />
RETLW H'00'<br />
ORG MAG_ON<br />
RETLW A'M'<br />
RETLW A'a'<br />
RETLW A'g'<br />
RETLW A'n'<br />
RETLW A'e'<br />
RETLW A't'<br />
RETLW A'o'<br />
RETLW A'm'<br />
RETLW A'e'<br />
RETLW A't'<br />
RETLW A'e'<br />
RETLW A'r'<br />
RETLW A' '<br />
RETLW A'O'<br />
RETLW A'n'<br />
RETLW H'00'<br />
ORG MAG_OFF<br />
RETLW A'M'<br />
RETLW A'a'<br />
RETLW A'g'<br />
RETLW A'n'<br />
RETLW A'e'<br />
RETLW A't'<br />
RETLW A'o'<br />
RETLW A'm'<br />
RETLW A'e'<br />
RETLW A't'<br />
RETLW A'e'<br />
RETLW A'r'<br />
RETLW A' '<br />
RETLW A'O'<br />
RETLW A'f'<br />
RETLW A'f'<br />
RETLW H'00'<br />
ORG SBAND_ON<br />
RETLW A'S'<br />
RETLW A'-'<br />
RETLW A'B'<br />
RETLW A'a'<br />
RETLW A'n'<br />
RETLW A'd'<br />
RETLW A' '<br />
RETLW A'O'<br />
RETLW A'n'<br />
RETLW H'00'<br />
text_TNC.txt<br />
Side 2
ORG SBAND_OFF<br />
RETLW A'S'<br />
RETLW A'-'<br />
RETLW A'B'<br />
RETLW A'a'<br />
RETLW A'n'<br />
RETLW A'd'<br />
RETLW A' '<br />
RETLW A'O'<br />
RETLW A'f'<br />
RETLW A'f'<br />
RETLW H'00'<br />
ORG RESETT<br />
RETLW A'R'<br />
RETLW A'e'<br />
RETLW A's'<br />
RETLW A'e'<br />
RETLW A't'<br />
RETLW A' '<br />
RETLW A'P'<br />
RETLW A'M'<br />
RETLW A'U'<br />
RETLW H'00'<br />
ORG PAUSE<br />
RETLW A'P'<br />
RETLW A'a'<br />
RETLW A'u'<br />
RETLW A's'<br />
RETLW A'e'<br />
RETLW H'00'<br />
ORG RESUME<br />
RETLW A'R'<br />
RETLW A'e'<br />
RETLW A's'<br />
RETLW A'u'<br />
RETLW A'm'<br />
RETLW A'e'<br />
RETLW H'00'<br />
ORG TEXT_LIST<br />
DW H'4D4D'<br />
DW H'6E49'<br />
DW H'7455'<br />
DW H'6464'<br />
DW H'6855'<br />
DW H'6253'<br />
DW H'6856'<br />
DW H'5341'<br />
DW H'4353'<br />
text_TNC.txt<br />
Side 3
DW H'4150'<br />
DW H'7442'<br />
DW H'6464'<br />
DW H'6253'<br />
DW H'4D4D'<br />
DW H'4941'<br />
DW H'5855'<br />
DW H'5856'<br />
DW H'4353'<br />
DW H'7442'<br />
DW H'4441'<br />
DW H'4941'<br />
DW H'4E54'<br />
DW H'6855'<br />
DW H'5253'<br />
DW H'4341'<br />
DW H'4342'<br />
DW H'4343'<br />
DW H'4344'<br />
DW H'435A'<br />
text_TNC.txt<br />
Side 4
equn.txt<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Sets different memory loacation to ;;;<br />
;; specified names and names some vaues ;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
RES_V EQU H'0'<br />
INT_H EQU H'8'<br />
INT_L EQU h'18'<br />
DIGPT EQU H'4'<br />
STATUS_PTR_SAVE EQU H'0A' ;Pointer for status<br />
I2Cbyte<br />
I2C<br />
EQU H'10' ;Byte that will be sent on<br />
I2C_ERROR EQU H'1A' ;Error flags for I2C<br />
OLD_TIMEH EQU H'1B' ;Saved log time high byte<br />
OLD_TIMEL EQU H'1C' ;Saved log time low byte<br />
FLAG EQU H'1D' ;Generall flaggs<br />
TEMP2 EQU H'1E' ;Temporary memory<br />
; EQU H'1F'<br />
DELAY1 EQU H'20' ;Memory for delay loop<br />
DELAY2 EQU H'21' ;Momory for delay loop<br />
CONH EQU H'22' ;Byte for BCD 10<br />
CONL EQU H'23' ;Byte for BCD 1<br />
CONT EQU H'24' ;Byte for BCD input value<br />
CONHH EQU H'25' ;Byte for BCD 100s<br />
SUBSYSTEMS EQU H'26' ;Bits telling which<br />
subsytem that is turned on<br />
; EQU H'27'<br />
TABELL EQU H'28' ;Byte for address when<br />
reading from FLASH<br />
SENSOR<br />
read<br />
EQU H'29' ;Number of sensor that is<br />
MEM EQU H'2A' ;Temporary memory<br />
TEMPT EQU H'2B' ;Temporary memory<br />
LAST_HOUR<br />
hours<br />
EQU H'2C' ;Memory space for saving<br />
LAST_MIN<br />
minutes<br />
EQU H'2D' ;Memory space for saving<br />
; EQU H'2E'<br />
; EQU H'2F'<br />
; EQU H'30'<br />
TEMP EQU H'31' ;Temporary memory<br />
LIMIT_POINTER EQU H'32' ;Pointer for sensor limits<br />
; EQU H'33'<br />
T0VALUE EQU H'34' ;Value for Timer0<br />
ERROR_RETL<br />
byte<br />
EQU H'35' ;Error return address low<br />
ERROR_RETH<br />
byte<br />
EQU H'36' ;Error return address high<br />
I2C_POINTER EQU H'37' ;Pointer for I2C<br />
; EQU H'38'<br />
; EQU H'39'<br />
Side 1
equn.txt<br />
; EQU H'3A'<br />
I2C_REC_ADR EQU H'3B' ;Recived address<br />
COMAND EQU H'3C' ;Recived command<br />
I2C_BYTE_NR EQU H'3D' ;Number og bytes to be<br />
recived<br />
HOUR EQU H'3E' ;Recived hour<br />
MIN EQU H'3F' ;Recived minutes<br />
IMAG EQU H'40' ;Magnetometer current<br />
IIN EQU H'41' ;Battery Input current<br />
IUT EQU H'42' ;Battery Output current<br />
IDD EQU H'43' ;Vdd Current<br />
IUHF EQU H'44' ;UHF current<br />
IS EQU H'45' ;S-band trensmitter<br />
current<br />
IVHF EQU H'46' ;VHF current<br />
IAIS EQU H'47' ;AIS current<br />
ISOL EQU H'48' ;Current from solar cells<br />
IPAUHF equ h'49' ;Curent to UHF Power<br />
amplyfier<br />
VBAT EQU H'4A' ;Battery voltage<br />
VDD EQU H'4B' ;Voltage on Vdd<br />
VS EQU H'4C' ;S-Band voltage<br />
VMAG EQU H'4D' ;Voltage to magnetometer<br />
VAIS EQU H'4E' ;Voltage to AIS<br />
VUHF EQU H'4F' ;Voltage to UHF<br />
VVHF EQU H'50' ;Voltage to VHF<br />
VSOL EQU H'51' ;Solar cells volatge<br />
TBAT EQU H'52' ;Temperature on Batteries<br />
TADCS EQU H'53' ;Temperature on ADCS<br />
TAIS EQU H'54' ;Temperature on AIS<br />
TTNC EQU H'55' ;Temperature on TNC<br />
TUHF EQU H'56' ;Temperature on UHF<br />
TS EQU H'57' ;Temperature on S-band<br />
TA EQU H'58' ;Temperature on Solar<br />
cells A-side<br />
TB EQU H'59' ;Temperature on solar<br />
cells B-side<br />
TC EQU H'5A' ;Temperature on soalr<br />
cells C-side<br />
TD EQU H'5B' ;Temperature on solar<br />
cells D-side<br />
TZ EQU H'5C' ;Temperature on solar<br />
cells Nadir-side<br />
ERRORS EQU H'5D' ;Error byte<br />
TEMPS1 EQU H'60' ;Defines address to Tables<br />
Side 2
equn.txt<br />
LIMITS equ H'8C' ;<br />
TMR0_VALUES EQU H'20' ;<br />
START_ADR EQU H'140' ;Address where the program<br />
begins<br />
RETADR1 EQU H'130' ;Return address for Temp<br />
routine<br />
RETADR2 EQU H'134'<br />
RETADRI2C EQU H'138'<br />
START_LOGG_ADRL EQU H'00' ;Flash logg start adres<br />
START_LOGG_ADRH EQU H'20' ;h2000<br />
STOP_LOGG_ADRL EQU H'20' ;Flash Logg stop adres<br />
STOP_LOGG_ADRH EQU H'33' ;h3320<br />
EE_STARTH EQU H'00' ;Memory location for<br />
pointers in EEPROM<br />
EE_STARTL EQU H'01'<br />
EE_STOPH EQU H'02'<br />
EE_STOPL EQU H'03'<br />
EE_tempL EQU H'04'<br />
EE_tempH EQU H'05'<br />
;I2C<br />
SCLP EQU D'7' ;SCLP pin = pin7<br />
SDAP EQU D'6' ;SDAP pin = pin6<br />
b_dir EQU D'0' ;b_dir=0<br />
I2CTemp EQU D'1' ;Defines byte for I2CTemp<br />
I2Cdata EQU D'0' ;Defines byte for I2Cdata<br />
Side 3
comands.txt<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
;; Commandos and addresses that can be sent on the I2C bus ;;;;<br />
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />
CMD_STATUS_DATA EQU D'32'<br />
CMD_LOGG_DATA EQU D'33'<br />
CMD_AIS_ON EQU D'34'<br />
CMD_AIS_OFF EQU D'35'<br />
CMD_MAG_ON EQU D'36'<br />
CMD_MAG_OFF EQU D'37'<br />
CMD_SBAND_ON EQU D'38'<br />
CMD_SBAND_OFF EQU D'39'<br />
CMD_RESET EQU D'40'<br />
CMD_PAUSE EQU D'192'<br />
CMD_RESUME EQU D'193'<br />
CLK_COMAND EQU D'194'<br />
ADR_TNC EQU H'78' ;Address to TNC<br />
ADR_PMU EQU H'72' ;Address to PMU<br />
FULL_LOGG EQU D'8'<br />
VB_digpt EQU D'128' ;Battery voltage level for<br />
digipeat to be turned on<br />
VS_digpt EQU D'112' ;Solar cells voltage for digipeat<br />
to be turned on<br />
Side 1
P18F452.txt<br />
LIST<br />
; P18F452.INC Standard Header File, Version 1.1 Microchip<br />
Technology, Inc.<br />
NOLIST<br />
; This header file defines configurations, registers, and other<br />
useful bits of<br />
; information for the PIC18F452 microcontroller. These names are<br />
taken to match<br />
; the data sheets as closely as possible.<br />
; Note that the processor must be selected before this file is<br />
; included. The processor may be selected the following ways:<br />
; 1. Command line switch:<br />
; C:\ MPASM MYFILE.ASM /PIC18F452<br />
; 2. LIST directive in the source file<br />
; LIST P=PIC18F452<br />
; 3. Processor Type entry in the MPASM full-screen interface<br />
; 4. Setting the processor in the MPLAB Project Dialog<br />
;=================================================================<br />
=========<br />
;<br />
; Revision History<br />
;<br />
;=================================================================<br />
=========<br />
;Rev: Date: Details:<br />
Who:<br />
;1.0 03/23/01 Modified C452 for F452<br />
tr<br />
;1.1 08/01/01 Added EECON1 bits, corrected code protect<br />
config bit inserts<br />
;1.2 09/17/01 Corrected MAXRAM,BADRAM<br />
tr<br />
;1.3 10/23/01 Corrected CONFIG bits/registers<br />
tr/pas<br />
;=================================================================<br />
=========<br />
;<br />
; Verify Processor<br />
;<br />
;=================================================================<br />
=========<br />
IFNDEF __18F452<br />
MESSG "Processor-header file mismatch. Verify selected<br />
processor."<br />
ENDIF<br />
;=================================================================<br />
Side 1
P18F452.txt<br />
=========<br />
; 18Fxxx Family EQUates<br />
;=================================================================<br />
=========<br />
FSR0 EQU 0<br />
FSR1 EQU 1<br />
FSR2 EQU 2<br />
FAST EQU 1<br />
W EQU 0<br />
A EQU 0<br />
ACCESS EQU 0<br />
BANKED EQU 1<br />
;=================================================================<br />
=========<br />
;=================================================================<br />
=========<br />
; 16Cxxx/17Cxxx Substitutions<br />
;=================================================================<br />
=========<br />
#define clrw clrf WREG ; PIC16Cxxx code substitution (WREG<br />
is addressable)<br />
#define CLRW CLRF WREG ; PIC16Cxxx code substitution (WREG<br />
is addressable)<br />
#define negw negf WREG ; PIC16Cxxx code substitution (WREG<br />
is addressable)<br />
#define NEGW NEGF WREG ; PIC16Cxxx code substitution (WREG<br />
is addressable)<br />
#define movpf movff ; PIC17Cxxx code substitution<br />
#define MOVPF MOVFF ; PIC17Cxxx code substitution<br />
#define movfp movff ; PIC17Cxxx code substitution<br />
#define MOVFP MOVFF ; PIC17Cxxx code substitution<br />
#define lcall call ; PIC17Cxxx code substitution<br />
#define LCALL CALL ; PIC17Cxxx code substitution<br />
#define lgoto goto ; PIC17Cxxx code substitution<br />
#define LGOTO GOTO ; PIC17Cxxx code substitution<br />
#define DDRA TRISA ; PIC17Cxxx SFR substitution<br />
#define DDRB TRISB ; PIC17Cxxx SFR substitution<br />
#define DDRC TRISC ; PIC17Cxxx SFR substitution<br />
#define DDRD TRISD ; PIC17Cxxx SFR substitution<br />
#define DDRE TRISE ; PIC17Cxxx SFR substitution<br />
;=================================================================<br />
=========<br />
;<br />
; Register Definitions<br />
;<br />
;=================================================================<br />
=========<br />
Side 2
P18F452.txt<br />
;----- Register Files<br />
-----------------------------------------------------<br />
TOSU EQU H'0FFF'<br />
TOSH EQU H'0FFE'<br />
TOSL EQU H'0FFD'<br />
STKPTR EQU H'0FFC'<br />
PCLATU EQU H'0FFB'<br />
PCLATH EQU H'0FFA'<br />
PCL EQU H'0FF9'<br />
TBLPTRU EQU H'0FF8'<br />
TBLPTRH EQU H'0FF7'<br />
TBLPTRL EQU H'0FF6'<br />
TABLAT EQU H'0FF5'<br />
PRODH EQU H'0FF4'<br />
PRODL EQU H'0FF3'<br />
INTCON EQU H'0FF2'<br />
INTCON1 EQU H'0FF2'<br />
INTCON2 EQU H'0FF1'<br />
INTCON3 EQU H'0FF0'<br />
INDF0 EQU H'0FEF'<br />
POSTINC0 EQU H'0FEE'<br />
POSTDEC0 EQU H'0FED'<br />
PREINC0 EQU H'0FEC'<br />
PLUSW0 EQU H'0FEB'<br />
FSR0H EQU H'0FEA'<br />
FSR0L EQU H'0FE9'<br />
WREG EQU H'0FE8'<br />
INDF1 EQU H'0FE7'<br />
POSTINC1 EQU H'0FE6'<br />
POSTDEC1 EQU H'0FE5'<br />
PREINC1 EQU H'0FE4'<br />
PLUSW1 EQU H'0FE3'<br />
FSR1H EQU H'0FE2'<br />
FSR1L EQU H'0FE1'<br />
BSR EQU H'0FE0'<br />
INDF2 EQU H'0FDF'<br />
POSTINC2 EQU H'0FDE'<br />
POSTDEC2 EQU H'0FDD'<br />
PREINC2 EQU H'0FDC'<br />
PLUSW2 EQU H'0FDB'<br />
FSR2H EQU H'0FDA'<br />
FSR2L EQU H'0FD9'<br />
STATUS EQU H'0FD8'<br />
TMR0H EQU H'0FD7'<br />
TMR0L EQU H'0FD6'<br />
T0CON EQU H'0FD5'<br />
Side 3
;RESERVED_0FD4 EQU H'0FD4'<br />
OSCCON EQU H'0FD3'<br />
LVDCON EQU H'0FD2'<br />
WDTCON EQU H'0FD1'<br />
RCON EQU H'0FD0'<br />
TMR1H EQU H'0FCF'<br />
TMR1L EQU H'0FCE'<br />
T1CON EQU H'0FCD'<br />
TMR2 EQU H'0FCC'<br />
PR2 EQU H'0FCB'<br />
T2CON EQU H'0FCA'<br />
SSPBUF EQU H'0FC9'<br />
SSPADD EQU H'0FC8'<br />
SSPSTAT EQU H'0FC7'<br />
SSPCON1 EQU H'0FC6'<br />
SSPCON2 EQU H'0FC5'<br />
ADRESH EQU H'0FC4'<br />
ADRESL EQU H'0FC3'<br />
ADCON0 EQU H'0FC2'<br />
ADCON1 EQU H'0FC1'<br />
;RESERVED_0FC0 EQU H'0FC0'<br />
CCPR1H EQU H'0FBF'<br />
CCPR1L EQU H'0FBE'<br />
CCP1CON EQU H'0FBD'<br />
CCPR2H EQU H'0FBC'<br />
CCPR2L EQU H'0FBB'<br />
CCP2CON EQU H'0FBA'<br />
;RESERVED_0FB9 EQU H'0FB9'<br />
;RESERVED_0FB8 EQU H'0FB8'<br />
;RESERVED_0FB7 EQU H'0FB7'<br />
;RESERVED_0FB6 EQU H'0FB6'<br />
;RESERVED_0FB5 EQU H'0FB5'<br />
;RESERVED_0FB4 EQU H'0FB4'<br />
TMR3H EQU H'0FB3'<br />
TMR3L EQU H'0FB2'<br />
T3CON EQU H'0FB1'<br />
;RESERVED_0FB0 EQU H'0FB0'<br />
SPBRG EQU H'0FAF'<br />
RCREG EQU H'0FAE'<br />
TXREG EQU H'0FAD'<br />
TXSTA EQU H'0FAC'<br />
P18F452.txt<br />
Side 4
P18F452.txt<br />
RCSTA EQU H'0FAB'<br />
;RESERVED_0FAA EQU H'0FAA'<br />
EEADR EQU H'0FA9'<br />
EEDATA EQU H'0FA8'<br />
EECON2 EQU H'0FA7'<br />
EECON1 EQU H'0FA6'<br />
;RESERVED_0FA5 EQU H'0FA5'<br />
;RESERVED_0FA4 EQU H'0FA4'<br />
;RESERVED_0FA3 EQU H'0FA3'<br />
IPR2 EQU H'0FA2'<br />
PIR2 EQU H'0FA1'<br />
PIE2 EQU H'0FA0'<br />
IPR1 EQU H'0F9F'<br />
PIR1 EQU H'0F9E'<br />
PIE1 EQU H'0F9D'<br />
;RESERVED_0F9C EQU H'0F9C'<br />
;RESERVED_0F9B EQU H'0F9B'<br />
;RESERVED_0F9A EQU H'0F9A'<br />
;RESERVED_0F99 EQU H'0F99'<br />
;RESERVED_0F98 EQU H'0F98'<br />
;RESERVED_0F97 EQU H'0F97'<br />
TRISE EQU H'0F96'<br />
TRISD EQU H'0F95'<br />
TRISC EQU H'0F94'<br />
TRISB EQU H'0F93'<br />
TRISA EQU H'0F92'<br />
;RESERVED_0F91 EQU H'0F91'<br />
;RESERVED_0F90 EQU H'0F90'<br />
;RESERVED_0F8F EQU H'0F8F'<br />
;RESERVED_0F8E EQU H'0F8E'<br />
LATE EQU H'0F8D'<br />
LATD EQU H'0F8C'<br />
LATC EQU H'0F8B'<br />
LATB EQU H'0F8A'<br />
LATA EQU H'0F89'<br />
;RESERVED_0F88 EQU H'0F88'<br />
;RESERVED_0F87 EQU H'0F87'<br />
;RESERVED_0F86 EQU H'0F86'<br />
;RESERVED_0F85 EQU H'0F85'<br />
PORTE EQU H'0F84'<br />
PORTD EQU H'0F83'<br />
PORTC EQU H'0F82'<br />
Side 5
P18F452.txt<br />
PORTB EQU H'0F81'<br />
PORTA EQU H'0F80'<br />
;----- STKPTR Bits<br />
--------------------------------------------------------<br />
STKFUL EQU H'0007'<br />
STKUNF EQU H'0006'<br />
;----- INTCON Bits<br />
--------------------------------------------------------<br />
GIE EQU H'0007'<br />
GIEH EQU H'0007'<br />
PEIE EQU H'0006'<br />
GIEL EQU H'0006'<br />
TMR0IE EQU H'0005'<br />
T0IE EQU H'0005' ; For backward compatibility<br />
INT0IE EQU H'0004'<br />
INT0E EQU H'0004' ; For backward compatibility<br />
RBIE EQU H'0003'<br />
TMR0IF EQU H'0002'<br />
T0IF EQU H'0002' ; For backward compatibility<br />
INT0IF EQU H'0001'<br />
INT0F EQU H'0001' ; For backward compatibility<br />
RBIF EQU H'0000'<br />
;----- INTCON2 Bits<br />
--------------------------------------------------------<br />
NOT_RBPU EQU H'0007'<br />
RBPU EQU H'0007'<br />
INTEDG0 EQU H'0006'<br />
INTEDG1 EQU H'0005'<br />
INTEDG2 EQU H'0004'<br />
TMR0IP EQU H'0002'<br />
T0IP EQU H'0002' ; For compatibility with T0IE<br />
and T0IF<br />
RBIP EQU H'0000'<br />
;----- INTCON3 Bits<br />
--------------------------------------------------------<br />
INT2IP EQU H'0007'<br />
INT1IP EQU H'0006'<br />
INT2IE EQU H'0004'<br />
INT1IE EQU H'0003'<br />
INT2IF EQU H'0001'<br />
INT1IF EQU H'0000'<br />
;----- STATUS Bits<br />
--------------------------------------------------------<br />
N EQU H'0004'<br />
OV EQU H'0003'<br />
Z EQU H'0002'<br />
DC EQU H'0001'<br />
Side 6
P18F452.txt<br />
C EQU H'0000'<br />
;----- T0CON Bits<br />
---------------------------------------------------------<br />
TMR0ON EQU H'0007'<br />
T08BIT EQU H'0006'<br />
T0CS EQU H'0005'<br />
T0SE EQU H'0004'<br />
PSA EQU H'0003'<br />
T0PS2 EQU H'0002'<br />
T0PS1 EQU H'0001'<br />
T0PS0 EQU H'0000'<br />
;----- OSCON Bits<br />
---------------------------------------------------------<br />
SCS EQU H'0000'<br />
;----- LVDCON Bits<br />
---------------------------------------------------------<br />
IRVST EQU H'0005'<br />
LVDEN EQU H'0004'<br />
LVDL3 EQU H'0003'<br />
LVDL2 EQU H'0002'<br />
LVDL1 EQU H'0001'<br />
LVDL0 EQU H'0000'<br />
;----- WDTCON Bits<br />
---------------------------------------------------------<br />
SWDTEN EQU H'0000'<br />
;----- RCON Bits<br />
-----------------------------------------------------------<br />
IPEN EQU H'0007'<br />
NOT_RI EQU H'0004'<br />
RI EQU H'0004'<br />
NOT_TO EQU H'0003'<br />
TO EQU H'0003'<br />
NOT_PD EQU H'0002'<br />
PD EQU H'0002'<br />
NOT_POR EQU H'0001'<br />
POR EQU H'0001'<br />
NOT_BOR EQU H'0000'<br />
BOR EQU H'0000'<br />
;----- T1CON Bits<br />
---------------------------------------------------------<br />
RD16 EQU H'0007'<br />
T1CKPS1 EQU H'0005'<br />
T1CKPS0 EQU H'0004'<br />
T1OSCEN EQU H'0003'<br />
NOT_T1SYNC EQU H'0002'<br />
T1SYNC EQU H'0002'<br />
Side 7
P18F452.txt<br />
T1INSYNC EQU H'0002' ; For backward compatibility<br />
TMR1CS EQU H'0001'<br />
TMR1ON EQU H'0000'<br />
;----- T2CON Bits<br />
---------------------------------------------------------<br />
TOUTPS3 EQU H'0006'<br />
TOUTPS2 EQU H'0005'<br />
TOUTPS1 EQU H'0004'<br />
TOUTPS0 EQU H'0003'<br />
TMR2ON EQU H'0002'<br />
T2CKPS1 EQU H'0001'<br />
T2CKPS0 EQU H'0000'<br />
;----- SSPSTAT Bits<br />
-------------------------------------------------------<br />
SMP EQU H'0007'<br />
CKE EQU H'0006'<br />
D EQU H'0005'<br />
I2C_DAT EQU H'0005'<br />
NOT_A EQU H'0005'<br />
NOT_ADDRESS EQU H'0005'<br />
D_A EQU H'0005'<br />
DATA_ADDRESS EQU H'0005'<br />
P EQU H'0004'<br />
I2C_STOP EQU H'0004'<br />
S EQU H'0003'<br />
I2C_START EQU H'0003'<br />
R EQU H'0002'<br />
I2C_READ EQU H'0002'<br />
NOT_W EQU H'0002'<br />
NOT_WRITE EQU H'0002'<br />
R_W EQU H'0002'<br />
READ_WRITE EQU H'0002'<br />
UA EQU H'0001'<br />
BF EQU H'0000'<br />
;----- SSPCON1 Bits<br />
--------------------------------------------------------<br />
WCOL EQU H'0007'<br />
SSPOV EQU H'0006'<br />
SSPEN EQU H'0005'<br />
CKP EQU H'0004'<br />
SSPM3 EQU H'0003'<br />
SSPM2 EQU H'0002'<br />
SSPM1 EQU H'0001'<br />
SSPM0 EQU H'0000'<br />
;----- SSPCON2 Bits<br />
--------------------------------------------------------<br />
GCEN EQU H'0007'<br />
ACKSTAT EQU H'0006'<br />
Side 8
P18F452.txt<br />
ACKDT EQU H'0005'<br />
ACKEN EQU H'0004'<br />
RCEN EQU H'0003'<br />
PEN EQU H'0002'<br />
RSEN EQU H'0001'<br />
SEN EQU H'0000'<br />
;----- ADCON0 Bits<br />
--------------------------------------------------------<br />
ADCS1 EQU H'0007'<br />
ADCS0 EQU H'0006'<br />
CHS2 EQU H'0005'<br />
CHS1 EQU H'0004'<br />
CHS0 EQU H'0003'<br />
GO EQU H'0002'<br />
NOT_DONE EQU H'0002'<br />
DONE EQU H'0002'<br />
GO_DONE EQU H'0002'<br />
ADON EQU H'0000'<br />
;----- ADCON1 Bits<br />
--------------------------------------------------------<br />
ADFM EQU H'0007'<br />
ADCS2 EQU H'0006'<br />
PCFG3 EQU H'0003'<br />
PCFG2 EQU H'0002'<br />
PCFG1 EQU H'0001'<br />
PCFG0 EQU H'0000'<br />
;----- CCP1CON Bits<br />
-------------------------------------------------------<br />
DC1B1 EQU H'0005'<br />
CCP1X EQU H'0005' ; For backward compatibility<br />
DC1B0 EQU H'0004'<br />
CCP1Y EQU H'0004' ; For backward compatibility<br />
CCP1M3 EQU H'0003'<br />
CCP1M2 EQU H'0002'<br />
CCP1M1 EQU H'0001'<br />
CCP1M0 EQU H'0000'<br />
;----- CCP2CON Bits<br />
-------------------------------------------------------<br />
DC2B1 EQU H'0005'<br />
CCP2X EQU H'0005' ; For backward compatibility<br />
DC2B0 EQU H'0004'<br />
CCP2Y EQU H'0004' ; For backward compatibility<br />
CCP2M3 EQU H'0003'<br />
CCP2M2 EQU H'0002'<br />
CCP2M1 EQU H'0001'<br />
CCP2M0 EQU H'0000'<br />
;----- T3CON Bits<br />
Side 9
P18F452.txt<br />
---------------------------------------------------------<br />
RD16 EQU H'0007'<br />
T3CCP2 EQU H'0006'<br />
T3CKPS1 EQU H'0005'<br />
T3CKPS0 EQU H'0004'<br />
T3CCP1 EQU H'0003'<br />
NOT_T3SYNC EQU H'0002'<br />
T3SYNC EQU H'0002'<br />
T3INSYNC EQU H'0002' ; For backward compatibility<br />
TMR3CS EQU H'0001'<br />
TMR3ON EQU H'0000'<br />
;----- TXSTA Bits<br />
---------------------------------------------------------<br />
CSRC EQU H'0007'<br />
TX9 EQU H'0006'<br />
NOT_TX8 EQU H'0006' ; For backward compatibility<br />
TX8_9 EQU H'0006' ; For backward compatibility<br />
TXEN EQU H'0005'<br />
SYNC EQU H'0004'<br />
BRGH EQU H'0002'<br />
TRMT EQU H'0001'<br />
TX9D EQU H'0000'<br />
TXD8 EQU H'0000' ; For backward compatibility<br />
;----- RCSTA Bits<br />
---------------------------------------------------------<br />
SPEN EQU H'0007'<br />
RX9 EQU H'0006'<br />
RC9 EQU H'0006' ; For backward compatibility<br />
NOT_RC8 EQU H'0006' ; For backward compatibility<br />
RC8_9 EQU H'0006' ; For backward compatibility<br />
SREN EQU H'0005'<br />
CREN EQU H'0004'<br />
ADDEN EQU H'0003'<br />
FERR EQU H'0002'<br />
OERR EQU H'0001'<br />
RX9D EQU H'0000'<br />
RCD8 EQU H'0000' ; For backward compatibility<br />
;----- IPR2 Bits<br />
----------------------------------------------------------<br />
EEIP EQU H'0004'<br />
BCLIP EQU H'0003'<br />
LVDIP EQU H'0002'<br />
TMR3IP EQU H'0001'<br />
CCP2IP EQU H'0000'<br />
;----- PIR2 Bits<br />
----------------------------------------------------------<br />
EEIF EQU H'0004'<br />
BCLIF EQU H'0003'<br />
Side 10
P18F452.txt<br />
LVDIF EQU H'0002'<br />
TMR3IF EQU H'0001'<br />
CCP2IF EQU H'0000'<br />
;----- PIE2 Bits<br />
----------------------------------------------------------<br />
EEIE EQU H'0004'<br />
BCLIE EQU H'0003'<br />
LVDIE EQU H'0002'<br />
TMR3IE EQU H'0001'<br />
CCP2IE EQU H'0000'<br />
;----- IPR1 Bits<br />
----------------------------------------------------------<br />
PSPIP EQU H'0007'<br />
ADIP EQU H'0006'<br />
RCIP EQU H'0005'<br />
TXIP EQU H'0004'<br />
SSPIP EQU H'0003'<br />
CCP1IP EQU H'0002'<br />
TMR2IP EQU H'0001'<br />
TMR1IP EQU H'0000'<br />
;----- PIR1 Bits<br />
----------------------------------------------------------<br />
PSPIF EQU H'0007'<br />
ADIF EQU H'0006'<br />
RCIF EQU H'0005'<br />
TXIF EQU H'0004'<br />
SSPIF EQU H'0003'<br />
CCP1IF EQU H'0002'<br />
TMR2IF EQU H'0001'<br />
TMR1IF EQU H'0000'<br />
;----- PIE1 Bits<br />
----------------------------------------------------------<br />
PSPIE EQU H'0007'<br />
ADIE EQU H'0006'<br />
RCIE EQU H'0005'<br />
TXIE EQU H'0004'<br />
SSPIE EQU H'0003'<br />
CCP1IE EQU H'0002'<br />
TMR2IE EQU H'0001'<br />
TMR1IE EQU H'0000'<br />
;----- TRISE Bits<br />
---------------------------------------------------------<br />
IBF EQU H'0007'<br />
OBF EQU H'0006'<br />
IBOV EQU H'0005'<br />
PSPMODE EQU H'0004'<br />
TRISE2 EQU H'0002'<br />
Side 11
P18F452.txt<br />
TRISE1 EQU H'0001'<br />
TRISE0 EQU H'0000'<br />
;----- EECON1 Bits<br />
---------------------------------------------------------<br />
EEPGD EQU H'0007'<br />
CFGS EQU H'0006'<br />
FREE EQU H'0004'<br />
WRERR EQU H'0003'<br />
WREN EQU H'0002'<br />
WR EQU H'0001'<br />
RD EQU H'0000'<br />
;=================================================================<br />
=========<br />
;<br />
; I/O Pin Name Definitions<br />
;<br />
;=================================================================<br />
=========<br />
;----- PORTA<br />
------------------------------------------------------------------<br />
RA0 EQU 0<br />
AN0 EQU 0<br />
RA1 EQU 1<br />
AN1 EQU 1<br />
RA2 EQU 2<br />
AN2 EQU 2<br />
VREFM EQU 2<br />
RA3 EQU 3<br />
AN3 EQU 3<br />
VREFP EQU 3<br />
RA4 EQU 4<br />
T0CKI EQU 4<br />
RA5 EQU 5<br />
AN4 EQU 5<br />
SS EQU 5<br />
LVDIN EQU 5<br />
RA6 EQU 6<br />
OSC2 EQU 6<br />
CLKO EQU 6<br />
;----- PORTB<br />
------------------------------------------------------------------<br />
RB0 EQU 0<br />
INT0 EQU 0<br />
RB1 EQU 1<br />
INT1 EQU 1<br />
RB2 EQU 2<br />
INT2 EQU 2<br />
Side 12
RB3 EQU 3<br />
CCP2A EQU 3<br />
RB4 EQU 4<br />
RB5 EQU 5<br />
RB6 EQU 6<br />
RB7 EQU 7<br />
P18F452.txt<br />
;----- PORTC<br />
------------------------------------------------------------------<br />
RC0 EQU 0<br />
T1OSO EQU 0<br />
T1CKI EQU 0<br />
RC1 EQU 1<br />
T1OSI EQU 1<br />
CCP2 EQU 1<br />
RC2 EQU 2<br />
CCP1 EQU 2<br />
RC3 EQU 3<br />
SCK EQU 3<br />
SCL EQU 3<br />
RC4 EQU 4<br />
SDI EQU 4<br />
SDA EQU 4<br />
RC5 EQU 5<br />
SDO EQU 5<br />
RC6 EQU 6<br />
TX EQU 6<br />
CK EQU 6<br />
RC7 EQU 7<br />
RX EQU 7<br />
;****DT EQU 7 ;*** Not Available due to<br />
conflict with<br />
;*** Define Table (DT)<br />
directive<br />
;----- PORTD<br />
------------------------------------------------------------------<br />
RD0 EQU 0<br />
PSP0 EQU 0<br />
RD1 EQU 1<br />
PSP1 EQU 1<br />
RD2 EQU 2<br />
PSP2 EQU 2<br />
RD3 EQU 3<br />
PSP3 EQU 3<br />
RD4 EQU 4<br />
PSP4 EQU 4<br />
RD5 EQU 5<br />
PSP5 EQU 5<br />
RD6 EQU 6<br />
PSP6 EQU 6<br />
Side 13
RD7 EQU 7<br />
PSP7 EQU 7<br />
P18F452.txt<br />
;----- PORTE<br />
------------------------------------------------------------------<br />
RE0 EQU 0<br />
RD EQU 0<br />
AN5 EQU 0<br />
RE1 EQU 1<br />
WR EQU 1<br />
AN6 EQU 1<br />
RE2 EQU 2<br />
CS EQU 2<br />
AN7 EQU 2<br />
;=================================================================<br />
=========<br />
;<br />
; RAM Definition<br />
;<br />
;=================================================================<br />
=========<br />
__MAXRAM H'FFF'<br />
__BADRAM H'600'-H'F7F'<br />
__BADRAM H'F85'-H'F88'<br />
__BADRAM H'F8E'-H'F91'<br />
__BADRAM H'F97'-H'F9C'<br />
__BADRAM H'FA3'-H'FA5'<br />
__BADRAM H'FAA'<br />
__BADRAM H'FB4'-H'FB9'<br />
;=================================================================<br />
=========<br />
;<br />
;<br />
;<br />
Configuration Bits<br />
; Data Sheet Include File Address<br />
; CONFIG1L = Configuration Byte 1L 300000h<br />
; CONFIG1H = Configuration Byte 1H 300001h<br />
; CONFIG2L = Configuration Byte 2L 300002h<br />
; CONFIG2H = Configuration Byte 2H 300003h<br />
; CONFIG3L = Configuration Byte 3L 300004h<br />
; CONFIG3H = Configuration Byte 3H 300005h<br />
; CONFIG4L = Configuration Byte 4L 300006h<br />
; CONFIG4H = Configuration Byte 4H 300007h<br />
; CONFIG5L = Configuration Byte 5L 300008h<br />
; CONFIG5H = Configuration Byte 5H 300009h<br />
; CONFIG6L = Configuration Byte 6L 30000ah<br />
; CONFIG6H = Configuration Byte 6H 30000bh<br />
; CONFIG7L = Configuration Byte 7L<br />
Side 14<br />
30000ch
P18F452.txt<br />
; CONFIG7H = Configuration Byte 7H 30000dh<br />
;<br />
;=================================================================<br />
=========<br />
;Configuration Byte 1H Options<br />
_OSCS_ON_1H EQU H'DF' ; Oscillator Switch enable<br />
_OSCS_OFF_1H EQU H'FF'<br />
_LP_OSC_1H EQU H'F8' ; Oscillator type<br />
_XT_OSC_1H EQU H'F9'<br />
_HS_OSC_1H EQU H'FA'<br />
_RC_OSC_1H EQU H'FB'<br />
_EC_OSC_1H EQU H'FC' ; External Clock w/OSC2 output<br />
divide by 4<br />
_ECIO_OSC_1H EQU H'FD' ; w/OSC2 as an IO pin (RA6)<br />
_HSPLL_OSC_1H EQU H'FE' ; HS PLL<br />
_RCIO_OSC_1H EQU H'FF' ; RC w/OSC2 as an IO pin (RA6)<br />
;Configuration Byte 2L Options<br />
_BOR_ON_2L EQU H'FF' ; Brown-Out Reset enable<br />
_BOR_OFF_2L EQU H'FD'<br />
_PWRT_OFF_2L EQU H'FF' ; Power-Up Timer enable<br />
_PWRT_ON_2L EQU H'FE'<br />
_BORV_20_2L EQU H'FF' ; BOR Voltage - 2.0v<br />
_BORV_27_2L EQU H'FB' ; 2.7v<br />
_BORV_42_2L EQU H'F7' ; 4.2v<br />
_BORV_45_2L EQU H'F3' ; 4.5v<br />
;Configuration Byte 2H Options<br />
_WDT_ON_2H EQU H'FF' ; Watch Dog Timer enable<br />
_WDT_OFF_2H EQU H'FE'<br />
_WDTPS_128_2H EQU H'FF' ; Watch Dog Timer PostScaler count<br />
_WDTPS_64_2H EQU H'FD'<br />
_WDTPS_32_2H EQU H'FB'<br />
_WDTPS_16_2H EQU H'F9'<br />
_WDTPS_8_2H EQU H'F7'<br />
_WDTPS_4_2H EQU H'F5'<br />
_WDTPS_2_2H EQU H'F3'<br />
_WDTPS_1_2H EQU H'F1'<br />
;Configuration Byte 3H Options<br />
_CCP2MX_ON_3H EQU H'FF' ; CCP2 pin Mux enable<br />
_CCP2MX_OFF_3H EQU H'FE'<br />
;Configuration Byte 4L Options<br />
_STVR_ON_4L<br />
enable<br />
EQU H'FF' ; Stack over/underflow Reset<br />
_STVR_OFF_4L EQU H'FE'<br />
_LVP_ON_4L EQU H'FF' ; Low-voltage ICSP enable<br />
_LVP_OFF_4L EQU H'FB'<br />
_DEBUG_ON_4L EQU H'7F' ; Backgound Debugger enable<br />
_DEBUG_OFF_4L EQU H'FF'<br />
Side 15
P18F452.txt<br />
;Configuration Byte 5L Options<br />
_CP0_ON_5L EQU H'FE' ; Code protect user block enable<br />
_CP0_OFF_5L EQU H'FF'<br />
_CP1_ON_5L EQU H'FD'<br />
_CP1_OFF_5L EQU H'FF'<br />
_CP2_ON_5L EQU H'FB'<br />
_CP2_OFF_5L EQU H'FF'<br />
_CP3_ON_5L EQU H'F7'<br />
_CP3_OFF_5L EQU H'FF'<br />
;Configuration Byte 5H Options<br />
_CPB_ON_5H EQU H'BF' ; Code protect boot block enable<br />
_CPB_OFF_5H EQU H'FF'<br />
_CPD_ON_5H EQU H'7F' ; Code protect Data EE enable<br />
_CPD_OFF_5H EQU H'FF'<br />
;Configuration Byte 6L Options<br />
_WRT0_ON_6L EQU H'FE' ; Write protect user block enable<br />
_WRT0_OFF_6L EQU H'FF'<br />
_WRT1_ON_6L EQU H'FD'<br />
_WRT1_OFF_6L EQU H'FF'<br />
_WRT2_ON_6L EQU H'FB'<br />
_WRT2_OFF_6L EQU H'FF'<br />
_WRT3_ON_6L EQU H'F7'<br />
_WRT3_OFF_6L EQU H'FF'<br />
;Configuration Byte 6H Options<br />
_WRTC_ON_6H EQU H'DF' ; Write protect CONFIG regs<br />
enable<br />
_WRTC_OFF_6H EQU H'FF'<br />
_WRTB_ON_6H EQU H'BF' ; Write protect boot block enable<br />
_WRTB_OFF_6H EQU H'FF'<br />
_WRTD_ON_6H EQU H'7F' ; Write protect Data EE enable<br />
_WRTD_OFF_6H EQU H'FF'<br />
;Configuration Byte 7L Options<br />
_EBTR0_ON_7L EQU H'FE' ; Table Read protect user block<br />
enable<br />
_EBTR0_OFF_7L EQU H'FF'<br />
_EBTR1_ON_7L EQU H'FD'<br />
_EBTR1_OFF_7L EQU H'FF'<br />
_EBTR2_ON_7L EQU H'FB'<br />
_EBTR2_OFF_7L EQU H'FF'<br />
_EBTR3_ON_7L EQU H'F7'<br />
_EBTR3_OFF_7L EQU H'FF'<br />
;Configuration Byte 7H Options<br />
_EBTRB_ON_7H EQU H'BF' ; Table Read protect boot block<br />
enable<br />
_EBTRB_OFF_7H EQU H'FF'<br />
Side 16
P18F452.txt<br />
; To use the Configuration Bits, place the following lines in your<br />
source code<br />
; in the following format, and change the configuration value to<br />
the desired<br />
; setting (such as CP_OFF to CP_ON). These are currently<br />
commented out here<br />
; and each __CONFIG line should have the preceding semicolon<br />
removed when<br />
; pasted into your source code.<br />
; The following is a assignment of address values for all of the<br />
configuration<br />
; registers for the purpose of table reads<br />
_CONFIG1L EQU H'300000'<br />
_CONFIG1H EQU H'300001'<br />
_CONFIG2L EQU H'300002'<br />
_CONFIG2H EQU H'300003'<br />
_CONFIG3L EQU H'300004'<br />
_CONFIG3H EQU H'300005'<br />
_CONFIG4L EQU H'300006'<br />
_CONFIG4H EQU H'300007'<br />
_CONFIG5L EQU H'300008'<br />
_CONFIG5H EQU H'300009'<br />
_CONFIG6L EQU H'30000A'<br />
_CONFIG6H EQU H'30000B'<br />
_CONFIG7L EQU H'30000C'<br />
_CONFIG7H EQU H'30000D'<br />
_DEVID1 EQU H'3FFFFE'<br />
_DEVID2 EQU H'3FFFFF'<br />
_IDLOC0 EQU H'200000'<br />
_IDLOC1 EQU H'200001'<br />
_IDLOC2 EQU H'200002'<br />
_IDLOC3 EQU H'200003'<br />
_IDLOC4 EQU H'200004'<br />
_IDLOC5 EQU H'200005'<br />
_IDLOC6 EQU H'200006'<br />
_IDLOC7 EQU H'200007'<br />
;Program Configuration Register 1H<br />
; __CONFIG _CONFIG1H, _OSCS_OFF_1H & _RCIO_OSC_1H<br />
;Program Configuration Register 2L<br />
; __CONFIG _CONFIG2L, _BOR_ON_2L & _BORV_20_2L &<br />
_PWRT_OFF_2L<br />
;Program Configuration Register 2H<br />
; __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H<br />
;Program Configuration Register 3H<br />
; __CONFIG _CONFIG3H, _CCP2MX_ON_3H<br />
;Program Configuration Register 4L<br />
Side 17
P18F452.txt<br />
; __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L &<br />
_DEBUG_OFF_4L<br />
;Program Configuration Register 5L<br />
; __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L &<br />
_CP2_OFF_5L & _CP3_OFF_5L<br />
;Program Configuration Register 5H<br />
; __CONFIG _CONFIG5H, _CPB_ON_5H & _CPD_OFF_5H<br />
;Program Configuration Register 6L<br />
; __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L<br />
& _WRT2_OFF_6L & _WRT3_OFF_6L<br />
;Program Configuration Register 6H<br />
; __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H<br />
& _WRTD_OFF_6H<br />
;Program Configuration Register 7L<br />
; __CONFIG _CONFIG7L, _EBTR0_OFF_7L &<br />
_EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L<br />
;Program Configuration Register 7H<br />
; __CONFIG _CONFIG7H, _EBTRB_OFF_7H<br />
;ID Locations Register 0<br />
; __IDLOCS _IDLOC0, <br />
;ID Locations Register 1<br />
; __IDLOCS _IDLOC1, <br />
;ID Locations Register 2<br />
; __IDLOCS _IDLOC2, <br />
;ID Locations Register 3<br />
; __IDLOCS _IDLOC3, <br />
;ID Locations Register 4<br />
; __IDLOCS _IDLOC4, <br />
;ID Locations Register 5<br />
; __IDLOCS _IDLOC5, <br />
;ID Locations Register 6<br />
; __IDLOCS _IDLOC6, <br />
;ID Locations Register 7<br />
; __IDLOCS _IDLOC7, <br />
;Device ID registers hold device ID and revision number and can<br />
only be read<br />
;Device ID Register 1<br />
Side 18
P18F452.txt<br />
; DEV2, DEV1, DEV0, REV4, REV3, REV2, REV1, REV0<br />
;Device ID Register 2<br />
; DEV10, DEV9, DEV8, DEV7, DEV6, DEV5, DEV4, DEV3<br />
LIST<br />
Side 19
String value Real value<br />
HOUR 0,0<br />
MIN 0,0<br />
[mA] Equation Min (d) Max (d) Min (Value) Max (value)<br />
IMAG 0,0
Part list <strong>–</strong> nCube Power PCB (all the DC/DC converters)<br />
DC/DC for 3.3V out-put<br />
Name/ component Number Order code<br />
FARNELL<br />
Number at home<br />
TPS62203 3(15) 5 (+5 on PCB)<br />
10uH Inductor 3(15) 870-110 3 (+5 on PCB)<br />
4,7 uF Capacitor 3(15) 197-269 8 (+5 on PCB)<br />
10 uF Capacitor 3(15) 498-660 23 (+5 on PCB)<br />
0,1 mF cer 3(15) 335-1993 28<br />
DC/DC for 6.5/5.5V out-put<br />
Name/ component Number Order code<br />
FARNELL<br />
Number at home<br />
MAX1896 2(10) 7 (+4 on PCB)<br />
10uH Inductor 2(10) 870-110 0 (+4 on PCB)<br />
Diode 0,5A 2(10) 708-136 7 (4 on PCB)<br />
IRF7204 MOSFET 2(10) 357-2535 10 (2 on PCB)<br />
0,1 mF cer 2(10) 335-1993 0<br />
10 uF Capacitor 2(10) 498-660 0 (+4 on PCB)<br />
22 uF Capacitor 2(10) 197-294 13 (+4 on PCB)<br />
33 nF Capacitor 2(10) 301-9822 13 (+4 on PCB)<br />
30 kOhm R 2(10) 321-8238 40++<br />
100 kOhm R 1(5) 912-098 32<br />
130 kOhm R 1(5) 321-8314 40++<br />
DC/DC for 4.2V out-put<br />
Name/ component Number Order code<br />
FARNELL<br />
Number at home<br />
MAX1524 1(5) 13 (+3 on PCB)<br />
MOSFET N-type 2(10) 354-4965 19 (+4 on PCB)<br />
Diode 1A 2(10) 708-150 25 (+2 on PCB)<br />
33uH Inductor 2(10) 870-122 9 (+4 on PCB)<br />
10 uF Capacitor 1(5) 498-660 0 (+3 on PCB)<br />
33 uF Capacitor 1(5) 356-0326 4 (+3 on PCB)<br />
0,1 mF cer 2(10) 335-1993 0<br />
100 pF Capacitor 1(5) 499-122 19<br />
36 kOhm R 1(5) 321-8247 50<br />
82 kOhm R 1(5) 912-086 50<br />
Zener 2.2V 1(5) 354-6810 10<br />
Zener 2.0V 1(5) 354-6809 10
MAX1672 Buck boost converter<br />
- 1.8V to 11V input<br />
- Maximum output current 300mA<br />
- Number of pin: 16<br />
- External components: 9<br />
- Idle 3.7V/126µA & 2.0V/260µA<br />
V in [V] I in [mA] V out [V] I out [mA] Efficiency<br />
2,50 25,74 5,00 10,00 0,7770<br />
2,50 64,4 5,00 25,18 0,7820<br />
2,50 127,9 5,00 50,00 0,7819<br />
2,50 262 4,99 102,5 0,7809<br />
2,50 386,7 4,95 150,5 0,7706<br />
2,50 538 4,94 204,1 0,7496<br />
2,50 594 2,89 315 0,6130<br />
3,70 16,36 5,00 10,00 0,8260<br />
3,70 41,00 5,00 25,00 0,8240<br />
3,70 82,3 5,00 50,4 0,8276<br />
3,70 163,3 5,00 99,7 0,8250<br />
3,70 254,4 5,00 154,7 0,8218<br />
3,70 343,6 4,97 208,8 0,8163<br />
3,70 530 4,91 313 0,7837<br />
4,50 13,11 5,01 10,03 0,8518<br />
4,50 32,86 5,01 25,14 0,8518<br />
4,50 65 5,02 49,7 0,8530<br />
4,50 130,3 5,02 99,1 0,8484<br />
4,50 195,4 5,03 147,5 0,8438<br />
4,50 263,2 5,03 197,5 0,8388<br />
4,50 443 4,97 327,2 0,8157<br />
5,00 11,69 5,02 10 0,8589<br />
5,00 29,2 5,02 25,06 0,8617<br />
5,00 59,6 5,03 51 0,8608<br />
5,00 116 5,03 99,2 0,8603<br />
5,00 179,8 5,04 152,4 0,8544<br />
5,00 243,2 5,04 204,8 0,8488<br />
5,00 393 5,01 325 0,8286<br />
Table 1: Efficiency research MAX1672<br />
Conclusion:<br />
(-) Low efficiency<br />
(-) Low output current range<br />
(-) High input voltage<br />
(-) Large number of pins<br />
(-) Large number of external components<br />
(+) Relatively stable around 82% efficiency
MAX710 Buck boost converter<br />
- 1.8V to 11V input<br />
- Maximum output current 500mA<br />
- Number of pin: 16<br />
- External components: 6<br />
- Idle: 2.5V/220µA & 3.7V/156 µA<br />
V in [V] I in [mA] V out [V] I out [mA] Efficiency<br />
2,48 23,8 4,98 10,00 0,8437<br />
2,50 59,1 4,98 25,02 0,8440<br />
2,51 117,7 4,98 50,10 0,8459<br />
2,50 246,2 4,97 100,2 0,8097<br />
2,50 388,4 4,96 150,6 0,7693<br />
2,49 560 4,95 204,1 0,7234<br />
2,50 1183 4,04 303,6 0,4142<br />
3,70 15,74 4,96 10,08 0,8590<br />
3,70 39,07 4,97 25,16 0,8645<br />
3,70 77,6 4,97 50,0 0,8655<br />
3,70 155,9 4,98 100,2 0,8651<br />
3,70 239,7 4,97 152,1 0,8523<br />
3,71 333,7 4,96 207,7 0,8321<br />
3,70 574 4,93 315 0,7312<br />
4,50 12,78 4,98 10 0,8659<br />
4,50 31,98 4,98 25,18 0,8714<br />
4,50 63,6 4,97 50,1 0,8700<br />
4,50 127,8 4,97 100,4 0,8677<br />
4,50 193 4,96 151,1 0,8629<br />
4,51 257 4,96 196,5 0,8409<br />
4,50 441 4,94 318,8 0,7936<br />
5,00 11,43 5,04 10,01 0,8828<br />
5,00 28,66 5,04 25,19 0,8860<br />
5,00 75,5 5,01 49,1 0,6516<br />
5,00 152,1 5,00 101,8 0,6693<br />
5,00 216,2 4,98 150,6 0,6938<br />
5,00 297,3 4,97 208,5 0,6971<br />
5,00 435 4,93 318,9 0,7228<br />
Table 2: Efficiency research MAX710<br />
Conclusion:<br />
(-) Low efficiency<br />
(-) Low output current range<br />
(-) High input voltage<br />
(-) Large number of pins<br />
(-) Relatively unstable around 85% efficiency
(+) Small number of external components<br />
MAX1674 Step up converter<br />
- 0.7V to 5.5V input<br />
- Maximum output current 300mA<br />
- Number of pin: 8<br />
- External components: 4<br />
- Idle: 3.7V/35 µA & 2.5V/52 µA<br />
V inn [V] I in [mA] V out [V] I out [mA] Efficiency<br />
1,50 39,5 4,99 10,00 0,8422<br />
1,50 97,4 4,98 25,06 0,8542<br />
1,50 199,3 4,96 50,50 0,8379<br />
1,50 521 4,95 102,8 0,6511<br />
1,50 820 4,84 153,1 0,6024<br />
2,50 22,6 5,00 10,0 0,8850<br />
2,50 56,2 4,99 24,99 0,8875<br />
2,50 110,6 4,99 49,4 0,8915<br />
2,50 224,6 4,98 98,3 0,8718<br />
2,50 379,8 4,98 155,1 0,8135<br />
2,50 556 4,95 218,4 0,7778<br />
2,50 830 4,85 319,0 0,7456<br />
3,7 15,2 5,01 10 0,8908<br />
3,7 38,05 5,01 25,1 0,8932<br />
3,7 75,2 5,02 49,8 0,8985<br />
3,7 148,1 5,01 99 0,9051<br />
3,7 233,8 5,01 155,4 0,9000<br />
3,7 349 5,02 221,4 0,8607<br />
3,7 540 4,99 340 0,8491<br />
Table 3: Efficiency research MAX1674<br />
Conclusion:<br />
(=) Ok efficiency (best in or test)<br />
(- ) Low output current range<br />
(=) Ok number of pins<br />
(+) Low input voltage<br />
(+) Small number of external components<br />
The MAX 1674 Step up converter is the best converter we tested when looking on efficiency.<br />
But because of its limited output current it could only be used on the high voltage/ low current<br />
subsystems.
MAX1703 Buck boost converter<br />
- 0.7V to 5.5V input<br />
- Maximum output current 1500mA<br />
- Number of pin: 16<br />
- External components: 7<br />
- Idle:<br />
V in [V] I in [mA] V out [V] I out [mA] Efficiency<br />
1,5 50 4,99 10 0,6653<br />
1,5 102,7 5 25 0,8114<br />
1,5 280 4,99 50,4 0,5988<br />
1,5 503 4,98 100,1 0,6607<br />
2,50 30 5 10,00 0,6667<br />
2,50 61 5,01 25,18 0,8272<br />
2,50 131 5,01 50,00 0,7649<br />
2,50 257 5,02 101,5 0,7930<br />
2,50 576 5,03 200,5 0,7004<br />
2,50 1198 4,95 303,0 0,5008<br />
2,50 1407 4,25 404 0,4881<br />
Table 4: Efficiency research MAX1703<br />
Conclusion:<br />
(?) Efficiency unknown (up to 95% maxim)<br />
(+) High output current range<br />
(- ) Large number of pins<br />
(+) Low input voltage<br />
(=) Ok number of external components<br />
The max 1703 DC/DC converter is the only DC/DC converter that is suitable between the<br />
solar cells and the charger. This is also the converter that we were recommended to use by<br />
Maxim. During our research we have made 4 different layouts, but none of them have worked<br />
properly. The data in the table above is the only one we have; the converter malfunctioned<br />
after a while. In the problems chapter we will discuss this hi-current step up problem.
TPS62203 Step down converter (3.3V fixed output)<br />
- 0.7V to 6V input<br />
- Maximum output current 300mA<br />
- Number of pin: 5<br />
- External components: 3<br />
- Idle: 3.5V/19 & 5.0V/19mA<br />
V in [V] I in [mA] V out [V] I out [mA] Efficiency<br />
6 6,28 3,324 10 0,882<br />
6 16 3,318 25 0,864<br />
6 31,5 3,300 50 0,873<br />
6 63 3,314 100,3 0,879<br />
6 79 3,284 125 0,866<br />
Break 150<br />
5 7,34 3,325 10 0,906<br />
5 18,37 3,334 25 0,907<br />
5 36,06 3,320 50 0,921<br />
5 71,3 3,265 100 0,916<br />
5 86,2 3,230 125 0,937<br />
5 110,3 3,295 150 0,896<br />
5 127,5 2,732 200 0,857<br />
Break 225<br />
4 8,9 3,326 10 0,934<br />
4 22,01 3,321 25 0,943<br />
4 43,9 3,320 50,2 0,949<br />
4 85,9 3,240 100 0,943<br />
4 106,9 3,201 125,5 0,939<br />
Break 150<br />
3,5 9,91 3,324 10 0,958<br />
3,5 24,49 3,325 25 0,970<br />
3,5 48,1 3,284 49,6 0,968<br />
3,5 97,6 3,290 100,1 0,964<br />
3,5 121,7 3,299 123,9 0,960<br />
3,5 148,7 3,306 150,5 0,956<br />
3,5 200,3 3,332 200 0,951<br />
3,5 250 3,285 249,8 0,938<br />
3,5 301,8 3,236 301,7 0,924<br />
Table 5: Efficiency research TSP62203<br />
Conclusion:<br />
(+) High efficiency<br />
(- ) Low output current range<br />
(+) Low number of pins<br />
(+) Low input voltage<br />
(+) Small number of external components<br />
The TSP62203 step down converter is a good DC/DC converter; it could probably be used on<br />
all subsystems that require 3.3V.
DLP 485368*<br />
The Danionics Lithium-Ion Polymer Battery offers<br />
through a combination of high energy and power<br />
density, a polymer electrolyte and soft packaging<br />
concept distinct advantages to Original Equipment<br />
Manufacturers in the portable electronics industry.<br />
SPECIFICATIONS<br />
Name: DLP 485388<br />
Weight: 33 g +/- 2 g<br />
Capacity: 1,500 mAh<br />
Nominal voltage: 3.0 - 4.2 V<br />
Dimensions:<br />
Thickness: 4.8 mm<br />
Width: 53 mm<br />
Length: 88 mm<br />
Note: "*" after the DLP number indicates that this<br />
cell is based on Danionics' G3 technology.<br />
FEATURES<br />
The Danionics Lithium-Ion Polymer Technology<br />
offers a high degree of design freedom. The<br />
batteries from Danionics also feature:<br />
High energy density<br />
Good cycling characteristics (min. 500<br />
cycles)<br />
Wide functional area (-20 o C to 60 o C)<br />
High current charging characteristics<br />
Low self discharge<br />
Attractive flat prismatic form factor<br />
Low impedance<br />
Good storage performance<br />
High safety - also when the battery is used wrongly<br />
DLP 485368* - DISCHARGE CHARACTERISTICS<br />
DLP 485368* - CHARGE CHARACTERISTICS<br />
DLP 485368* - CYCLING CHARACTERISTICS<br />
DLP 485368* - TEMPERATURE<br />
CHARACTERISTICS
MICRONECTOR 200<br />
HIGH PACKAGING DENSITY CONNECTORS<br />
MALE STRAIGHT p.c. TERMINATION TYPE T X & Y BS STYLE<br />
B5743<br />
MALE 90° p.c. TERMINATION TYPE L BS STYLE B5743<br />
OUTLINE DIMENSIONS MALE CONNECTORS<br />
MOUNTING DETAILS FOR MALE CONNECTORS TERMINATION TYPE L<br />
FOR MALE AND FEMALE CONNECTORS TERMINATION STYLE T, X, Y &<br />
N - OMIT 1.111/1.0mm HOLES
ALTERNATIVE BOARD MOUNTING FOR JACKSCREWS MP6820 &<br />
MP6821
MICRONECTOR 200<br />
HIGH PACKAGING DENSITY CONNECTORS<br />
FEMALE STRAIGHT p.c. TERMINATION TYPE T & N BS STYLE B5741<br />
OUTLINE DIMENSIONS<br />
FEMALE CRIMP TERMINATION TYPE C & D BS STYLE B5740<br />
Preferred wire type BS G 210 (Type A)<br />
*Also suitable for use with 24 A.W.G. DEF-STAN<br />
61-12 (Part 6 Type 1) PVC<br />
NOTE: Whilst a crimp contact withdrawal tool<br />
(MP6808) is available as an optional accessory,<br />
it is only suitable for removal of ALL contacts<br />
when the moulding MUST be replaced prior to<br />
reinsertion of the contacts.<br />
MINIMUM SPACING END TO<br />
END DIMENSIONS<br />
SPACING - BOARD TO BOARD<br />
MATED CONNECTORS OUTLINE
PC74HC153D
4081
4070
Mikroprocessorkristall, HC49<br />
Fabr C-MAC<br />
Kvartskristall i hermetiskt tillsluten HC49-kåpa. Kristallerna är avsedda för<br />
parallellresonans eller för serieresonans i de fall då ordet serie står i kolumnen<br />
för lastkapacitans. Kristallerna är AT-slipade för att erhålla bästa möjliga<br />
prestanda.<br />
Max drivnivå: 1 mW<br />
Max serieresistans<br />
1,0 MHz: 2 kΩ<br />
1,84320<strong>–</strong>2,45760: 300 Ω<br />
3,27680<strong>–</strong>3,68640: 150 Ω<br />
4,0<strong>–</strong>6,55360: 100 Ω<br />
7,37280<strong>–</strong>9,83040: 50 Ω<br />
10,0<strong>–</strong>24,0: 35 Ω<br />
Temperaturområde för<br />
frekvensstabilitet<br />
≥100 ppm: 0 till +50 °C<br />
30 och 50 ppm: −10 till +60 °C<br />
10 ppm: −20 till +70 °C<br />
Max åldring: 2 ppm första året,<br />
sedan 1 ppm/år
**** 06/19/03 16:42:49 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: buckconv<br />
**** SORTED DEVIATIONS OF V(VOUT) TEMPERATURE = 27.000 DEG C<br />
MONTE CARLO SUMMARY<br />
******************************************************************************<br />
RUN MAXIMUM VALUE<br />
Pass 11 3.582 at T = 532.8600E-06<br />
( 102.9 % of Nominal)<br />
Pass 4 3.5727 at T = 719.8600E-06<br />
( 102.63% of Nominal)<br />
Pass 14 3.5479 at T = 733.8600E-06<br />
( 101.92% of Nominal)<br />
Pass 16 3.5467 at T = 517.8600E-06<br />
( 101.88% of Nominal)<br />
Pass 13 3.5426 at T = 655.8600E-06<br />
( 101.77% of Nominal)<br />
Pass 20 3.5382 at T = 696.8600E-06<br />
( 101.64% of Nominal)<br />
Pass 3 3.533 at T = 650.8600E-06<br />
( 101.49% of Nominal)<br />
Pass 9 3.5264 at T = 529.8600E-06<br />
( 101.3 % of Nominal)<br />
Pass 19 3.5255 at T = 615.8600E-06<br />
( 101.27% of Nominal)<br />
Pass 10 3.5229 at T = 661.8600E-06<br />
( 101.2 % of Nominal)<br />
Pass 15 3.4889 at T = 605.8600E-06<br />
( 100.22% of Nominal)
Pass 7 3.482 at T = 557.8600E-06<br />
( 100.02% of Nominal)<br />
NOMINAL 3.4812 at T = 555.8600E-06<br />
Pass 18 3.4782 at T = 538.8600E-06<br />
( 99.914% of Nominal)<br />
Pass 17 3.4755 at T = 651.8600E-06<br />
( 99.837% of Nominal)<br />
Pass 5 3.4654 at T = 547.8600E-06<br />
( 99.548% of Nominal)<br />
Pass 2 3.4566 at T = 624.8600E-06<br />
( 99.294% of Nominal)<br />
Pass 12 3.4553 at T = 642.8600E-06<br />
( 99.258% of Nominal)<br />
Pass 6 3.4093 at T = 551.8600E-06<br />
( 97.936% of Nominal)<br />
Pass 8 3.4065 at T = 544.8600E-06<br />
( 97.855% of Nominal)
**** 06/19/03 17:02:35 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: buckconv<br />
**** SORTED DEVIATIONS OF V(VOUT) TEMPERATURE = 27.000 DEG C<br />
SENSITIVITY SUMMARY<br />
******************************************************************************<br />
RUN MAXIMUM VALUE<br />
C_C2 C_C2 C 3.545 at T = 545.8600E-06<br />
( 18.341% change per 1% change in Model Parameter)<br />
R_Radd R_Radd R 3.5295 at T = 506.8600E-06<br />
( 13.881% change per 1% change in Model Parameter)<br />
L_L L_L L 3.5275 at T = 800.0000E-06<br />
( 13.295% change per 1% change in Model Parameter)<br />
C_C1 C_C1 C 3.5182 at T = 651.8600E-06<br />
( 10.633% change per 1% change in Model Parameter)<br />
NOMINAL 3.4812 at T = 555.8600E-06<br />
**** 06/19/03 17:02:35 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: buckconv<br />
**** WORST CASE ANALYSIS TEMPERATURE = 27.000 DEG C<br />
WORST CASE ALL DEVICES<br />
******************************************************************************<br />
**** 06/19/03 17:02:35 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: buckconv
**** UPDATED MODEL PARAMETERS TEMPERATURE = 27.000 DEG C<br />
WORST CASE ALL DEVICES<br />
******************************************************************************<br />
DEVICE MODEL PARAMETER NEW VALUE<br />
C_C1 C_C1 C 1.1 (Increased)<br />
C_C2 C_C2 C 1.1 (Increased)<br />
L_L L_L L 1.1 (Increased)<br />
R_Radd R_Radd R 1.1 (Increased)<br />
**** 06/19/03 17:02:35 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: buckconv<br />
**** INITIAL TRANSIENT SOLUTION TEMPERATURE = 27.000 DEG C<br />
WORST CASE ALL DEVICES<br />
******************************************************************************<br />
NODE VOLTAGE NODE VOLTAGE NODE VOLTAGE NODE VOLTAGE<br />
( VOUT) 8.400E-12 (N00025) 4.2000 (N00037) 4.2000 (N00047) 50.40E-12<br />
(N00131) .8200 (N00138) 1.0000 (PWM_SAW1_N00011) .8200<br />
(PWM_SAW1_N000260) 0.0000<br />
VOLTAGE SOURCE CURRENTS<br />
NAME CURRENT<br />
V_Vd -4.204E-06<br />
V_Vcontrol 0.000E+00<br />
V_PWM_SAW1_V1 0.000E+00<br />
TOTAL POWER DISSIPATION 1.77E-05 WATTS
**** 06/19/03 17:02:35 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: buckconv<br />
**** SORTED DEVIATIONS OF V(VOUT) TEMPERATURE = 27.000 DEG C<br />
WORST CASE SUMMARY<br />
******************************************************************************<br />
RUN MAXIMUM VALUE<br />
ALL DEVICES 3.5337 at T = 501.8600E-06<br />
( 101.51% of Nominal)<br />
NOMINAL 3.4812 at T = 555.8600E-06<br />
JOB CONCLUDED<br />
TOTAL JOB TIME 15.97
**** 06/19/03 21:07:41 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: Boost<br />
**** SORTED DEVIATIONS OF V(VOUT) TEMPERATURE = 27.000 DEG C<br />
MONTE CARLO SUMMARY<br />
***************************************************************************<br />
***<br />
RUN MAXIMUM VALUE<br />
Pass 2 5.363 at T = 4.0006E-03<br />
( 102.2 % of Nominal)<br />
Pass 11 5.2496 at T = 4.0006E-03<br />
( 100.04% of Nominal)<br />
Pass 17 5.2488 at T = 4.0006E-03<br />
( 100.03% of Nominal)<br />
Pass 12 5.2487 at T = 4.0006E-03<br />
( 100.03% of Nominal)<br />
Pass 14 5.2484 at T = 4.0006E-03<br />
( 100.02% of Nominal)<br />
Pass 15 5.2481 at T = 4.0006E-03<br />
( 100.01% of Nominal)<br />
Pass 20 5.2475 at T = 4.0006E-03<br />
( 100 % of Nominal)<br />
NOMINAL 5.2474 at T = 4.0006E-03<br />
Pass 13 5.2471 at T = 4.0006E-03<br />
( 99.995% of Nominal)<br />
Pass 7 5.2471 at T = 4.0006E-03<br />
( 99.994% of Nominal)<br />
Pass 8 5.247 at T = 4.0006E-03<br />
( 99.992% of Nominal)
Pass 9 5.2464 at T = 4.0006E-03<br />
( 99.98 % of Nominal)<br />
Pass 4 5.2462 at T = 4.0006E-03<br />
( 99.978% of Nominal)<br />
Pass 5 5.2462 at T = 4.0006E-03<br />
( 99.976% of Nominal)<br />
Pass 10 5.2458 at T = 4.0006E-03<br />
( 99.968% of Nominal)<br />
Pass 18 5.2453 at T = 4.0006E-03<br />
( 99.959% of Nominal)<br />
Pass 6 5.245 at T = 4.0006E-03<br />
( 99.954% of Nominal)<br />
Pass 16 5.2449 at T = 4.0006E-03<br />
( 99.952% of Nominal)<br />
Pass 19 5.2443 at T = 4.0006E-03<br />
( 99.941% of Nominal)<br />
Pass 3 5.2443 at T = 4.0006E-03<br />
( 99.941% of Nominal)<br />
JOB CONCLUDED<br />
TOTAL JOB TIME 336.05
**** 06/19/03 21:12:28 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: Boost<br />
**** SORTED DEVIATIONS OF V(VOUT) TEMPERATURE = 27.000 DEG C<br />
SENSITIVITY SUMMARY<br />
***************************************************************************<br />
***<br />
RUN MAXIMUM VALUE<br />
R_R3 R_R3 R 5.2475 at T = 4.0006E-03<br />
( 5.8157E-03% change per 1% change in Model Parameter)<br />
NOMINAL 5.2474 at T = 4.0006E-03<br />
L_L1 L_L1 L 5.2474 at T = 4.0006E-03<br />
(-817.8400E-06% change per 1% change in Model Parameter)<br />
**** 06/19/03 21:12:28 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: Boost<br />
**** WORST CASE ANALYSIS TEMPERATURE = 27.000 DEG C<br />
WORST CASE ALL DEVICES<br />
***************************************************************************<br />
***<br />
**** 06/19/03 21:12:28 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: Boost<br />
**** UPDATED MODEL PARAMETERS TEMPERATURE = 27.000 DEG C<br />
WORST CASE ALL DEVICES
***************************************************************************<br />
***<br />
DEVICE MODEL PARAMETER NEW VALUE<br />
L_L1 L_L1 L .9 (Decreased)<br />
R_R3 R_R3 R 1.1 (Increased)<br />
**** 06/19/03 21:12:28 ********* PSpice 9.1 (Mar 1999) ******** ID# 0 ********<br />
** circuit file for profile: Boost<br />
**** SORTED DEVIATIONS OF V(VOUT) TEMPERATURE = 27.000 DEG C<br />
WORST CASE SUMMARY<br />
***************************************************************************<br />
***<br />
RUN MAXIMUM VALUE<br />
ALL DEVICES 5.5714 at T = 4.0006E-03<br />
( 106.17% of Nominal)<br />
NOMINAL 5.2474 at T = 4.0006E-03<br />
JOB CONCLUDED<br />
TOTAL JOB TIME 71.95