30.08.2013 Views

HIN – Diploma

HIN – Diploma

HIN – Diploma

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!