├── 00_Documentation ├── 00_Makers Guide.pdf ├── 01_HardwareGuides │ ├── Assembly Instructions.pdf │ ├── Garmin 18x GPS.pdf │ ├── Housing Example.pdf │ ├── NI MAX.pdf │ ├── PIC Microprocessor.pdf │ ├── Power Supplies Example.pdf │ └── Wiring Suggestions.pdf ├── 02_TestingGuides │ ├── Analog Discovery Integration .pdf │ ├── PMU Tester.pdf │ ├── Simulated Signal (Frequency Generator).pdf │ └── Simulated Single (CRIO).pdf └── 03_LabVIEW_VI_Documentation │ ├── 00 Main (single phase).pdf │ ├── 00 Main (three phase).pdf │ ├── 00 Main Simulated Signal (and Triple).pdf │ ├── 00 PMU Tester.pdf │ ├── 01 Waveform Simulation.pdf │ ├── 10 DAQ Config (PFI0).pdf │ ├── 11 DAQ Config (continuous).pdf │ ├── 14 Function Generator Signal.pdf │ ├── 15 Triple Phase Signal Generation.pdf │ ├── 20 Limit 180 Degrees.pdf │ ├── 21 Symmetrical Components .pdf │ ├── 22 Average Frequency.pdf │ ├── 23 Input Scaling .pdf │ ├── 24 Global Front Panel.pdf │ ├── 30 GPS Time Fetch.pdf │ ├── 31 GPS Interrupt RS232 Read.pdf │ ├── 32 GPS Time Code Parser.pdf │ ├── 33 GPS Time to Labview Time.pdf │ ├── 34 GPS Time from Config.pdf │ ├── 35 NEW GPS Interrupt RS232 Read.pdf │ ├── 36 GPS String Manipulation.pdf │ ├── 37 Time Converison.pdf │ ├── 38 Date Conversion.pdf │ ├── 39 GPS Array to String.pdf │ ├── 40 Config File Path.pdf │ ├── 41 Config File Write GPS Time.pdf │ ├── 42 Config File Read GPS Time.pdf │ ├── 43 Config File Get Input Scales.pdf │ ├── 44 Config File Read Telecoms.pdf │ ├── 50 NMEA Calc Checksum.pdf │ ├── Code Flow Chart.pdf │ └── _02 Triple Waveform Simulation.pdf ├── 01_SourceCode ├── 00_LabVIEW_64_Bit_Source │ ├── 00 Main (single phase) (x64-2018).vi │ ├── 00 Main (three phase) (x64-2018).vi │ ├── 00 Main Simulated Signal (x64-2018).vi │ ├── 00 Main Simulated Triple Signal (x64-2018).vi │ ├── 01 Waveform Simulation (x64-2018).vi │ ├── 02 Triple Waveform Simulation (x64-2018).vi │ ├── 10 DAQ Config (PFI0) (x64-2018).vi │ ├── 11 DAQ Config (continuous) (x64-2018).vi │ ├── 12 Simulated DAQmx Signal (x64-2018).vi │ ├── 14 Function Generator Signal (x64-2018).vi │ ├── 15 Triple Phase Signal Generation (x64-2018).vi │ ├── 20 Limit 180 Degrees (x64-2018).vi │ ├── 21 Symmetrical Components (x64-2018).vi │ ├── 22 Frequency Average (x64-2018).vi │ ├── 23 Input Scaling (x64-2018).vi │ ├── 24 Global Front Panel (x64-2018).vi │ ├── 30 GPS Time Fetch (x64-2018).vi │ ├── 31 GPS Interrupt RS232 Read (x64-2018).vi │ ├── 32 GPS Time Code Parser (x64-2018).vi │ ├── 33 GPS Time to Labview Time (x64-2018).vi │ ├── 34 GPS Time from Config (x64-2018).vi │ ├── 35 NEW GPS Interrupt RS232 Read (x64-2018).vi │ ├── 36 GPS String Manipulation (x64-2018).vi │ ├── 37 Time Conversion (x64-2018).vi │ ├── 38 Date Conversion (x64-2018).vi │ ├── 39 GPS Array to String (x64-2018).vi │ ├── 40 Config File Path (x64-2018).vi │ ├── 41 Config File Write GPS Time (x64-2018).vi │ ├── 42 Confing File Read GPS Time (x64-2018).vi │ ├── 43 Config File Get Input Scales (x64-2018).vi │ ├── 44 Config File Read Telecoms (x64-2018).vi │ ├── 50 NMEA Calc Checksum (x64-2018).vi │ ├── License.txt │ ├── NI_Timer.dll │ └── Test.vi └── 01_PIC_MC_V5P1 │ ├── 18F452ex.lkr │ ├── GPS_usart.c │ ├── How the PLL Works.xls │ ├── License.txt │ ├── Pinout changes.xls │ ├── UC_LCD.c │ ├── dml_common.c │ ├── gps_232.c │ ├── gps_time.c │ ├── num_to_txt.c │ ├── pps_time.c │ ├── testbenh.c │ ├── testbenh.cof │ ├── testbenh.hex │ ├── testbenh.map │ ├── testbenh.mcp │ ├── testbenh.mcs │ ├── testbenh.mcw │ ├── testbenh.mptags │ ├── testbenh.o │ └── testbenh.tagsrc ├── 02_HardwareSourceFiles ├── CircuitBoardDesignFiles │ ├── OpenPMU (LEM) Motherboard V37 (Hall Effect).brd │ └── OpenPMU (LEM) Motherboard V38 (Transformers) (Eagle 7).brd └── US Parts List.xlsx ├── 10_LegacyDocumentation ├── Component Placement.pptx ├── OpenPMU - Enclosure Assembly - V1.1.pdf ├── OpenPMU - PCB Assembly Instructions (USB-6009-OEM) - V1.pdf ├── OpenPMU - PCB Component Placement (USB-6009-OEM) - V1.1.pdf └── OpenPMU - PCB Connections (USB-6009-OEM) - V1.pdf ├── 20200930_Overview_draft.pdf ├── FluxPMU_logo.graffle ├── FluxPMU_logo.png ├── LICENSE └── README.md /00_Documentation/00_Makers Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/00_Makers Guide.pdf -------------------------------------------------------------------------------- /00_Documentation/01_HardwareGuides/Assembly Instructions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/01_HardwareGuides/Assembly Instructions.pdf -------------------------------------------------------------------------------- /00_Documentation/01_HardwareGuides/Garmin 18x GPS.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/01_HardwareGuides/Garmin 18x GPS.pdf -------------------------------------------------------------------------------- /00_Documentation/01_HardwareGuides/Housing Example.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/01_HardwareGuides/Housing Example.pdf -------------------------------------------------------------------------------- /00_Documentation/01_HardwareGuides/NI MAX.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/01_HardwareGuides/NI MAX.pdf -------------------------------------------------------------------------------- /00_Documentation/01_HardwareGuides/PIC Microprocessor.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/01_HardwareGuides/PIC Microprocessor.pdf -------------------------------------------------------------------------------- /00_Documentation/01_HardwareGuides/Power Supplies Example.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/01_HardwareGuides/Power Supplies Example.pdf -------------------------------------------------------------------------------- /00_Documentation/01_HardwareGuides/Wiring Suggestions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/01_HardwareGuides/Wiring Suggestions.pdf -------------------------------------------------------------------------------- /00_Documentation/02_TestingGuides/Analog Discovery Integration .pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/02_TestingGuides/Analog Discovery Integration .pdf -------------------------------------------------------------------------------- /00_Documentation/02_TestingGuides/PMU Tester.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/02_TestingGuides/PMU Tester.pdf -------------------------------------------------------------------------------- /00_Documentation/02_TestingGuides/Simulated Signal (Frequency Generator).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/02_TestingGuides/Simulated Signal (Frequency Generator).pdf -------------------------------------------------------------------------------- /00_Documentation/02_TestingGuides/Simulated Single (CRIO).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/02_TestingGuides/Simulated Single (CRIO).pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/00 Main (single phase).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/00 Main (single phase).pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/00 Main (three phase).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/00 Main (three phase).pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/00 Main Simulated Signal (and Triple).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/00 Main Simulated Signal (and Triple).pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/00 PMU Tester.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/00 PMU Tester.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/01 Waveform Simulation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/01 Waveform Simulation.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/10 DAQ Config (PFI0).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/10 DAQ Config (PFI0).pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/11 DAQ Config (continuous).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/11 DAQ Config (continuous).pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/14 Function Generator Signal.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/14 Function Generator Signal.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/15 Triple Phase Signal Generation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/15 Triple Phase Signal Generation.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/20 Limit 180 Degrees.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/20 Limit 180 Degrees.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/21 Symmetrical Components .pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/21 Symmetrical Components .pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/22 Average Frequency.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/22 Average Frequency.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/23 Input Scaling .pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/23 Input Scaling .pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/24 Global Front Panel.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/24 Global Front Panel.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/30 GPS Time Fetch.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/30 GPS Time Fetch.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/31 GPS Interrupt RS232 Read.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/31 GPS Interrupt RS232 Read.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/32 GPS Time Code Parser.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/32 GPS Time Code Parser.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/33 GPS Time to Labview Time.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/33 GPS Time to Labview Time.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/34 GPS Time from Config.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/34 GPS Time from Config.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/35 NEW GPS Interrupt RS232 Read.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/35 NEW GPS Interrupt RS232 Read.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/36 GPS String Manipulation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/36 GPS String Manipulation.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/37 Time Converison.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/37 Time Converison.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/38 Date Conversion.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/38 Date Conversion.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/39 GPS Array to String.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/39 GPS Array to String.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/40 Config File Path.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/40 Config File Path.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/41 Config File Write GPS Time.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/41 Config File Write GPS Time.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/42 Config File Read GPS Time.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/42 Config File Read GPS Time.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/43 Config File Get Input Scales.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/43 Config File Get Input Scales.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/44 Config File Read Telecoms.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/44 Config File Read Telecoms.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/50 NMEA Calc Checksum.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/50 NMEA Calc Checksum.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/Code Flow Chart.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/Code Flow Chart.pdf -------------------------------------------------------------------------------- /00_Documentation/03_LabVIEW_VI_Documentation/_02 Triple Waveform Simulation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/00_Documentation/03_LabVIEW_VI_Documentation/_02 Triple Waveform Simulation.pdf -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/00 Main (single phase) (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/00 Main (single phase) (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/00 Main (three phase) (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/00 Main (three phase) (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/00 Main Simulated Signal (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/00 Main Simulated Signal (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/00 Main Simulated Triple Signal (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/00 Main Simulated Triple Signal (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/01 Waveform Simulation (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/01 Waveform Simulation (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/02 Triple Waveform Simulation (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/02 Triple Waveform Simulation (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/10 DAQ Config (PFI0) (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/10 DAQ Config (PFI0) (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/11 DAQ Config (continuous) (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/11 DAQ Config (continuous) (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/12 Simulated DAQmx Signal (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/12 Simulated DAQmx Signal (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/14 Function Generator Signal (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/14 Function Generator Signal (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/15 Triple Phase Signal Generation (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/15 Triple Phase Signal Generation (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/20 Limit 180 Degrees (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/20 Limit 180 Degrees (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/21 Symmetrical Components (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/21 Symmetrical Components (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/22 Frequency Average (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/22 Frequency Average (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/23 Input Scaling (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/23 Input Scaling (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/24 Global Front Panel (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/24 Global Front Panel (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/30 GPS Time Fetch (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/30 GPS Time Fetch (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/31 GPS Interrupt RS232 Read (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/31 GPS Interrupt RS232 Read (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/32 GPS Time Code Parser (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/32 GPS Time Code Parser (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/33 GPS Time to Labview Time (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/33 GPS Time to Labview Time (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/34 GPS Time from Config (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/34 GPS Time from Config (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/35 NEW GPS Interrupt RS232 Read (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/35 NEW GPS Interrupt RS232 Read (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/36 GPS String Manipulation (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/36 GPS String Manipulation (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/37 Time Conversion (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/37 Time Conversion (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/38 Date Conversion (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/38 Date Conversion (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/39 GPS Array to String (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/39 GPS Array to String (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/40 Config File Path (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/40 Config File Path (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/41 Config File Write GPS Time (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/41 Config File Write GPS Time (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/42 Confing File Read GPS Time (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/42 Confing File Read GPS Time (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/43 Config File Get Input Scales (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/43 Config File Get Input Scales (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/44 Config File Read Telecoms (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/44 Config File Read Telecoms (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/50 NMEA Calc Checksum (x64-2018).vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/50 NMEA Calc Checksum (x64-2018).vi -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010, David Laverty (11th July 2010) 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the software nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL DAVID LAVERTY BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/NI_Timer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/NI_Timer.dll -------------------------------------------------------------------------------- /01_SourceCode/00_LabVIEW_64_Bit_Source/Test.vi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/00_LabVIEW_64_Bit_Source/Test.vi -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/18F452ex.lkr: -------------------------------------------------------------------------------- 1 | // This file was originally 18f452i.lkr as distributed with MPLAB C18. 2 | // Modified as follows: 3 | // - combine banks 4 and 5 into PROTECTED DATABANK "largebank" 4 | // - moved stack to gpr3 5 | // - Assign the "bigdata" SECTION into the new "largebank" region 6 | 7 | LIBPATH . 8 | 9 | FILES c018i.o 10 | FILES clib.lib 11 | FILES p18f452.lib 12 | 13 | CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED 14 | CODEPAGE NAME=page START=0x2A END=0x7DBF 15 | CODEPAGE NAME=debug START=0x7DC0 END=0x7FFF PROTECTED 16 | CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED 17 | CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED 18 | CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED 19 | CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED 20 | 21 | ACCESSBANK NAME=accessram START=0x0 END=0x7F 22 | DATABANK NAME=gpr0 START=0x80 END=0xFF 23 | DATABANK NAME=gpr1 START=0x100 END=0x1FF 24 | DATABANK NAME=gpr2 START=0x200 END=0x2FF 25 | DATABANK NAME=gpr3 START=0x300 END=0x3FF 26 | // This is the databank that will contain the large memory object 27 | DATABANK NAME=largebank START=0x400 END=0x5F3 PROTECTED 28 | DATABANK NAME=dbgspr START=0x5F4 END=0x5FF PROTECTED 29 | ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED 30 | 31 | SECTION NAME=CONFIG ROM=config 32 | 33 | // Assign the large memory object's section into the new region 34 | SECTION NAME=bigdata RAM=largebank 35 | 36 | STACK SIZE=0x100 RAM=gpr3 37 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/GPS_usart.c: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////// 2 | // Speedo Command Prompt - 08/07/2006 // 3 | ////////////////////////////////////////// 4 | 5 | // Header Files 6 | // 7 | #include 8 | 9 | // Function Prototypes 10 | // 11 | void read_gps(void); 12 | void gps_rmc(void); 13 | void gps_bwc(void); 14 | void rx_handler(void); 15 | void speed_parse(void); 16 | void bearing_parse(void); 17 | void wptbear_parse(void); 18 | void wptdist_parse(void); 19 | void desttime_calc(void); 20 | void time_circuits(void); 21 | void flux_dispersal(void); 22 | 23 | // Global Variables 24 | // 25 | int usart_point = 0; 26 | int i=0; 27 | int loopcount = 0; 28 | int first_run = 1; 29 | int no_speed = 1; 30 | int no_bearing = 1; 31 | int no_wptbear = 1; 32 | int no_wptdist = 1; 33 | int screen_page = 1; 34 | int dest_vel = 0; 35 | double theta = 0; 36 | float timetodest = 0; 37 | int dest_hours = 0; 38 | int dest_mins = 0; 39 | int dest_secs = 0; 40 | 41 | char splash[16] = " Test Test "; 42 | char speed_temp[6]; 43 | char bearing_temp[6]; 44 | char wptdist_temp[6]; 45 | char wptbear_temp[6]; 46 | char dest_time[7] = "------"; 47 | char in_temp; 48 | 49 | #pragma idata largebank // Since this is so long 50 | char gps_in[80] = "Abcdef"; // it is put in a special 51 | #pragma idata // section of memory 52 | 53 | void read_gps(void){ 54 | 55 | i=0; 56 | while(i < 6){ 57 | speed_temp[i] = ','; 58 | bearing_temp[i] = ','; 59 | wptdist_temp[i] = ','; 60 | wptbear_temp[i] = ','; 61 | i++; 62 | } 63 | 64 | while(1){ 65 | i=0; 66 | 67 | if (RCSTAbits.OERR){ 68 | RCSTAbits.CREN=0; /* disable / enable receiver */ 69 | RCSTAbits.CREN=1; /* to clear over-run condition */ 70 | } 71 | 72 | while(i == 0){ 73 | while(!DataRdyUSART()); 74 | in_temp = ReadUSART(); 75 | if(in_temp == '$'){ i = 1; } 76 | } 77 | 78 | if (RCSTAbits.OERR){ 79 | RCSTAbits.CREN=0; /* disable / enable receiver */ 80 | RCSTAbits.CREN=1; /* to clear over-run condition */ 81 | } 82 | 83 | i=0; 84 | while(i<80){ 85 | 86 | while(!DataRdyUSART()); 87 | 88 | gps_in[i] = ReadUSART(); 89 | 90 | if(i == 4){ 91 | if(gps_in[4] == 'C'){ /* Continue */} 92 | else{gps_in[i] = '*';} 93 | } 94 | 95 | if(gps_in[i] == '*'){ 96 | i = 81; 97 | } 98 | 99 | i++; 100 | if(i == 80){i = 0;} 101 | } 102 | 103 | if( gps_in[0] == 'G' && 104 | gps_in[1] == 'P' && 105 | gps_in[2] == 'R' && 106 | gps_in[3] == 'M' && 107 | gps_in[4] == 'C' ){ 108 | 109 | putsUSART(splash); // A useful test signal 110 | 111 | gps_rmc(); // Finds the location of data 112 | } 113 | 114 | if( gps_in[0] == 'G' && 115 | gps_in[1] == 'P' && 116 | gps_in[2] == 'B' && 117 | gps_in[3] == 'W' && 118 | gps_in[4] == 'C' ){ 119 | 120 | gps_bwc(); // Finds the location of data 121 | 122 | if(loopcount >= 36 && loopcount < 72){ 123 | screen_page = 2; 124 | } 125 | else{screen_page = 1;} 126 | 127 | desttime_calc(); 128 | time_circuits(); 129 | flux_dispersal(); 130 | LCD_page(screen_page); 131 | } 132 | 133 | dis_speed_slew(); // Functions for Red LEDs 134 | if(no_speed == 1){ segs(10,0); } 135 | else{ red_speed( dis_speed ); } 136 | 137 | Delay10KTCYx( 5 ); 138 | 139 | loopcount++; 140 | if(loopcount >= 72){ loopcount = 0; } 141 | } 142 | } 143 | 144 | //------------------------------------------------------------- 145 | // -- GPS Parser RMC 146 | void gps_rmc(void){ 147 | 148 | // This is reading commas until the 7th location, then grabs the data 149 | 150 | int comma_count = 0; 151 | int gps_count = 0; 152 | int speed_count = 0; 153 | int bearing_count = 0; 154 | int finish = 0; 155 | int data_length = 0; 156 | char chr_temp = 48; 157 | 158 | data_length = strlen(gps_in); 159 | 160 | while(chr_temp != '*' && finish != 1){ 161 | 162 | chr_temp = gps_in[ gps_count ]; 163 | 164 | if(comma_count == 7){ 165 | speed_temp[ speed_count ] = chr_temp; 166 | speed_count++; 167 | } 168 | 169 | if(comma_count == 8){ 170 | bearing_temp[ bearing_count ] = chr_temp; 171 | bearing_count++; 172 | } 173 | 174 | if(chr_temp == ','){ comma_count++; } 175 | if(gps_count == data_length){ finish = 1; } 176 | gps_count++; 177 | } 178 | 179 | speed_parse(); 180 | bearing_parse(); 181 | } 182 | 183 | //------------------------------------------------------------- 184 | // -- SPEED Parser 185 | void speed_parse(void){ 186 | 187 | // This coverts ASCII float into FLOAT 188 | 189 | int speed_count = 0; 190 | int finish = 0; 191 | int decimal = 0; 192 | int decimal_count = 0; 193 | int speed = 0; 194 | double speedf = 0; 195 | 196 | if( speed_temp[0] == ','){ no_speed = 1; } 197 | else{ 198 | no_speed = 0; 199 | while( finish != 1){ 200 | speed = (speed * 10) + (speed_temp[speed_count] - 48); 201 | speed_count++; 202 | 203 | if( decimal == 1 ){ decimal_count++; } 204 | if( speed_temp[speed_count] == '.' ){ 205 | speed_count++; 206 | decimal = 1; 207 | } 208 | if( speed_temp[speed_count] == ',' ){ 209 | finish = 1; 210 | } 211 | } 212 | 213 | speedf = (double) speed / pow(10,decimal_count); 214 | speedf = speedf * 1.852; 215 | gps_speed = (int) speedf; 216 | } 217 | } 218 | 219 | //------------------------------------------------------------- 220 | // -- BEARING Parser 221 | void bearing_parse(void){ 222 | 223 | // This coverts ASCII float into FLOAT 224 | 225 | int bearing_count = 0; 226 | int finish = 0; 227 | int decimal = 0; 228 | int decimal_count = 0; 229 | int bearing = 0; 230 | 231 | if( bearing_temp[0] == ','){ no_bearing = 1; } 232 | else{ 233 | no_bearing = 0; 234 | while( finish != 1){ 235 | bearing = (bearing * 10) + (bearing_temp[bearing_count] - 48); 236 | bearing_count++; 237 | 238 | if( decimal == 1 ){ decimal_count++; } 239 | if( bearing_temp[bearing_count] == '.' ){ 240 | bearing_count++; 241 | decimal = 1; 242 | } 243 | if( bearing_temp[bearing_count] == ',' ){ 244 | finish = 1; 245 | } 246 | } 247 | 248 | bearing = bearing / pow(10,decimal_count); 249 | gps_bearing = bearing; 250 | } 251 | } 252 | 253 | //------------------------------------------------------------- 254 | // -- WAYPOINT BEARING Parser 255 | void wptdist_parse(void){ 256 | 257 | // This coverts ASCII float into FLOAT 258 | 259 | int count = 0; 260 | int finish = 0; 261 | int decimal = 0; 262 | int decimal_count = 0; 263 | int data = 0; 264 | float dataf = 0; 265 | 266 | if( wptdist_temp[0] == ','){ no_wptdist = 1; } 267 | else{ 268 | no_wptdist = 0; 269 | while( finish != 1){ 270 | data = (data * 10) + (wptdist_temp[count] - 48); 271 | count++; 272 | 273 | if( decimal == 1 ){ decimal_count++; } 274 | if( wptdist_temp[count] == '.' ){ 275 | count++; 276 | decimal = 1; 277 | } 278 | if( wptdist_temp[count] == ',' ){ 279 | finish = 1; 280 | } 281 | } 282 | 283 | dataf = (float) data / pow(10,decimal_count); 284 | dataf = dataf * 1.852; 285 | data = (int) dataf; 286 | gps_wptdist = data; 287 | } 288 | } 289 | 290 | //------------------------------------------------------------- 291 | // -- WAYPOINT BEARING Parser 292 | void wptbear_parse(void){ 293 | 294 | // This coverts ASCII float into FLOAT 295 | 296 | int count = 0; 297 | int finish = 0; 298 | int decimal = 0; 299 | int decimal_count = 0; 300 | int data = 0; 301 | 302 | if( wptbear_temp[0] == ','){ no_wptbear = 1; } 303 | else{ 304 | no_wptbear = 0; 305 | while( finish != 1){ 306 | data = (data * 10) + (wptbear_temp[count] - 48); 307 | count++; 308 | 309 | if( decimal == 1 ){ decimal_count++; } 310 | if( wptbear_temp[count] == '.' ){ 311 | count++; 312 | decimal = 1; 313 | } 314 | if( wptbear_temp[count] == ',' ){ 315 | finish = 1; 316 | } 317 | } 318 | 319 | data = data / pow(10,decimal_count); 320 | gps_wptbear = data; 321 | } 322 | } 323 | 324 | //------------------------------------------------------------- 325 | // -- Destination Time Calculator 326 | void desttime_calc(void){ 327 | 328 | int tens = 0; 329 | int units = 0; 330 | 331 | theta = (double) ( gps_bearing - gps_wptbear ); 332 | theta = theta * 0.0174533; 333 | dest_vel = gps_speed * cos( theta ); 334 | if(dest_vel < 1){ 335 | dest_time[0] = '-'; 336 | dest_time[1] = '-'; 337 | dest_time[2] = '-'; 338 | dest_time[3] = '-'; 339 | dest_time[4] = '-'; 340 | dest_time[5] = '-'; 341 | } 342 | else{ 343 | timetodest = (float) gps_wptdist / (float) dest_vel; 344 | dest_hours = (int) timetodest; 345 | timetodest = ( timetodest - (float) dest_hours ) * 60; 346 | dest_mins = (int) timetodest; 347 | timetodest = ( timetodest - (float) dest_mins ) * 60; 348 | dest_secs = (int) timetodest; 349 | 350 | dest_secs = dest_secs + (gps_in[10] - 48)*10 + (gps_in[11] - 48); 351 | if(dest_secs > 59){ 352 | dest_secs = dest_secs - 60; 353 | dest_mins = dest_mins + 1; 354 | } 355 | dest_mins = dest_mins + (gps_in[8] - 48)*10 + (gps_in[9] - 48); 356 | if(dest_mins > 59){ 357 | dest_mins = dest_mins - 60; 358 | dest_hours = dest_hours + 1; 359 | } 360 | dest_hours = dest_hours + (gps_in[6] - 48)*10 + (gps_in[7] - 48); 361 | if(dest_hours > 23){ 362 | dest_hours = dest_hours - 24; 363 | } 364 | 365 | units = dest_hours%10; 366 | dest_hours = dest_hours/10; 367 | tens = dest_hours%10; 368 | dest_time[0] = tens + 48; 369 | dest_time[1] = units + 48; 370 | 371 | units = dest_mins%10; 372 | dest_mins = dest_mins/10; 373 | tens = dest_mins%10; 374 | dest_time[2] = tens + 48; 375 | dest_time[3] = units + 48; 376 | 377 | units = dest_secs%10; 378 | dest_secs = dest_secs/10; 379 | tens = dest_secs%10; 380 | dest_time[4] = tens + 48; 381 | dest_time[5] = units + 48; 382 | } 383 | 384 | } 385 | 386 | //------------------------------------------------------------- 387 | // -- TIME CIRCUITS - LCD Display Module 388 | void time_circuits(void){ 389 | 390 | page1_line2[11] = gps_in[6]; 391 | page1_line2[12] = gps_in[7]; 392 | page1_line2[13] = ':'; 393 | page1_line2[14] = gps_in[8]; 394 | page1_line2[15] = gps_in[9]; 395 | page1_line2[16] = ':'; 396 | page1_line2[17] = gps_in[10]; 397 | page1_line2[18] = gps_in[11]; 398 | 399 | page1_line3[11] = dest_time[0]; 400 | page1_line3[12] = dest_time[1]; 401 | page1_line3[13] = ':'; 402 | page1_line3[14] = dest_time[2]; 403 | page1_line3[15] = dest_time[3]; 404 | page1_line3[16] = ':'; 405 | page1_line3[17] = dest_time[4]; 406 | page1_line3[18] = dest_time[5]; 407 | 408 | if(first_run == 1){ 409 | page1_line4[11] = gps_in[6]; 410 | page1_line4[12] = gps_in[7]; 411 | page1_line4[13] = ':'; 412 | page1_line4[14] = gps_in[8]; 413 | page1_line4[15] = gps_in[9]; 414 | page1_line4[16] = ':'; 415 | page1_line4[17] = gps_in[10]; 416 | page1_line4[18] = gps_in[11]; 417 | first_run = 0; 418 | } 419 | } 420 | 421 | //------------------------------------------------------------- 422 | // -- TIME CIRCUITS - LCD Display Module 423 | void flux_dispersal(void){ 424 | 425 | int hund,tens,units; 426 | int temp_var; 427 | 428 | temp_var = gps_speed; 429 | units = 48 + temp_var%10; 430 | temp_var = temp_var/10; 431 | tens = 48 + temp_var%10; 432 | temp_var = temp_var/10; 433 | hund = 48 + temp_var%10; 434 | 435 | page2_line2[11] = hund; 436 | page2_line2[12] = tens; 437 | page2_line2[13] = units; 438 | page2_line2[14] = ' '; 439 | page2_line2[15] = 'k'; 440 | page2_line2[16] = 'm'; 441 | page2_line2[17] = '/'; 442 | page2_line2[18] = 'h'; 443 | 444 | temp_var = gps_bearing; 445 | units = 48 + temp_var%10; 446 | temp_var = temp_var/10; 447 | tens = 48 + temp_var%10; 448 | temp_var = temp_var/10; 449 | hund = 48 + temp_var%10; 450 | 451 | page2_line3[11] = hund; 452 | page2_line3[12] = tens; 453 | page2_line3[13] = units; 454 | page2_line3[14] = ' '; 455 | 456 | if(gps_bearing >= 337 || gps_bearing < 22 ){ // North - special case uses OR 457 | page2_line3[15] = 'N'; page2_line3[16] = ' ';} // - all others use AND 458 | else if(gps_bearing >= 22 && gps_bearing < 67 ){ // NE 459 | page2_line3[15] = 'N'; page2_line3[16] = 'E';} 460 | else if(gps_bearing >= 67 && gps_bearing < 112 ){ // E 461 | page2_line3[15] = 'E'; page2_line3[16] = ' ';} 462 | else if(gps_bearing >= 112 && gps_bearing < 157 ){ // SE 463 | page2_line3[15] = 'S'; page2_line3[16] = 'E';} 464 | else if(gps_bearing >= 157 && gps_bearing < 202 ){ // S 465 | page2_line3[15] = 'S'; page2_line3[16] = ' ';} 466 | else if(gps_bearing >= 202 && gps_bearing < 247 ){ // SW 467 | page2_line3[15] = 'S'; page2_line3[16] = 'W';} 468 | else if(gps_bearing >= 247 && gps_bearing < 292 ){ // W 469 | page2_line3[15] = 'W'; page2_line3[16] = ' ';} 470 | else if(gps_bearing >= 292 && gps_bearing < 337 ){ // NW 471 | page2_line3[15] = 'N'; page2_line3[16] = 'W';} 472 | 473 | temp_var = gps_wptdist; 474 | units = 48 + temp_var%10; 475 | temp_var = temp_var/10; 476 | tens = 48 + temp_var%10; 477 | temp_var = temp_var/10; 478 | hund = 48 + temp_var%10; 479 | 480 | page2_line4[11] = hund; 481 | page2_line4[12] = tens; 482 | page2_line4[13] = units; 483 | page2_line4[14] = ' '; 484 | page2_line4[15] = 'k'; 485 | page2_line4[16] = 'm'; 486 | } 487 | // END OF FILE 488 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/How the PLL Works.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/01_PIC_MC_V5P1/How the PLL Works.xls -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010, David Laverty (11th July 2010) 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the software nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL DAVID LAVERTY BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/Pinout changes.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/01_PIC_MC_V5P1/Pinout changes.xls -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/UC_LCD.c: -------------------------------------------------------------------------------- 1 | /*********************************************************************** 2 | * UC_LCD -- for use with PICDEM2Plus using PIC18F452 or PIC18F458 * 3 | * LCD display on PICDEM2 uses Hitachi HD44780 LCD control protocol * 4 | * * 5 | * Copyright (c) 2004 - Ludwig J. Keck -- All rights reserved * 6 | * You may use this code without restriction so long as authorship is * 7 | * credited and the code is not sold as library code and that you * 8 | * provide the author with any unencumbered changes or improvements * 9 | * * 10 | * Start 10 Apr 04 LJK * 11 | * * 12 | **********************************************************************/ 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | /* 19 | PICDEM2 Configuration: 20 | 21 | Oscillator: 4 MHz 22 | 23 | LCD DISPLAY: 2-line by 16 char 24 | E - on RA1 25 | RW - on RA2 26 | RS - on RA3 27 | 28 | DB4 - on RD0 29 | DB5 - on RD1 30 | DB6 - on RD2 31 | DB7 - on RD3 32 | 33 | !!! NOTE: ADCON1 must be set for DIGITAL I/O to use RAx !!! 34 | */ 35 | 36 | // DATA_PORT defines the port to which the LCD data lines are connected 37 | #define DATA_PORT PORTD 38 | #define TRIS_DATA_PORT TRISD 39 | 40 | #define RW_PIN PORTAbits.RA2 // PORT for RW 41 | #define TRIS_RW DDRAbits.RA2 // TRIS for RW 42 | #define RS_PIN PORTAbits.RA3 // PORT for RS 43 | #define TRIS_RS DDRAbits.RA3 // TRIS for RS 44 | #define E_PIN PORTAbits.RA1 // PORT for E 45 | #define TRIS_E DDRAbits.RA1 // TRIS for E 46 | 47 | #define LN_INPUT TRIS_DATA_PORT|=0x0f // make low nibble input 48 | #define LN_OUTPUT TRIS_DATA_PORT&=0x00 // make low nibble output 49 | 50 | /* Display ON/OFF Control defines */ 51 | #define DISPLAY_ON 0b00001111 52 | #define DISPLAY_OFF 0b00001011 53 | #define CURSOR_ON 0b00001111 54 | #define CURSOR_OFF 0b00001101 55 | #define BLINK_ON 0b00001111 56 | #define BLINK_OFF 0b00001110 57 | 58 | 59 | /**********************************************************************/ 60 | void delay_1us (void) 61 | { // 1 Nop at 4 MHz ~ 1 microsecond 62 | Nop (); // replace with Delayxxxx for higher freq operation 63 | } 64 | /**********************************************************************/ 65 | void delay_20ms (void) // at 4 MHz: ~ 20 ms 66 | { 67 | Delay1KTCYx (20); 68 | return; 69 | } 70 | /**********************************************************************/ 71 | void delay_5ms (void) // at 4 MHz: ~ 5 ms 72 | { 73 | Delay1KTCYx (5); 74 | return; 75 | } 76 | /**********************************************************************/ 77 | void clock_data (void) 78 | { 79 | delay_1us (); // delay ~ 1 microsecond 80 | E_PIN = 1; // set LCD enable pin HI 81 | delay_1us (); // delay ~ 1 microsecond 82 | E_PIN = 0; // set LCD enable pin LO 83 | } 84 | /**********************************************************************/ 85 | unsigned char LCD_busy (void) 86 | { 87 | unsigned char port_data, port_busypin; 88 | 89 | LN_INPUT; // make low nibble input 90 | RW_PIN = 1; // Set the control bits for read 91 | RS_PIN = 0; 92 | delay_1us (); 93 | E_PIN = 1; // Clock in the command 94 | delay_1us (); 95 | port_data = DATA_PORT; 96 | port_busypin = port_data & 0b00001000; // 0x08; 97 | E_PIN = 0; // Reset clock line 98 | delay_1us (); 99 | E_PIN = 1; // Clock in other nibble 100 | delay_1us (); 101 | E_PIN = 0; 102 | RW_PIN = 0; // Reset control line 103 | LN_OUTPUT; // make low nibble output 104 | return port_busypin; 105 | } 106 | /**********************************************************************/ 107 | void clock_nibble_out (unsigned char data) // to low nibble of port 108 | { 109 | DATA_PORT &= 0xf0; // clear low nibble of port 110 | data &= 0x0f; // zero any bits in upper nibble of data 111 | DATA_PORT |= data; // set data to port 112 | delay_1us (); 113 | E_PIN = 1; // Clock the data out 114 | delay_1us (); 115 | E_PIN = 0; 116 | } 117 | /**********************************************************************/ 118 | void LCD_command (unsigned char cmd) // 119 | { 120 | LN_OUTPUT; // low nibble output 121 | RW_PIN = 0; // Set control signals for command 122 | RS_PIN = 0; 123 | clock_nibble_out (cmd >> 4); // shift upper nibble to lower nibble 124 | clock_nibble_out (cmd); // this outputs lower nibble 125 | } 126 | /**********************************************************************/ 127 | void LCD_init (void) 128 | { 129 | // LCD will be used in 4-bit mode. 130 | // clock_nibble_out uses lower nibble of data port 131 | // LCD defaults on power-up to 8-bit mode 132 | 133 | TRIS_RW = 0; // set RW pin for output 134 | TRIS_RS = 0; // set RS pin for output 135 | TRIS_E = 0; // set E pin for output 136 | RW_PIN = 0; // R/W pin made low 137 | RS_PIN = 0; // Register select pin made low 138 | E_PIN = 0; // Clock pin made low 139 | 140 | delay_20ms (); // Delay 15ms min to allow for LCD power-on reset # 1 141 | 142 | LN_OUTPUT; // set data port low nibble for output 143 | 144 | clock_nibble_out (0b0011); // "home" # 2 145 | delay_5ms (); // Delay for at least 4.1ms 146 | clock_nibble_out (0b0011); // "home" # 4 147 | delay_5ms (); // Delay for at least 100us # 5 148 | 149 | clock_nibble_out (0b0011); // "home" # 6 150 | delay_5ms (); // Delay for at least 100us 151 | clock_nibble_out (0b0010); // set LCD interface to 4-bit # 7 152 | delay_5ms (); 153 | 154 | clock_nibble_out (0b0010); // set LCD interface to 4-bit 155 | clock_nibble_out (0b1000); // 1 = 2-lines, 0 = 5x7, 00 = xx 156 | 157 | while (LCD_busy ()); // Wait if LCD busy 158 | LCD_command (0x01); // Clear display - takes ~16 ms 159 | delay_20ms (); 160 | LCD_command (DISPLAY_ON & CURSOR_OFF & BLINK_OFF); 161 | } 162 | /**********************************************************************/ 163 | void LCD_WriteChar (char data) 164 | { 165 | LN_OUTPUT; // low nibble output 166 | RW_PIN = 0; // Set control signals for data 167 | RS_PIN = 1; 168 | clock_nibble_out (data >> 4); // shift upper nibble to lower nibble 169 | clock_nibble_out (data); // this outputs lower nibble 170 | LN_INPUT; 171 | } 172 | /**********************************************************************/ 173 | void LCD_display (unsigned char line, unsigned char position, 174 | char text[16]) 175 | { 176 | int i = 0; 177 | unsigned char address; 178 | 179 | address = position - 1; 180 | if (line == 2) address += 0x40; 181 | address += 0b10000000; 182 | while (LCD_busy ()); 183 | LCD_command (address); 184 | while (text[i]) // write data to LCD up to null 185 | { 186 | while (LCD_busy ()); // wait while LCD is busy 187 | LCD_WriteChar (text[i]); // write character to LCD 188 | i++; // step to next character 189 | } 190 | } 191 | /**********************************************************************/ 192 | void LCD_blink_position (unsigned char line, unsigned char position) 193 | { 194 | unsigned char address; 195 | 196 | address = position - 1; 197 | if (line == 2) address += 0x40; 198 | address += 0b10000000; 199 | while (LCD_busy ()); 200 | LCD_command (address); 201 | while (LCD_busy ()); 202 | LCD_command (DISPLAY_ON & CURSOR_ON & BLINK_ON); 203 | } 204 | /**********************************************************************/ 205 | void LCD_normal (void) 206 | { 207 | while (LCD_busy ()); 208 | LCD_command (DISPLAY_ON & CURSOR_OFF & BLINK_OFF); 209 | } 210 | 211 | 212 | /* END */ 213 | /**********************************************************************/ 214 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/dml_common.c: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////// 2 | // David's commonly used useful source code // 3 | // Version 1.0 - (c) DML 2008 // 4 | // 18/04/2008 // 5 | ////////////////////////////////////////////////////////////// 6 | // 7 | // Header Files 8 | // 9 | #include 10 | #include 11 | 12 | // Function Prototypes 13 | // 14 | 15 | // Global Variables 16 | // 17 | rom char STR_DECIMALPOINT[]="."; 18 | 19 | //------------------------------------------------------------- 20 | // -- NUMBER TO TEXT - V2 21 | void num2txt(long x, long n){ 22 | 23 | int digit[10],i; 24 | 25 | if(x>9999999){x = 9999999;} 26 | if(x<0){x = 0;} 27 | 28 | i = 0; 29 | while(i < n){ 30 | digit[i] = x%10; 31 | x = x/10; 32 | i++; 33 | } 34 | 35 | i = 0; 36 | while(i < n){ 37 | while(BusyUSART()); 38 | WriteUSART(digit[n-1-i] + 48); 39 | i++; 40 | } 41 | } 42 | // ********* END OF FILE ********** -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/gps_232.c: -------------------------------------------------------------------------------- 1 | // Header Files 2 | // 3 | #include 4 | #include 5 | #include 6 | 7 | // Function Prototypes 8 | // 9 | void read_gps(void); 10 | void gp_rmc(void); 11 | 12 | // Global Variables 13 | // 14 | #pragma idata largebank // Since this is so long 15 | char gps_in[80] = "Abcdef"; // it is put in a special 16 | #pragma idata // section of memory 17 | 18 | 19 | //------------------------------------------------------------- 20 | // -- Read GPS Time and Active Lock 21 | void read_gps(void){ 22 | 23 | int i = 0; 24 | int gprmc = 0; 25 | char in_temp = 0; 26 | 27 | while( gprmc == 0 ){ // NMEA sentences which MUST be read 28 | 29 | if (RCSTAbits.OERR){ 30 | RCSTAbits.CREN=0; /* disable / enable receiver */ 31 | RCSTAbits.CREN=1; /* to clear over-run condition */ 32 | } 33 | 34 | while(i == 0){ 35 | while(!DataRdyUSART()); 36 | in_temp = ReadUSART(); 37 | if(in_temp == '$'){ i = 1; } 38 | } 39 | 40 | if (RCSTAbits.OERR){ 41 | RCSTAbits.CREN=0; /* disable / enable receiver */ 42 | RCSTAbits.CREN=1; /* to clear over-run condition */ 43 | } 44 | 45 | i = 0; 46 | 47 | while(i<80){ 48 | 49 | while(!DataRdyUSART()); 50 | 51 | gps_in[i] = ReadUSART(); 52 | 53 | if(i == 4){ // This section of code 54 | if(gps_in[4] == 'C'){ /* Continue */} // checks for the 'C' in 55 | else{gps_in[i] = '*';} // GPRMC. Remove if listening 56 | } // for other strings 57 | 58 | if(gps_in[i] == '*'){ 59 | i = 81; 60 | } 61 | 62 | i++; 63 | if(i == 80){i = 0;} 64 | } 65 | 66 | if( gps_in[0] == 'G' && 67 | gps_in[1] == 'P' && 68 | gps_in[2] == 'R' && 69 | gps_in[3] == 'M' && 70 | gps_in[4] == 'C' ){ 71 | 72 | gprmc = 1; 73 | gp_rmc(); 74 | } 75 | } 76 | } 77 | 78 | 79 | //------------------------------------------------------------- 80 | // -- NMEA - GPRMC 81 | void gp_rmc(void){ 82 | 83 | // This is reading commas until the 7th location, then grabs the data 84 | 85 | int comma_count = 0; 86 | int comma_service = 0; 87 | int gps_count = 0; 88 | char chr_temp = 48; 89 | 90 | char temp_txt[] = " "; 91 | 92 | int i = 0; 93 | int j = 0; 94 | 95 | // 01234567890123456789 96 | //$GPRMC,113405,A,5438.22,N,00556.16,W,000.0,229.9,090706,007.5,W*75 97 | 98 | while(chr_temp != '*' && gps_count <= strlen(gps_in)){ 99 | 100 | chr_temp = gps_in[ gps_count ]; 101 | 102 | if(chr_temp == ','){ 103 | comma_count++; 104 | comma_service = 0; 105 | } 106 | else if(comma_count == 1 && comma_service == 0){ // 1st Comma = TIME 107 | 108 | hours = 10 * ( gps_in[ gps_count + 0 ] - 48 ) + ( gps_in[ gps_count + 1 ] - 48 ); 109 | minutes = 10 * ( gps_in[ gps_count + 2 ] - 48 ) + ( gps_in[ gps_count + 3 ] - 48 ); 110 | seconds = 10 * ( gps_in[ gps_count + 4 ] - 48 ) + ( gps_in[ gps_count + 5 ] - 48 ); 111 | 112 | comma_service = 1; 113 | } 114 | else if(comma_count == 2 && comma_service == 0){ // 2nd Comma = STATUS 115 | 116 | if(gps_in[ gps_count + 0 ] == 'A'){ 117 | lock = 1; 118 | lock_hour = hours; 119 | lock_mins = minutes; 120 | } 121 | else{ lock = 0; } 122 | 123 | comma_service = 1; 124 | } 125 | else if( comma_count == 3 && comma_service == 0){ // 3rd Comma = LATITUDE 126 | 127 | i = 0; 128 | j = 0; 129 | while( j < 4 ){ 130 | 131 | if( gps_in[ gps_count + i ] == ',' ){ 132 | j++; 133 | } 134 | position[i] = gps_in[ gps_count + i ]; 135 | i++; 136 | } 137 | 138 | comma_service = 1; 139 | } 140 | else if(comma_count == 9 && comma_service == 0){ // 9th Comma = DATE 141 | 142 | days = 10 * ( gps_in[ gps_count + 0 ] - 48 ) + ( gps_in[ gps_count + 1 ] - 48 ); 143 | months = 10 * ( gps_in[ gps_count + 2 ] - 48 ) + ( gps_in[ gps_count + 3 ] - 48 ); 144 | years = 10 * ( gps_in[ gps_count + 4 ] - 48 ) + ( gps_in[ gps_count + 5 ] - 48 ); 145 | 146 | comma_service = 1; 147 | } 148 | 149 | gps_count++; 150 | } 151 | 152 | } 153 | 154 | 155 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/gps_time.c: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////// 2 | // more_FNC - 03/01/2007 // 3 | // Helper Functions for use of PIC Starter Board // 4 | ////////////////////////////////////////////////////////////// 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | // Global variables 11 | // 12 | unsigned int Timer1 = 0; 13 | int Freq1 = 50; 14 | int Clock1 = 0; 15 | int Tick1 = 0; 16 | float Multiplier = 1.0; 17 | 18 | // Function prototypes 19 | // 20 | void UpdateTime(void); 21 | void high_ISR2(void); 22 | void low_ISR2(void); 23 | 24 | //------------------------------------------------------------- 25 | // -- Interrupt stuff - RB0 / RB1 26 | #pragma code HIGH_INTERRUPT_VECTOR = 0x8 27 | void high_ISR(void) 28 | { 29 | _asm 30 | goto high_ISR2 31 | _endasm 32 | } 33 | #pragma code 34 | 35 | #pragma interrupt high_ISR2 36 | void high_ISR2(void){ 37 | 38 | if(INTCONbits.INT0IF == 1){ // Time Stamp Interrupt (RB0) 39 | 40 | RB0_time = ReadTimer0(); 41 | RB0_flag = 1; 42 | 43 | INTCONbits.INT0IF = 0; // Clear interrupt 44 | } 45 | else if(INTCON3bits.INT1IF == 1){ // 1PSS Interrupt (RB1) 46 | 47 | PORTDbits.RD5 = 0; 48 | WriteTimer1( 65536 - Timer1 ); 49 | 50 | PPS_total_time = ReadTimer0(); 51 | WriteTimer0(0); 52 | PIE1bits.TMR1IE = 1; 53 | PIR1bits.TMR1IF = 0; 54 | 55 | Clock1 = 0; 56 | 57 | UpdateTime(); 58 | 59 | INTCON3bits.INT1IF = 0; // Clear interrupt 60 | } 61 | else if(PIR1bits.TMR1IF == 1){ // TIMER1 Interrupt 62 | 63 | PORTDbits.RD5 = !PORTDbits.RD5; 64 | WriteTimer1( 65536 - Timer1 ); 65 | 66 | if(Clock1 >= ((Freq1*2)-2) ){ 67 | PIE1bits.TMR1IE = 0; 68 | } 69 | Clock1++; 70 | 71 | PIR1bits.TMR1IF = 0; // Clear interrupt 72 | } 73 | } 74 | 75 | //-------------------------------------------------------- 76 | // -- Low priority interrupt vector 77 | #pragma code LOW_INTERRUPT_VECTOR = 0x18 78 | void low_ISR(void){ 79 | _asm 80 | goto low_ISR2 81 | _endasm 82 | } 83 | #pragma code 84 | 85 | #pragma interruptlow low_ISR2 86 | void low_ISR2(void){ 87 | 88 | } 89 | 90 | //------------------------------------------------------------- 91 | // -- Updates system time 92 | void UpdateTime(void){ 93 | 94 | seconds++; 95 | if(seconds >= 60){ 96 | minutes++; 97 | seconds = 0;} 98 | if(minutes >= 60){ 99 | hours++; 100 | minutes = 0;} 101 | if(hours >= 24){ 102 | days++; 103 | hours = 0;} 104 | 105 | if (months == 0 && days >= 31){ // Jan 106 | months++; 107 | days = 0; 108 | } 109 | else if (months == 1 && days >= 28 && years%4 != 0){ // Feb (Normal) 110 | months++; 111 | days = 0; 112 | } 113 | else if (months == 1 && days >= 29 && years%4 == 0){ // Feb (Leap) 114 | months++; 115 | days = 0; 116 | } 117 | else if (months == 2 && days >= 31){ // March 118 | months++; 119 | days = 0; 120 | } 121 | else if (months == 3 && days >= 30){ // April 122 | months++; 123 | days = 0; 124 | } 125 | else if (months == 4 && days >= 31){ // May 126 | months++; 127 | days = 0; 128 | } 129 | else if (months == 5 && days >= 30){ // June 130 | months++; 131 | days = 0; 132 | } 133 | else if (months == 6 && days >= 31){ // July 134 | months++; 135 | days = 0; 136 | } 137 | else if (months == 7 && days >= 31){ // Aug 138 | months++; 139 | days = 0; 140 | } 141 | else if (months == 8 && days >= 30){ // Sept 142 | months++; 143 | days = 0; 144 | } 145 | else if (months == 9 && days >= 31){ // Oct 146 | months++; 147 | days = 0; 148 | } 149 | else if (months == 10 && days >= 30){ // Nov 150 | months++; 151 | days = 0; 152 | } 153 | else if (months >= 11 && days >= 31){ // Dec 154 | months++; 155 | days = 0; 156 | } 157 | 158 | if(months >= 12){ 159 | years++; 160 | months = 0; 161 | } 162 | } 163 | 164 | /* END OF FILE */ -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/num_to_txt.c: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////// 2 | // more_FNC - 03/01/2007 // 3 | // Helper Functions for use of PIC Starter Board // 4 | ////////////////////////////////////////////////////////////// 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | // Function prototypes 11 | // 12 | //void numtotext(int); 13 | 14 | 15 | 16 | 17 | // End of file 18 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/pps_time.c: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////// 2 | // more_FNC - 03/01/2007 // 3 | // Helper Functions for use of PIC Starter Board // 4 | ////////////////////////////////////////////////////////////// 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | // Global variables 11 | // 12 | unsigned int Timer1_scale = 0; 13 | unsigned int Timer1_ideal = 0; 14 | unsigned int Timer1_read = 0; 15 | unsigned int Timer1_bound = 0; 16 | unsigned int Timer1_corrected = 0; 17 | 18 | unsigned int Timer1_wait[110]; 19 | unsigned int PLL_coarse_adjust = 70; // 16 Found to be the case on "Clock 2" 20 | float PLL_adjust = 0; // total desired fine adjustment 21 | float PLL_adjsgn = 0; // sign of the adjustment 22 | float PLL_freq = 0; // operating frequency 23 | float PLL_space1 = 0; // increment spacing 24 | float PLL_space0 = 0; // previous increment spacing 25 | int PLL_i = 0; // pointer in the Timer1_wait[] delay line 26 | int PLL_fuzzy_event = 0; // for debugging, lets you watch what the Fuzzy logic is doing 27 | 28 | int Freq1 = 99; 29 | int Freq1_old = 0; 30 | int Clock1 = 0; 31 | int Tick1 = 0; 32 | float Multiplier = 1.0; 33 | 34 | int RB0_time = 0; 35 | int RB0_flag = 0; 36 | int RB0_secs = 0; 37 | 38 | // Function prototypes 39 | // 40 | void UpdateTime(void); 41 | void PLL_speed(void); 42 | void high_ISR2(void); 43 | void low_ISR2(void); 44 | 45 | //------------------------------------------------------------- 46 | // -- Interrupt stuff - RB0 / RB1 47 | #pragma code HIGH_INTERRUPT_VECTOR = 0x8 48 | void high_ISR(void) 49 | { 50 | _asm 51 | goto high_ISR2 52 | _endasm 53 | } 54 | #pragma code 55 | 56 | #pragma interrupt high_ISR2 57 | void high_ISR2(void){ 58 | 59 | if(INTCONbits.INT0IF == 1){ // 1PSS Interrupt (RB0) 60 | 61 | PORTBbits.RB2 = 0; 62 | Timer1_read = ReadTimer1(); 63 | WriteTimer1( 65536 - Timer1_wait[0] ); 64 | 65 | PPS_total_time = ReadTimer0(); 66 | WriteTimer0(0); 67 | PIE1bits.TMR1IE = 1; 68 | PIR1bits.TMR1IF = 0; 69 | 70 | Clock1 = 0; 71 | 72 | UpdateTime(); 73 | 74 | INTCONbits.INT0IF = 0; // Clear interrupt 75 | } 76 | else if(INTCON3bits.INT1IF == 1){ // Time Stamp Interrupt (RB1) 77 | 78 | RB0_time = ReadTimer0(); 79 | RB0_secs = seconds; 80 | RB0_flag = 1; 81 | 82 | INTCON3bits.INT1IF = 0; // Clear interrupt 83 | } 84 | else if(PIR1bits.TMR1IF == 1){ // TIMER1 Interrupt 85 | 86 | PORTBbits.RB2 = !PORTBbits.RB2; 87 | WriteTimer1( 65536 - Timer1_wait[Clock1 + 1] ); 88 | 89 | if(Clock1 >= ((Freq1*2)-2) ){ 90 | PIE1bits.TMR1IE = 0; // Disable TMR1 after correct 91 | } // number of cycles 92 | Clock1++; 93 | 94 | PIR1bits.TMR1IF = 0; // Clear interrupt 95 | } 96 | } 97 | 98 | //-------------------------------------------------------- 99 | // -- Low priority interrupt vector 100 | #pragma code LOW_INTERRUPT_VECTOR = 0x18 101 | void low_ISR(void){ 102 | _asm 103 | goto low_ISR2 104 | _endasm 105 | } 106 | #pragma code 107 | 108 | #pragma interruptlow low_ISR2 109 | void low_ISR2(void){ 110 | 111 | } 112 | 113 | //------------------------------------------------------------- 114 | // -- Updates system time 115 | void UpdateTime(void){ 116 | 117 | seconds++; 118 | if(seconds >= 60){ 119 | minutes++; 120 | seconds = 0;} 121 | if(minutes >= 60){ 122 | hours++; 123 | minutes = 0;} 124 | if(hours >= 24){ 125 | days++; 126 | hours = 0;} 127 | 128 | if (months == 1 && days >= 31){ // Jan 129 | months++; 130 | days = 1; 131 | } 132 | else if (months == 2 && days >= 28 && years%4 != 0){ // Feb (Normal) 133 | months++; 134 | days = 1; 135 | } 136 | else if (months == 2 && days >= 29 && years%4 == 0){ // Feb (Leap) 137 | months++; 138 | days = 1; 139 | } 140 | else if (months == 3 && days >= 31){ // March 141 | months++; 142 | days = 1; 143 | } 144 | else if (months == 4 && days >= 30){ // April 145 | months++; 146 | days = 1; 147 | } 148 | else if (months == 5 && days >= 31){ // May 149 | months++; 150 | days = 1; 151 | } 152 | else if (months == 6 && days >= 30){ // June 153 | months++; 154 | days = 1; 155 | } 156 | else if (months == 7 && days >= 31){ // July 157 | months++; 158 | days = 1; 159 | } 160 | else if (months == 8 && days >= 31){ // Aug 161 | months++; 162 | days = 1; 163 | } 164 | else if (months == 9 && days >= 30){ // Sept 165 | months++; 166 | days = 1; 167 | } 168 | else if (months == 10 && days >= 31){ // Oct 169 | months++; 170 | days = 1; 171 | } 172 | else if (months == 11 && days >= 30){ // Nov 173 | months++; 174 | days = 1; 175 | } 176 | else if (months >= 12 && days >= 31){ // Dec 177 | years++; 178 | months = 1; 179 | days = 1; 180 | } 181 | 182 | } 183 | 184 | //----------------------------------------------------- 185 | // PLL Speed 186 | // 187 | void PLL_speed(void){ 188 | 189 | Freq1_old = Freq1; 190 | 191 | if(PORTBbits.RB4 == 1 && PORTBbits.RB5 == 0){ 192 | Freq1 = 25; 193 | } 194 | else if(PORTBbits.RB4 == 0 && PORTBbits.RB5 == 1){ 195 | Freq1 = 50; 196 | } 197 | else if(PORTBbits.RB4 == 1 && PORTBbits.RB5 == 1){ 198 | Freq1 = 10; 199 | } 200 | else{ 201 | Freq1 = 10; 202 | } 203 | 204 | if(Freq1 != Freq1_old){ 205 | 206 | Multiplier = (float) 128 / ( (float) 4 * (float) (Freq1 * 2) ); 207 | Timer1_ideal = (unsigned int) ((float) 31250 * Multiplier ); //PPS_total_time (ideal) * Multiplier 208 | Timer1_scale = Timer1_ideal - PLL_coarse_adjust; 209 | } 210 | 211 | Timer1_bound = Freq1; 212 | Timer1_corrected = Timer1_read - 80; 213 | 214 | 215 | if( Timer1_corrected > 65535 - Timer1_bound ){ // Decrease slightly 216 | PLL_adjust--; 217 | PLL_coarse_adjust = Timer1_ideal - Timer1_scale; 218 | PLL_fuzzy_event = -10;} 219 | else if( Timer1_corrected > 60000 ){ // Decrease greatly 220 | Timer1_scale = Timer1_scale - 1; 221 | PLL_fuzzy_event = -100;} 222 | 223 | else if( Timer1_corrected < 0 + Timer1_bound ){ // Increase slightly 224 | PLL_adjust++; 225 | PLL_coarse_adjust = Timer1_ideal - Timer1_scale; 226 | PLL_fuzzy_event = 10;} 227 | else if( Timer1_corrected < 10000 ){ // Increase greatly 228 | Timer1_scale = Timer1_scale + 1; 229 | PLL_fuzzy_event = 100;} 230 | 231 | PLL_adjsgn = PLL_adjust / fabs(PLL_adjust); // Find the sign of the corrections 232 | PLL_freq = (float) Freq1 * 2; // Number of transitions 233 | PLL_space0 = fabs(PLL_adjust) / PLL_freq; // Spacing of adjustments (1st Adjustment) 234 | PLL_space1 = 0; // PLL_space1 (n) is to PLL_space0 (n-1) 235 | 236 | PLL_i = 0; 237 | 238 | while(PLL_i < PLL_freq){ 239 | 240 | PLL_space1 = PLL_space0 + fabs(PLL_adjust) / PLL_freq; 241 | 242 | if( (int)PLL_space1 > (int)PLL_space0 ){ Timer1_wait[PLL_i] = Timer1_scale + PLL_adjsgn; } 243 | else{ Timer1_wait[PLL_i] = Timer1_scale; } 244 | 245 | PLL_space0 = PLL_space1; 246 | PLL_i++; 247 | } 248 | 249 | } 250 | 251 | /* END OF FILE */ -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.c: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////// 2 | // Source for Nova Robotics GPS Clock (with PPL) // 3 | // Version 5.0 - For 18F252 Device // 4 | // 30/06/2010 // 5 | ////////////////////////////////////////////////////////////// 6 | // 7 | // Global Variables 8 | // 9 | unsigned int PPS_initial_time = 0; 10 | unsigned int PPS_total_time = 0; 11 | unsigned int PPS_high_time = 0; 12 | int years = 0; 13 | int months = 0; 14 | int days = 0; 15 | int hours = 0; 16 | int minutes = 0; 17 | int seconds = 0; 18 | int lock = 0; 19 | int lock_hour = 0; 20 | int lock_mins = 0; 21 | int timecheck = 0; 22 | 23 | //$GPRMC,040302.663,A,3939.7123,N,10506.6123,W,0.27,358.86,200804,,*1A 24 | char position[] = " "; 25 | 26 | // Header Files 27 | // 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include "dml_common.c" // David's useful functions 38 | #include "gps_232.c" // Reads the GPRMC line of NMEA 39 | #include "pps_time.c" // Accurate 1PPS time keeping 40 | 41 | // Pre-processor Instructions 42 | // 43 | #pragma config OSC = HSPLL // - set HS oscillator 44 | #pragma config WDT = OFF, WDTPS = 128 // - enable watchdog timer 45 | #pragma config LVP = OFF // - disable low voltage programming 46 | #pragma config DEBUG = ON // - enable background debugging 47 | 48 | // Function Prototypes 49 | // 50 | void setup(void); 51 | void bootup(void); 52 | void time_stamp(void); 53 | void read_time(void); 54 | void num2txt(long, long); 55 | 56 | //------------------------------------------------------------- 57 | // -- Setup 58 | void setup(void){ 59 | 60 | ADCON1 = 0b00001110; // Set PORTA 1.2.3 for LCD IO 61 | 62 | Delay10TCYx( 5 ); // Wait a moment 63 | //76543210 64 | TRISA = 0b11110011; // Port A IO 65 | TRISB = 0b11110011; // Port B IO 66 | TRISC = 0b11001111; // Port C IO 67 | 68 | OpenTimer0(TIMER_INT_OFF & // Open Timer0 69 | T0_16BIT & 70 | T0_SOURCE_INT & 71 | T0_PS_1_128); 72 | 73 | OpenTimer1(TIMER_INT_ON & // Open Timer1 74 | T1_16BIT_RW & 75 | T1_SOURCE_INT & 76 | T1_PS_1_4); 77 | 78 | OpenUSART (USART_TX_INT_OFF & // Open the USART 79 | USART_RX_INT_OFF & 80 | USART_ASYNCH_MODE & 81 | USART_EIGHT_BIT & // Configured as 8N1, in polled mode 82 | USART_CONT_RX & 83 | USART_BRGH_HIGH, 207); // 4800 Baud (using clock multiplier)*/ 84 | 85 | OpenRB0INT (PORTB_CHANGE_INT_ON & // Enable the RB0/INT0 interrupt 86 | PORTB_PULLUPS_ON & // Configure the RB0 pin for input 87 | RISING_EDGE_INT); // Trigger interrupt upon falling edge 88 | 89 | OpenRB1INT (PORTB_CHANGE_INT_ON & // Enable the RB0/INT0 interrupt 90 | PORTB_PULLUPS_ON & // Configure the RB0 pin for input 91 | RISING_EDGE_INT); // Trigger interrupt upon falling edge 92 | 93 | RCONbits.IPEN = 0; // Enable interrupt priority 94 | IPR1bits.RCIP = 0; // Make receive interrupt low priority 95 | IPR1bits.TMR1IP = 1; // Set to low priority Interrupt 96 | INTCONbits.GIEH = 1; // Enable all high priority interrupts 97 | INTCONbits.GIEL = 1; // Enable all low priority interrupts 98 | } 99 | 100 | // ************* MAIN ************* 101 | // 102 | void main(void){ 103 | 104 | int i = 0; 105 | 106 | Delay10KTCYx(100); 107 | setup(); 108 | 109 | INTCONbits.GIEH = 0; // INTERRUPTS 110 | INTCONbits.GIEL = 0; // OFF 111 | 112 | PORTAbits.RA2 = 0; 113 | PORTAbits.RA3 = 1; 114 | PORTAbits.RA4 = 1; 115 | 116 | bootup(); 117 | 118 | PLL_speed(); // Check required PLL speed 119 | 120 | WriteTimer1(0); 121 | 122 | INTCONbits.GIEH = 1; // INTERRUPTS 123 | INTCONbits.GIEL = 1; // ON 124 | 125 | while(1){ 126 | 127 | if( seconds == 0 && timecheck == 0 ){ // Check the GPS receiver's time once a minute 128 | read_time(); 129 | timecheck = 1; 130 | } 131 | else if( seconds >= 1 && timecheck == 1 ){ 132 | timecheck = 0; 133 | } 134 | 135 | if( Clock1 == 0 && Tick1 == 0){ // Output a 'tick' to the RS232 port 136 | if(lock == 1){ putrsUSART((const far rom char *)"*"); } 137 | else{ putrsUSART((const far rom char *)"-"); } 138 | PORTAbits.RA3 = seconds%2; // Toggle RD6 to indicate 1PPS transition 139 | Tick1 = 1; 140 | 141 | PLL_speed(); // Check required PLL speed 142 | } 143 | else if( Clock1 != 0 ){ 144 | Tick1 = 0; 145 | } 146 | 147 | if( RB0_flag == 1 ){ // Service the request for a time stamp 148 | time_stamp(); 149 | } 150 | 151 | } 152 | } 153 | 154 | //----------------------------------------------------- 155 | // TIME STAMP 156 | // 157 | void time_stamp(void){ 158 | 159 | char temp_txt[] = " "; 160 | int i = 0; 161 | int j = 0; 162 | 163 | // $CLOCK,,
,,,,,* 164 | 165 | RB0_time = (int) (1000 * (float) RB0_time / (float) PPS_total_time); 166 | 167 | putrsUSART((const far rom char *)"\n\r$CLOCK,"); 168 | num2txt( hours,2 ); 169 | putrsUSART((const far rom char *)":"); 170 | num2txt( minutes,2 ); 171 | putrsUSART((const far rom char *)":"); 172 | num2txt( RB0_secs,2 ); 173 | putrsUSART((const far rom char *)"."); 174 | num2txt( RB0_time,3 ); 175 | putrsUSART((const far rom char *)","); 176 | num2txt( days,2 ); 177 | putrsUSART((const far rom char *)"/"); 178 | num2txt( months,2 ); 179 | putrsUSART((const far rom char *)"/"); 180 | num2txt( years,2 ); 181 | putrsUSART((const far rom char *)","); 182 | 183 | if(lock == 1){ 184 | putrsUSART((const far rom char *)"A"); 185 | } 186 | else{ 187 | putrsUSART((const far rom char *)"V"); 188 | } 189 | putrsUSART((const far rom char *)","); 190 | num2txt( Freq1,2 ); 191 | putrsUSART((const far rom char *)","); 192 | 193 | i = 0; 194 | j = 0; 195 | while( j == 0 ){ 196 | 197 | if(position[i] == 'E' || position[i] == 'W'){ 198 | j = 1; 199 | } 200 | putcUSART( position[i] ); 201 | while( BusyUSART() ); 202 | i++; 203 | } 204 | putrsUSART((const far rom char *)","); 205 | num2txt( lock_hour,2 ); 206 | putrsUSART((const far rom char *)":"); 207 | num2txt( lock_mins,2 ); 208 | putrsUSART((const far rom char *)"*"); 209 | 210 | RB0_flag = 0; 211 | } 212 | 213 | //----------------------------------------------------- 214 | // READ TIME 215 | // 216 | void read_time(void){ 217 | 218 | read_gps(); // is received, and time can be assumed valid. 219 | seconds = seconds - 1; // Time seems to be 1 second ahead of UTC without this correction 220 | PORTAbits.RA2 = lock; // Indicate lock on RD7 221 | } 222 | 223 | //------------------------------------------------------------- 224 | // -- BOOT UP 225 | void bootup(void){ 226 | 227 | putrsUSART((const far rom char *)"\n\r"); 228 | //0123456789012345678901234567890123456789 229 | putrsUSART((const far rom char *)"\n\r****************************************"); 230 | putrsUSART((const far rom char *)"\n\r*** NOVA ROBOTICS - GPS CLOCK - V5.0 ***"); 231 | putrsUSART((const far rom char *)"\n\r****************************************"); 232 | putrsUSART((const far rom char *)"\n\r"); 233 | putrsUSART((const far rom char *)"\n\rSystem Has Booted"); 234 | putrsUSART((const far rom char *)"\n\r"); 235 | putrsUSART((const far rom char *)"\n\r> Waiting for satellite lock"); 236 | 237 | lock = 0; 238 | while(lock == 0){ // Run the Read_GPSlock fucntion until a satellite fix 239 | read_gps(); // is received, and time can be assumed valid. 240 | } 241 | 242 | putrsUSART((const far rom char *)"\n\r> Satellite lock established"); 243 | putrsUSART((const far rom char *)"\n\r> Calibrating to 1PPS reference"); 244 | 245 | while( PORTBbits.RB0 == 1 ); 246 | while( PORTBbits.RB0 == 0 ); 247 | WriteTimer0(0); 248 | while( PORTBbits.RB0 == 1 ); 249 | PPS_high_time = ReadTimer0(); // Duration of the '1' in the 1PPS 250 | while( PORTBbits.RB0 == 0 ); 251 | PPS_total_time = ReadTimer0(); // Total period of the 1PPS 252 | PPS_initial_time = ReadTimer0(); // Total period of the 1PPS 253 | 254 | putrsUSART((const far rom char *)"\n\r>> PPS_total_time "); 255 | num2txt(PPS_total_time,5); 256 | putrsUSART((const far rom char *)"\n\r>> PPS_high_time "); 257 | num2txt(PPS_high_time,5); 258 | 259 | putrsUSART((const far rom char *)"\n\r> Reading NMEA Format Time "); 260 | 261 | read_time(); 262 | 263 | putrsUSART((const far rom char *)"\n\r"); 264 | putrsUSART((const far rom char *)"\n\r*****************************"); 265 | putrsUSART((const far rom char *)"\n\r*** "); 266 | num2txt(hours,2); 267 | putrsUSART((const far rom char *)":"); 268 | num2txt(minutes,2); 269 | putrsUSART((const far rom char *)":"); 270 | num2txt(seconds,2); 271 | putrsUSART((const far rom char *)" - "); 272 | num2txt(days,2); 273 | putrsUSART((const far rom char *)"/"); 274 | num2txt(months,2); 275 | putrsUSART((const far rom char *)"/20"); 276 | num2txt(years,2); 277 | putrsUSART((const far rom char *)" ***"); 278 | putrsUSART((const far rom char *)"\n\r*****************************"); 279 | putrsUSART((const far rom char *)"\n\r"); 280 | 281 | } 282 | 283 | // ********* END OF FILE ********** 284 | 285 | 286 | 287 | 288 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.cof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/01_PIC_MC_V5P1/testbenh.cof -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.hex: -------------------------------------------------------------------------------- 1 | :020000040000FA 2 | :0600000070EF16F0120083 3 | :06000800A8EF04F0120055 4 | :060018007BEF05F0120071 5 | :06002A000200902D000011 6 | :100030008000000069000000402D0000000F00005B 7 | :04004000500000006C 8 | :0C004400D9CFE6FFDACFE6FFE1CFD9FF0D 9 | :10005000E2CFDAFF160EE12402E3E168E652E16E38 10 | :10006000FA0EDBCF07F0FB0EDBCF08F0FC0EDBCF88 11 | :1000700009F0FD0EDBCF0AF00A34000E0A1809E67B 12 | :10008000D8807F0E0754960E0854980E0954000E1F 13 | :100090000A5411E27F0EF36EFA0EF3CFDBFF960ED9 14 | :1000A000F36EFB0EF3CFDBFF980EF36EFC0EF3CF77 15 | :1000B000DBFFFD0EDB6AD950FA0FE96EFF0EDA2086 16 | :1000C000EA6ED890030EEB50000A08E6000EEE5CD4 17 | :1000D000000EEE58000EEE58000EEE5808E2FA0E32 18 | :1000E000DB6AFB0EDB6AFC0EDB6AFD0EDB6A140EBC 19 | :1000F000DB6A150EDB6A140EDBCF14F0150EDBCFB6 20 | :1001000015F0166A176A15AE02D016681768F60E53 21 | :10011000DBCF07F0F70EDBCF08F0F80EDBCF09F0EE 22 | :10012000F90EDBCF0AF017500A18E8AE02D00A34F5 23 | :1001300008D00750145C08501558095016580A503A 24 | :10014000175861E2FA0EDBCF16F0FB0EDBCF17F08B 25 | :10015000FC0EDBCF18F0FD0EDBCF19F00A0E0B6E94 26 | :100160000C6A0D6A0E6A16C006F017C007F018C0B8 27 | :1001700008F019C009F0E2EC11F002C016F003C05B 28 | :1001800017F004C018F005C019F0D9CF14F0DACF79 29 | :1001900015F0020E086E096A140EDBCF0DF0150E75 30 | :1001A000DBCF0EF016EC12F014500624E96E155059 31 | :1001B0000720EA6E16C0EEFF17C0EDFFFA0EDBCF88 32 | :1001C00006F0FB0EDBCF07F0FC0EDBCF08F0FD0ED8 33 | :1001D000DBCF09F00A0E0B6E0C6A0D6A0E6AE2ECB8 34 | :1001E00011F0FA0E06C0DBFFFB0E07C0DBFFFC0EB2 35 | :1001F00008C0DBFFFD0E09C0DBFF140EDB2A150E65 36 | :1002000001E3DB2A78D7140EDB6A150EDB6A140EC5 37 | :10021000DBCF14F0150EDBCF15F0166A176A15AE9A 38 | :1002200002D016681768F60EDBCF07F0F70EDBCFAB 39 | :1002300008F0F80EDBCF09F0F90EDBCF0AF017500B 40 | :100240000A18E8AE02D00A3408D00750145C0850EF 41 | :100250001558095016580A5017584EE2ACA2FED74E 42 | :10026000D9CF16F0DACF17F0F60EDBCF1CF0F70E71 43 | :10027000DBCF1DF0F80EDBCF1EF0F90EDBCF1FF049 44 | :100280001C06000E1D5A1E5A1F5A140EDBCF20F0FA 45 | :10029000150EDBCF21F0226A236A21AE02D022683C 46 | :1002A000236820501C5C186E21501D58196E225076 47 | :1002B0001E581A6E23501F581B6E020E086E096AD4 48 | :1002C00018C00DF019C00EF016EC12F016500624EE 49 | :1002D000E96E17500720EA6EEECF14F0EFCF15F05D 50 | :1002E000300E1424E66E43EC16F0E552140EDB2AB1 51 | :1002F000150E01E3DB2A8BD7160EE15C02E2E16A00 52 | :10030000E552E16EE552E5CFDAFFE7CFD9FF120003 53 | :10031000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFFB0 54 | :10032000E652E652E652E652E652DE6ADD6A020E16 55 | :10033000DB6A030EDB6A040EDB6AD950020FE96E3A 56 | :10034000000EDA20EA6EEE50ED1001E08BD0ABA289 57 | :1003500002D0AB98AB88D9CFE9FFDACFEAFFEE50F5 58 | :10036000ED100FE19EAAFED77BEC15F0E76E040EB0 59 | :10037000E7CFDBFFDB50240803E1010EDE6EDD6A10 60 | :10038000EAD7ABA202D0AB98AB88DE6ADD6ADECFDB 61 | :1003900014F0DDCF15F0D890155004E6500E145C23 62 | :1003A000000E155846E29EAAFED77BEC15F0E66ECD 63 | :1003B000DECFE9FFDDCFEAFF000EE9260F0EEA22CD 64 | :1003C000E552E750EF6ED9CFE9FFDACFEAFF040E2E 65 | :1003D000EE1801E1ED500FE1430E0F01045D01E164 66 | :1003E0000AD0DECFE9FFDDCFEAFF000EE9260F0ECF 67 | :1003F000EA222A0EEF6EDECFE9FFDDCFEAFF000E24 68 | :10040000E9260F0EEA22EF502A0803E1510EDE6EB4 69 | :10041000DD6ADF2A010E01E3DB2AD9CFE9FFDACF5B 70 | :10042000EAFF500EEE1801E1ED5002E1DE6ADD6AEE 71 | :10043000AED7470E0F01005D14E1500E015D11E1D2 72 | :10044000520E025D0EE14D0E035D0BE1430E045DA5 73 | :1004500008E1010EF36E020EF3CFDBFF030EDB6A41 74 | :100460000DD86BD7050EE15C02E2E16AE552E16E60 75 | :10047000E552E5CFDAFFE7CFD9FF1200D9CFE6FF8B 76 | :10048000DACFE6FFE1CFD9FFE2CFDAFF160EE124A3 77 | :1004900002E3E168E652E16EDE6ADD6A020EDB6AC3 78 | :1004A000030EDB6A040EDB6A050EDB6A300EF36EA8 79 | :1004B000060EF3CFDBFFD950070FE96E000EDA20EE 80 | :1004C000EA6E200EEE6EEE6EEE6EEE6EEE6EEE6E7E 81 | :1004D000EE6EEE6EEE6EEE6EEE6A120EDB6A130ECE 82 | :1004E000DB6A140EDB6A150EDB6A060EDB502A0887 83 | :1004F00001E122D2040EDBCF14F0050EDBCF15F0A4 84 | :1005000014C0E6FF15C0E6FF000EE66E0F0EE66EA5 85 | :100510007EEC16F0E552E552E552E7CF15F0E552D4 86 | :10052000E7CF14F0F3CF16F0F4CF17F01450165CA9 87 | :100530001550175801E200D2040EDBCFE9FF050E7B 88 | :10054000DBCFEAFF000EE9260F0EEA22060EEFCF00 89 | :10055000DBFFDB502C0809E1DF2A010E01E3DB2A77 90 | :10056000020EDB6A030EDB6AE1D1D9CFE9FFDACFF5 91 | :10057000EAFF010EEE1801E1ED5001E093D0D950F1 92 | :10058000020FE96E000EDA20EA6EEE50ED1001E087 93 | :1005900089D0010EE76E040EDBCFE9FF050EDBCF3D 94 | :1005A000EAFFE750E926000EEA22000EE9260F0EC8 95 | :1005B000EA22EF50D00F146E040EDBCFE9FF050ED8 96 | :1005C000DBCFEAFF000EE9260F0EEA22EF50D00F34 97 | :1005D0000A0DF350142400018C6F8D6B800B01E029 98 | :1005E0008D69030EE76E040EDBCFE9FF050EDBCF4E 99 | :1005F000EAFFE750E926000EEA22000EE9260F0E78 100 | :10060000EA22EF50D00F146E020EE76E040EDBCF1D 101 | :10061000E9FF050EDBCFEAFFE750E926000EEA22EC 102 | :10062000000EE9260F0EEA22EF50D00F0A0DF3500C 103 | :1006300014248E6F8F6B800B01E08F69050EE76EBF 104 | :10064000040EDBCFE9FF050EDBCFEAFFE750E9261A 105 | :10065000000EEA22000EE9260F0EEA22EF50D00F1C 106 | :10066000146E040EE76EDBCFE9FF050EDBCFEAFF69 107 | :10067000E750E926000EEA22000EE9260F0EEA22D4 108 | :10068000EF50D00F0A0DF3501424906F916B800B34 109 | :1006900001E09169010EF36E020EF3CFDBFF030E52 110 | :1006A000DB6A44D1D9CFE9FFDACFEAFF020EEE18B8 111 | :1006B00001E1ED502EE1D950020FE96E000EDA2073 112 | :1006C000EA6EEE50ED1025E1040EDBCFE9FF050EDA 113 | :1006D000DBCFEAFF000EE9260F0EEA22EF504108B9 114 | :1006E0000DE1010E0001926F936B8CC094F08DC0F0 115 | :1006F00095F08EC096F08FC097F003D00001926BFA 116 | :10070000936B010EF36E020EF3CFDBFF030EDB6A79 117 | :100710000DD1D9CFE9FFDACFEAFF030EEE1801E1E0 118 | :10072000ED5068E1D950020FE96E000EDA20EA6E52 119 | :10073000EE50ED105FE1120EDB6A130EDB6A140E51 120 | :10074000DB6A150EDB6A140EDBCF14F0150EDBCF5F 121 | :1007500015F0D890155004E6040E145C000E1558E0 122 | :1007600041E2120EDBCF14F0130EDBCF15F0040EB6 123 | :10077000DB501424E96E050EDB501520EA6E000EE6 124 | :10078000E9260F0EEA22EF502C0805E1140EDB2AB1 125 | :10079000150E01E3DB2A120EDBCF14F0130EDBCFB4 126 | :1007A00015F0040EDB501424E96E050EDB50152005 127 | :1007B000EA6E000EE9260F0EEA22EF50E66E120EE8 128 | :1007C000DBCFE9FF130EDBCFEAFF9A0EE926000E1E 129 | :1007D000EA22E552E750EF6E120EDB2A130E01E318 130 | :1007E000DB2AB1D7010EF36E020EF3CFDBFF030E4F 131 | :1007F000DB6A9CD0D9CFE9FFDACFEAFF090EEE1809 132 | :1008000001E1ED5001E092D0D950020FE96E000EE7 133 | :10081000DA20EA6EEE50ED1001E088D0010EE76EAE 134 | :10082000040EDBCFE9FF050EDBCFEAFFE750E92638 135 | :10083000000EEA22000EE9260F0EEA22EF50D00F3A 136 | :10084000146E040EDBCFE9FF050EDBCFEAFF000ECE 137 | :10085000E9260F0EEA22EF50D00F0A0DF3501424B0 138 | :1008600000018A6F8B6B800B01E08B69030EE76ED2 139 | :10087000040EDBCFE9FF050EDBCFEAFFE750E926E8 140 | :10088000000EEA22000EE9260F0EEA22EF50D00FEA 141 | :10089000146E020EE76E040EDBCFE9FF050EDBCF10 142 | :1008A000EAFFE750E926000EEA22000EE9260F0EC5 143 | :1008B000EA22EF50D00F0A0DF3501424886F896B91 144 | :1008C000800B01E08969050EE76E040EDBCFE9FFBE 145 | :1008D000050EDBCFEAFFE750E926000EEA22000E04 146 | :1008E000E9260F0EEA22EF50D00F146E040EE76EC9 147 | :1008F000DBCFE9FF050EDBCFEAFFE750E926000E6C 148 | :10090000EA22000EE9260F0EEA22EF50D00F0A0D60 149 | :10091000F3501424866F876B800B01E08769010E0A 150 | :10092000F36E020EF3CFDBFF030EDB6A040EDB2A4D 151 | :10093000050E01E3DB2AD9D5160EE15C02E2E16A7D 152 | :10094000E552E16EE552E5CFDAFFE7CFD9FF1200BD 153 | :10095000E9CFE4FFEACFE4FFF6CFE4FFF7CFE4FF0F 154 | :10096000F5CFE4FFF3CFE4FFF4CFE4FFFACFE4FFE9 155 | :1009700000EE00F0140EE80403E3EECFE4FFFBD733 156 | :1009800000EE14F0120EE80403E3EECFE4FFFBD711 157 | :10099000E652F2A236D081949AEC15F0F3CFB7F07C 158 | :1009A000F4CFB8F0296A2A6A010E2B6E00C12CF030 159 | :1009B00001C12DF02E6A2C50295C266E2D502A582C 160 | :1009C000276E2E502B58286E26C0E6FF27C0E6FF64 161 | :1009D000D8EC15F0E552E552B9EC15F0F3CF82F002 162 | :1009E000F4CF83F0000EE66EE66AF4EC15F0E55203 163 | :1009F000E5529D809E900001DB6BDC6B89D8F29202 164 | :100A000058D0F0A010D0B9EC15F0F3CFE3F0F4CF4C 165 | :100A1000E4F090C0E7F091C0E8F0010E0001E56F4E 166 | :100A2000E66BF09046D09EA044D08174296A2A6A71 167 | :100A3000010E2B6E0001EA6ADB25E96EDC51EA2229 168 | :100A4000D890E936EA36000EE926010EEA22EECF0A 169 | :100A50002CF0EFCF2DF02E6A2C50295C266E2D50F5 170 | :100A60002A58276E2E502B58286E26C0E6FF27C026 171 | :100A7000E6FFD8EC15F0E552E552D7C026F0D8C015 172 | :100A800027F0D89026362736020E265E000E275A0B 173 | :100A90000001DC512718E8AE02D0273404D02650DC 174 | :100AA000DB5D2750DC5901E39D90DB2B000EDC233E 175 | :100AB0009E90E55200EE25F0120EE80403E3E5CF28 176 | :100AC000EDFFFBD700EE13F0140EE80403E3E5CFCF 177 | :100AD000EDFFFBD7E5CFFAFFE5CFF4FFE5CFF3FF5E 178 | :100AE000E5CFF5FFE5CFF7FFE5CFF6FFE5CFEAFF6E 179 | :100AF000E5CFE9FF1100D8CFE4FFE0CFE4FFE46EDB 180 | :100B0000E652E552E550E5CFE0FFE5CFD8FF100013 181 | :100B10000001902B000E91233C0E91AF02D0D89093 182 | :100B200003D0905D000E915905E38E2B000E8F23AC 183 | :100B3000906B916B3C0E8FAF02D0D89003D08E5D3E 184 | :100B4000000E8F5905E38C2B000E8D238E6B8F6B5F 185 | :100B5000180E8DAF02D0D89003D08C5D000E8D5949 186 | :100B600005E38A2B000E8B238C6B8D6B010E88198D 187 | :100B700001E1895110E11F0E8BAF02D0D89003D054 188 | :100B80008A5D000E8B5907E3882B000E8923010E26 189 | :100B90008A6F8B6B2DD1020E881901E1895125E1F5 190 | :100BA0001C0E8BAF02D0D89003D08A5D000E8B59FB 191 | :100BB0001CE386C014F087C015F0040E0D6E0E6A9B 192 | :100BC00014C008F015C009F0BCEC11F004C014F01A 193 | :100BD00005C015F01450151008E00001882B000E18 194 | :100BE0008923010E8A6F8B6B03D10001020E8819D5 195 | :100BF00001E1895125E11D0E8BAF02D0D89003D0C1 196 | :100C00008A5D000E8B591CE386C014F087C015F076 197 | :100C1000040E0D6E0E6A14C008F015C009F0BCEC8D 198 | :100C200011F004C014F005C015F01450151008E1BF 199 | :100C30000001882B000E8923010E8A6F8B6BD8D0A0 200 | :100C40000001030E881901E1895110E11F0E8BAFDD 201 | :100C500002D0D89003D08A5D000E8B5907E3882B11 202 | :100C6000000E8923010E8A6F8B6BC2D0040E881987 203 | :100C700001E1895110E11E0E8BAF02D0D89003D054 204 | :100C80008A5D000E8B5907E3882B000E8923010E25 205 | :100C90008A6F8B6BADD0050E881901E1895110E187 206 | :100CA0001F0E8BAF02D0D89003D08A5D000E8B59F7 207 | :100CB00007E3882B000E8923010E8A6F8B6B98D077 208 | :100CC000060E881901E1895110E11E0E8BAF02D08A 209 | :100CD000D89003D08A5D000E8B5907E3882B000E55 210 | :100CE0008923010E8A6F8B6B83D0070E881901E16F 211 | :100CF000895110E11F0E8BAF02D0D89003D08A5DCE 212 | :100D0000000E8B5907E3882B000E8923010E8A6F92 213 | :100D10008B6B6ED0080E881901E1895110E11F0E0E 214 | :100D20008BAF02D0D89003D08A5D000E8B5907E3B9 215 | :100D3000882B000E8923010E8A6F8B6B59D0090E08 216 | :100D4000881901E1895110E11E0E8BAF02D0D890B5 217 | :100D500003D08A5D000E8B5907E3882B000E892390 218 | :100D6000010E8A6F8B6B44D00A0E881901E18951FC 219 | :100D700010E11F0E8BAF02D0D89003D08A5D000E19 220 | :100D80008B5907E3882B000E8923010E8A6F8B6B2A 221 | :100D90002FD00B0E881901E1895110E11E0E8BAF87 222 | :100DA00002D0D89003D08A5D000E8B5907E3882BC0 223 | :100DB000000E8923010E8A6F8B6B1AD00C0E89AF3F 224 | :100DC00002D0D89003D0885D000E895911E31F0E20 225 | :100DD0008BAF02D0D89003D08A5D000E8B5908E308 226 | :100DE000862B000E8723010E886F896B8A6F8B6BB1 227 | :100DF0001200D7C0D9F0D8C0DAF08150100B08E04B 228 | :100E00008150200B05E1190E0001D76FD86B1AD065 229 | :100E10008150100B08E18150200B05E0320E0001DB 230 | :100E2000D76FD86B0FD08150100B08E08150200B8A 231 | :100E300005E00A0E0001D76FD86B04D00A0E00013E 232 | :100E4000D76FD86BD951D71902E1DA51D81901E11E 233 | :100E50007AD0146A156A166A430E176E1C6A1D6AE8 234 | :100E6000800E1E6E400E1F6ED7C024F0D8C025F035 235 | :100E7000D8902436253624C008F025C009F052EC5D 236 | :100E800010F007C020F008C021F009C022F00AC00D 237 | :100E900023F020C00CF021C00DF022C00EF023C0C2 238 | :100EA0000FF01CC007F01DC008F01EC009F01FC0E5 239 | :100EB0000AF04FEC11F007C018F008C019F009C093 240 | :100EC0001AF00AC01BF018C00CF019C00DF01AC0BF 241 | :100ED0000EF01BC00FF014C007F015C008F016C0CC 242 | :100EE00009F017C00AF0FCEC10F007C0DFF008C0F2 243 | :100EF000E0F009C0E1F00AC0E2F0146A240E156EB9 244 | :100F0000F40E166E460E176EDFC00CF0E0C00DF04A 245 | :100F1000E1C00EF0E2C00FF014C007F015C008F0F9 246 | :100F200016C009F017C00AF04FEC11F043EC12F0B4 247 | :100F300008C0B5F009C0B6F00001BD51B55DB36F92 248 | :100F4000BE51B659B46FD7C0B9F0D8C0BAF0B7C067 249 | :100F5000BBF0B8C0BCF0500EBB5F000EBC5BBBC0AA 250 | :100F600014F0BCC015F0166A1A681B681C6AB9C078 251 | :100F70001DF0BAC01EF01F6A1D501A5C176E1E507D 252 | :100F80001B58186E1F501C58196E19501618E8AED1 253 | :100F900002D0163406D01450175C1550185816504D 254 | :100FA000195823E2BFC007F0C0C008F0C1C009F063 255 | :100FB000C2C00AF00C6A0D6A800E0E6E3F0E0F6EF4 256 | :100FC00065EC10F007C0BFF008C0C0F009C0C1F068 257 | :100FD0000AC0C2F00001B351B55DBD6FB451B6593E 258 | :100FE000BE6FF60ED56FD6694FD0BBC014F0BCC033 259 | :100FF00015F0166A1634000E161807E6D880600E33 260 | :101000001454EA0E1554000E165408E2010EB35F94 261 | :10101000000EB45B9C0ED56FD66936D0B951BB5D5E 262 | :10102000BA51BC5923E2BFC007F0C0C008F0C1C02C 263 | :1010300009F0C2C00AF00C6A0D6A800E0E6E3F0EF7 264 | :101040000F6E66EC10F007C0BFF008C0C0F009C01A 265 | :10105000C1F00AC0C2F00001B351B55DBD6FB4511B 266 | :10106000B659BE6F0A0ED56FD66B0ED0100EBB5D93 267 | :10107000270EBC5909E2010EB325B36F000EB4214F 268 | :10108000B46F640ED56FD66BBFC0E6FFC0C0E6FF7D 269 | :10109000C1C0E6FFC2C0E6FF91EC14F0E552E55294 270 | :1010A000E552E55206C014F007C015F008C016F06E 271 | :1010B00009C017F014C00CF015C00DF016C00EF0EA 272 | :1010C00017C00FF0BFC007F0C0C008F0C1C009F0E2 273 | :1010D000C2C00AF0FCEC10F007C0C3F008C0C4F0B6 274 | :1010E00009C0C5F00AC0C6F0D7C008F0D8C009F0E2 275 | :1010F00052EC10F007C014F008C015F009C016F04B 276 | :101100000AC017F00C6A0D6A0E6A400E0F6E14C00A 277 | :1011100007F015C008F016C009F017C00AF04FEC30 278 | :1011200011F007C0C7F008C0C8F009C0C9F00AC074 279 | :10113000CAF0BFC0E6FFC0C0E6FFC1C0E6FFC2C044 280 | :10114000E6FF91EC14F0E552E552E552E55206C097 281 | :1011500014F007C015F008C016F009C017F0C7C09A 282 | :101160000CF0C8C00DF0C9C00EF0CAC00FF014C01A 283 | :1011700007F015C008F016C009F017C00AF0FCEC23 284 | :1011800010F007C0CFF008C0D0F009C0D1F00AC0FD 285 | :10119000D2F00001CB6BCC6BCD6BCE6BD36BD46B31 286 | :1011A000D3C008F0D4C009F052EC10F007C014F01E 287 | :1011B00008C015F009C016F00AC017F0C7C00CF03F 288 | :1011C000C8C00DF0C9C00EF0CAC00FF014C007F0BF 289 | :1011D00015C008F016C009F017C00AF072EC12F042 290 | :1011E000010A01E0C3D0BFC0E6FFC0C0E6FFC1C036 291 | :1011F000E6FFC2C0E6FF91EC14F0E552E552E5527D 292 | :10120000E55206C018F007C019F008C01AF009C06E 293 | :101210001BF0C7C00CF0C8C00DF0C9C00EF0CAC0AA 294 | :101220000FF018C007F019C008F01AC009F01BC071 295 | :101230000AF0FCEC10F007C014F008C015F009C06B 296 | :1012400016F00AC017F014C00CF015C00DF016C04F 297 | :101250000EF017C00FF0CFC007F0D0C008F0D1C01B 298 | :1012600009F0D2C00AF066EC10F007C0CBF008C05D 299 | :10127000CCF009C0CDF00AC0CEF0CBC007F0CCC096 300 | :1012800008F0CDC009F0CEC00AF043EC12F008C05F 301 | :1012900014F009C015F0CFC007F0D0C008F0D1C0DD 302 | :1012A00009F0D2C00AF043EC12F008C016F009C0F1 303 | :1012B00017F017501518E8AE02D0153404D01450AA 304 | :1012C000165C1550175836E2B3C008F0B4C009F0E8 305 | :1012D00050EC10F007C016F008C017F009C018F065 306 | :1012E0000AC019F0C3C00CF0C4C00DF0C5C00EF0A8 307 | :1012F000C6C00FF016C007F017C008F018C009F0FC 308 | :1013000019C00AF066EC10F043EC12F008C014F0BB 309 | :1013100009C015F0D3C0E9FFD4C0EAFFD890E93680 310 | :10132000EA36000EE926010EEA2214C0EEFF15C0CF 311 | :10133000EDFF0FD0D3C0E9FFD4C0EAFFD890E93663 312 | :10134000EA36000EE926010EEA22B3C0EEFFB4C071 313 | :10135000EDFFCBC0CFF0CCC0D0F0CDC0D1F0CEC02F 314 | :10136000D2F00001D32B000ED4231AD712000E0E98 315 | :10137000C16E050EE66E8CEC16F0E552F30E926E21 316 | :10138000936ECF0E946E160EE66E10EC16F0E552CC 317 | :10139000ED0EE66E1AEC15F0E552CF0EE66EE66A3B 318 | :1013A0003C0EE66E57EC14F0E552E552E552FE0EA7 319 | :1013B000E66E5BEC15F0E552FE0EE66E3BEC15F0CA 320 | :1013C000E552D09E9F9A9F80F28EF28C1200D9CF68 321 | :1013D000E6FFDACFE6FFE1CFD9FFE2CFDAFFE65250 322 | :1013E000E652DE6ADD6A640EE66E2CEC16F0E5521B 323 | :1013F000BEDFF29EF29C809480868088A4DBF9DCBC 324 | :10140000000EE66EE66AD8EC15F0E552E552F28E73 325 | :10141000F28C00019051911109E19851991106E166 326 | :1014200085DB010E0001986F996B10D0010E91AF12 327 | :1014300002D0D89003D0905D000E915907E3010EC1 328 | :10144000981901E1995102E1986B996BDB51DC111C 329 | :1014500045E1DD51DE1142E1010E921901E19351A6 330 | :1014600011E10C0E146E280E156E166A14C0E6FFFC 331 | :1014700015C0E6FF16C0E6FFC4EC14F0E552E552D5 332 | :10148000E55210D00A0E146E280E156E166A14C09E 333 | :10149000E6FF15C0E6FF16C0E6FFC4EC14F0E55207 334 | :1014A000E552E55290C014F091C015F0020E0D6E99 335 | :1014B0000E6A14C008F015C009F0BCEC11F004C0AD 336 | :1014C00014F005C015F01450E8B08086E8A08096AE 337 | :1014D000010E0001DD6FDE6B8CDC05D0DB51DC1111 338 | :1014E00002E0DD6BDE6B0001010EE51901E1E65162 339 | :1014F00001E109D88ED7E552E552E552E5CFDAFF92 340 | :10150000E7CFD9FF1200D9CFE6FFDACFE6FFE1CF70 341 | :10151000D9FFE2CFDAFF0F0EE12402E3E168E652E1 342 | :10152000E16ED9CFE9FFDACFEAFF200EEE6EEE6E64 343 | :10153000EE6EEE6EEE6EEE6EEE6EEE6EEE6EEE6ECB 344 | :10154000EE6A0B0EDB6A0C0EDB6A0D0EDB6A0E0E0A 345 | :10155000DB6A186A196A7A0E1A6E440E1B6EE3C0B3 346 | :1015600008F0E4C009F052EC10F007C01CF008C00D 347 | :101570001DF009C01EF00AC01FF01CC00CF01DC0F9 348 | :101580000DF01EC00EF01FC00FF018C007F019C0FC 349 | :1015900008F01AC009F01BC00AF04FEC11F007C0A8 350 | :1015A00014F008C015F009C016F00AC017F082C088 351 | :1015B00008F083C009F050EC10F007C020F008C01C 352 | :1015C00021F009C022F00AC023F020C00CF021C095 353 | :1015D0000DF022C00EF023C00FF014C007F015C0AC 354 | :1015E00008F016C009F017C00AF0FCEC10F043EC4C 355 | :1015F00012F008C0E3F009C0E4F0000E146E280EEB 356 | :10160000156E166A14C0E6FF15C0E6FF16C0E6FFA9 357 | :10161000C4EC14F0E552E552E552020EE66EE66ABD 358 | :10162000E66AE66A8CC014F08DC015F0166A176A77 359 | :1016300015AE02D01668176814C0E6FF15C0E6FFA5 360 | :1016400016C0E6FF17C0E6FF22EC00F0186E080E89 361 | :10165000E15C02E2E16AE552E16E1850FE0E146EA2 362 | :10166000270E156E166A14C0E6FF15C0E6FF16C0F9 363 | :10167000E6FFC4EC14F0E552E552E552020EE66EC8 364 | :10168000E66AE66AE66A8EC014F08FC015F0166A44 365 | :10169000176A15AE02D01668176814C0E6FF15C0A9 366 | :1016A000E6FF16C0E6FF17C0E6FF22EC00F0186E5A 367 | :1016B000080EE15C02E2E16AE552E16E1850FE0EAE 368 | :1016C000146E270E156E166A14C0E6FF15C0E6FFED 369 | :1016D00016C0E6FFC4EC14F0E552E552E552020EE6 370 | :1016E000E66EE66AE66AE66AE7C014F0E8C015F05E 371 | :1016F000166A176A15AE02D01668176814C0E6FF9E 372 | :1017000015C0E6FF16C0E6FF17C0E6FF22EC00F0AA 373 | :10171000186E080EE15C02E2E16AE552E16E1850D3 374 | :101720000E0E146E280E156E166A14C0E6FF15C054 375 | :10173000E6FF16C0E6FFC4EC14F0E552E552E552B0 376 | :10174000030EE66EE66AE66AE66AE3C014F0E4C0F9 377 | :1017500015F0166A176A15AE02D01668176814C01D 378 | :10176000E6FF15C0E6FF16C0E6FF17C0E6FF22EC55 379 | :1017700000F0186E080EE15C02E2E16AE552E16EEB 380 | :101780001850FC0E146E270E156E166A14C0E6FF74 381 | :1017900015C0E6FF16C0E6FFC4EC14F0E552E552B2 382 | :1017A000E552020EE66EE66AE66AE66A8AC014F060 383 | :1017B0008BC015F0166A176A15AE02D01668176846 384 | :1017C00014C0E6FF15C0E6FF16C0E6FF17C0E6FF2F 385 | :1017D00022EC00F0186E080EE15C02E2E16AE552CC 386 | :1017E000E16E1850FA0E146E270E156E166A14C0AC 387 | :1017F000E6FF15C0E6FF16C0E6FFC4EC14F0E552A4 388 | :10180000E552E552020EE66EE66AE66AE66A88C0CE 389 | :1018100014F089C015F0166A176A15AE02D0166862 390 | :10182000176814C0E6FF15C0E6FF16C0E6FF17C034 391 | :10183000E6FF22EC00F0186E080EE15C02E2E16ABD 392 | :10184000E552E16E1850FA0E146E270E156E166AE8 393 | :1018500014C0E6FF15C0E6FF16C0E6FFC4EC14F0A6 394 | :10186000E552E552E552020EE66EE66AE66AE66A7F 395 | :1018700086C014F087C015F0166A176A15AE02D03C 396 | :101880001668176814C0E6FF15C0E6FF16C0E6FF2D 397 | :1018900017C0E6FF22EC00F0186E080EE15C02E2D1 398 | :1018A000E16AE552E16E1850FC0E146E270E156EBB 399 | :1018B000166A14C0E6FF15C0E6FF16C0E6FFC4ECCA 400 | :1018C00014F0E552E552E5520001010E921901E1D2 401 | :1018D000935111E1F80E146E270E156E166A14C09E 402 | :1018E000E6FF15C0E6FF16C0E6FFC4EC14F0E552B3 403 | :1018F000E552E55210D0F60E146E270E156E166ADC 404 | :1019000014C0E6FF15C0E6FF16C0E6FFC4EC14F0F5 405 | :10191000E552E552E552FC0E146E270E156E166A5E 406 | :1019200014C0E6FF15C0E6FF16C0E6FFC4EC14F0D5 407 | :10193000E552E552E552020EE66EE66AE66AE66AAE 408 | :10194000D7C014F0D8C015F0166A176A15AE02D0C9 409 | :101950001668176814C0E6FF15C0E6FF16C0E6FF5C 410 | :1019600017C0E6FF22EC00F0186E080EE15C02E200 411 | :10197000E16AE552E16E1850FC0E146E270E156EEA 412 | :10198000166A14C0E6FF15C0E6FF16C0E6FFC4ECF9 413 | :1019900014F0E552E552E5520B0EDB6A0C0EDB6AE1 414 | :1019A0000D0EDB6A0E0EDB6AD9500D0FE96E000ECC 415 | :1019B000DA20EA6EEE50ED1038E10B0EDBCFE9FFD6 416 | :1019C0000C0EDBCFEAFF9A0EE926000EEA22EF505A 417 | :1019D00045080DE00B0EDBCFE9FF0C0EDBCFEAFF75 418 | :1019E0009A0EE926000EEA22EF50570807E1010E91 419 | :1019F000F36E0D0EF3CFDBFF0E0EDB6A0B0EDBCFAB 420 | :101A0000E9FF0C0EDBCFEAFF9A0EE926000EEA2270 421 | :101A1000EF50E66E43EC16F0E552ACA2FED70B0E8B 422 | :101A2000DB2A0C0E01E3DB2ABFD7FC0E146E270E57 423 | :101A3000156E166A14C0E6FF15C0E6FF16C0E6FF75 424 | :101A4000C4EC14F0E552E552E552020EE66EE66A89 425 | :101A5000E66AE66A94C014F095C015F0166A176A33 426 | :101A600015AE02D01668176814C0E6FF15C0E6FF71 427 | :101A700016C0E6FF17C0E6FF22EC00F0186E080E55 428 | :101A8000E15C02E2E16AE552E16E1850FE0E146E6E 429 | :101A9000270E156E166A14C0E6FF15C0E6FF16C0C5 430 | :101AA000E6FFC4EC14F0E552E552E552020EE66E94 431 | :101AB000E66AE66AE66A96C014F097C015F0166A00 432 | :101AC000176A15AE02D01668176814C0E6FF15C075 433 | :101AD000E6FF16C0E6FF17C0E6FF22EC00F0186E26 434 | :101AE000080EE15C02E2E16AE552E16E18500C0E6C 435 | :101AF000146E280E156E166A14C0E6FF15C0E6FFB8 436 | :101B000016C0E6FFC4EC14F0E552E552E5520001C0 437 | :101B1000E56BE66B0F0EE15C02E2E16AE552E16E15 438 | :101B2000E552E5CFDAFFE7CFD9FF120088EC01F0EC 439 | :101B30000001010E905F000E915B9251E8B080842D 440 | :101B4000E8A080941200F30E146E270E156E166A2C 441 | :101B500014C0E6FF15C0E6FF16C0E6FFC4EC14F0A3 442 | :101B6000E552E552E552C80E146E270E156E166A40 443 | :101B700014C0E6FF15C0E6FF16C0E6FFC4EC14F083 444 | :101B8000E552E552E5529D0E146E270E156E166A4B 445 | :101B900014C0E6FF15C0E6FF16C0E6FFC4EC14F063 446 | :101BA000E552E552E552C80E146E270E156E166A00 447 | :101BB00014C0E6FF15C0E6FF16C0E6FFC4EC14F043 448 | :101BC000E552E552E552F30E146E270E156E166AB5 449 | :101BD00014C0E6FF15C0E6FF16C0E6FFC4EC14F023 450 | :101BE000E552E552E552890E146E270E156E166AFF 451 | :101BF00014C0E6FF15C0E6FF16C0E6FFC4EC14F003 452 | :101C0000E552E552E552F30E146E270E156E166A74 453 | :101C100014C0E6FF15C0E6FF16C0E6FFC4EC14F0E2 454 | :101C2000E552E552E5526A0E146E270E156E166ADD 455 | :101C300014C0E6FF15C0E6FF16C0E6FFC4EC14F0C2 456 | :101C4000E552E552E5520001926B936B000192510F 457 | :101C5000931103E188EC01F0F9D74B0E146E270EB7 458 | :101C6000156E166A14C0E6FF15C0E6FF16C0E6FF43 459 | :101C7000C4EC14F0E552E552E552290E146E270E1D 460 | :101C8000156E166A14C0E6FF15C0E6FF16C0E6FF23 461 | :101C9000C4EC14F0E552E552E55281B0FED781A0C4 462 | :101CA000FED7000EE66EE66AF4EC15F0E552E5525A 463 | :101CB00081B0FED7B9EC15F0F3CF84F0F4CF85F006 464 | :101CC00081A0FED7B9EC15F0F3CF82F0F4CF83F00A 465 | :101CD000B9EC15F0F3CF80F0F4CF81F0140E146E50 466 | :101CE000270E156E166A14C0E6FF15C0E6FF16C073 467 | :101CF000E6FFC4EC14F0E552E552E552050EE66E3F 468 | :101D0000E66AE66AE66A82C014F083C015F0166AD5 469 | :101D1000176A14C0E6FF15C0E6FF16C0E6FF17C03D 470 | :101D2000E6FF22EC00F0186E080EE15C02E2E16AC8 471 | :101D3000E552E16E1850FF0E146E260E156E166AEF 472 | :101D400014C0E6FF15C0E6FF16C0E6FFC4EC14F0B1 473 | :101D5000E552E552E552050EE66EE66AE66AE66A87 474 | :101D600084C014F085C015F0166A176A14C0E6FF27 475 | :101D700015C0E6FF16C0E6FF17C0E6FF22EC00F034 476 | :101D8000186E080EE15C02E2E16AE552E16E18505D 477 | :101D9000E00E146E260E156E166A14C0E6FF15C00E 478 | :101DA000E6FF16C0E6FFC4EC14F0E552E552E5523A 479 | :101DB000BDDEF30E146E270E156E166A14C0E6FF14 480 | :101DC00015C0E6FF16C0E6FFC4EC14F0E552E5527C 481 | :101DD000E552C00E146E260E156E166A14C0E6FF8C 482 | :101DE00015C0E6FF16C0E6FFC4EC14F0E552E5525C 483 | :101DF000E552B90E146E260E156E166A14C0E6FF73 484 | :101E000015C0E6FF16C0E6FFC4EC14F0E552E5523B 485 | :101E1000E552020EE66EE66AE66AE66A8CC014F0E7 486 | :101E20008DC015F0166A176A15AE02D016681768CD 487 | :101E300014C0E6FF15C0E6FF16C0E6FF17C0E6FFB8 488 | :101E400022EC00F0186E080EE15C02E2E16AE55255 489 | :101E5000E16E1850FE0E146E270E156E166A14C031 490 | :101E6000E6FF15C0E6FF16C0E6FFC4EC14F0E5522D 491 | :101E7000E552E552020EE66EE66AE66AE66A8EC052 492 | :101E800014F08FC015F0166A176A15AE02D01668E6 493 | :101E9000176814C0E6FF15C0E6FF16C0E6FF17C0BE 494 | :101EA000E6FF22EC00F0186E080EE15C02E2E16A47 495 | :101EB000E552E16E1850FE0E146E270E156E166A6E 496 | :101EC00014C0E6FF15C0E6FF16C0E6FFC4EC14F030 497 | :101ED000E552E552E552020EE66EE66AE66AE66A09 498 | :101EE00090C014F091C015F0166A176A15AE02D0B2 499 | :101EF0001668176814C0E6FF15C0E6FF16C0E6FFB7 500 | :101F000017C0E6FF22EC00F0186E080EE15C02E25A 501 | :101F1000E16AE552E16E1850B50E146E260E156E8C 502 | :101F2000166A14C0E6FF15C0E6FF16C0E6FFC4EC53 503 | :101F300014F0E552E552E552020EE66EE66AE66AF4 504 | :101F4000E66A8AC014F08BC015F0166A176A15AEDF 505 | :101F500002D01668176814C0E6FF15C0E6FF16C069 506 | :101F6000E6FF17C0E6FF22EC00F0186E080EE15CF9 507 | :101F700002E2E16AE552E16E1850FA0E146E270E85 508 | :101F8000156E166A14C0E6FF15C0E6FF16C0E6FF20 509 | :101F9000C4EC14F0E552E552E552020EE66EE66A34 510 | :101FA000E66AE66A88C014F089C015F0166A176AF6 511 | :101FB00015AE02D01668176814C0E6FF15C0E6FF1C 512 | :101FC00016C0E6FF17C0E6FF22EC00F0186E080E00 513 | :101FD000E15C02E2E16AE552E16E1850B10E146E66 514 | :101FE000260E156E166A14C0E6FF15C0E6FF16C071 515 | :101FF000E6FFC4EC14F0E552E552E552020EE66E3F 516 | :10200000E66AE66AE66A86C014F087C015F0166ACA 517 | :10201000176A15AE02D01668176814C0E6FF15C01F 518 | :10202000E6FF16C0E6FF17C0E6FF22EC00F0186ED0 519 | :10203000080EE15C02E2E16AE552E16E1850AC0E76 520 | :10204000146E260E156E166A14C0E6FF15C0E6FF64 521 | :1020500016C0E6FFC4EC14F0E552E552E552C00E9E 522 | :10206000146E260E156E166A14C0E6FF15C0E6FF44 523 | :1020700016C0E6FFC4EC14F0E552E552E552F30E4B 524 | :10208000146E270E156E166A14C0E6FF15C0E6FF23 525 | :1020900016C0E6FFC4EC14F0E552E552E55212001A 526 | :1020A000019E08D0019E09AE05D0086C091EE86AA1 527 | :1020B0000922018E09C003F008C002F0136A126AF7 528 | :1020C0008E0E046E056AECEF12F00F7E016A28ECAA 529 | :1020D00013F040EC13F001B6D0EF12F001A20AD0D9 530 | :1020E00001AA03D001BED0EF12F001A4DCEF12F080 531 | :1020F000D9EF12F001AA05D001ACDCEF12F0D9EF54 532 | :1021000012F001A00AD001A808D001BE04D001A499 533 | :1021100002D0E5EF12F0E9EF12F0126A056A0F50F3 534 | :102120000A5C116E10E307C013F008C002F009C08A 535 | :1021300003F00AC010F00CC007F00DC008F00EC08C 536 | :1021400009F0013A09D00CC013F00DC002F00EC026 537 | :1021500003F00FC010F0116C019E01BC018E10C085 538 | :1021600004F001B018EF13F01A0E116018EF13F01D 539 | :10217000046A0A6A01A408D0076C081E091E0A1E18 540 | :10218000E86A082209220A2201AC08D0136C021E58 541 | :10219000031E041EE86A022203220422066A115268 542 | :1021A00007E00A340932083207320632112EF9D715 543 | :1021B0000750132608500222095003220A50042215 544 | :1021C00006C012F0019E04AE0BD0126C131E021E4C 545 | :1021D000031E041EE86A1322022203220422018E37 546 | :1021E00004A006D0D8800332023213321232102AF1 547 | :1021F00010C004F0ECEF12F0016A28EC13F040EC90 548 | :1022000013F001B6D0EF12F001A205D001BAD0EF61 549 | :1022100012F0D7EF12F001BAE3EF12F001A005D0EF 550 | :1022200001B8D0EF12F0E3EF12F001B8D7EF12F0DF 551 | :10223000056A7F0E0A24046EE86A05220F50045EC8 552 | :10224000E86A055A1A0E106E0A6A126A136A026A5E 553 | :10225000036A0C50075E0D50085A0E50095A000EC2 554 | :102260000A5A09E70C5007260D5008220E50092281 555 | :10227000000E0A2201D0128AD89007360836093695 556 | :102280000A36D8901236133602360336102EE1D7AE 557 | :10229000095008100710D8A4128AECEF12F0016A56 558 | :1022A00028EC13F040EC13F001B6D0EF12F001A2CD 559 | :1022B00005D001B8D0EF12F0D7EF12F001AA05D087 560 | :1022C00001B0D0EF12F0D7EF12F001B002D001A8A8 561 | :1022D00002D0E3EF12F0056A0F500A24046EE86A98 562 | :1022E00005227E0E045EE86A055A126A136A026AC3 563 | :1022F000036A0E500902F4CF03F0F3CF02F00D5041 564 | :102300000902F3501326F4500222000E03220E504D 565 | :102310000802F3501326F4500222000E03220C5040 566 | :102320000902F3501226F4501322000E0222032257 567 | :102330000D500802F3501226F4501322000E022210 568 | :1023400003220E500702F3501226F4501322000EFF 569 | :10235000022203220C500802F4501226000E13220F 570 | :10236000022203220D500702F4501226000E1322FF 571 | :1023700002220322ECEF12F0006A0EAEC5EF11F05C 572 | :102380000D6C0E1EE86A0E22001E09AECDEF11F094 573 | :10239000086C091EE86A0922001E5AEC16F009BEF4 574 | :1023A000DDEF11F000AE000C086C091EE86A09228E 575 | :1023B000046C051EE86A0522000C00BED4EF11F083 576 | :1023C0000188FF0C006AE86A0EAEEFEF11F00B6CAB 577 | :1023D0000C1E0D1E0E1E0C220D220E22001E09AE1A 578 | :1023E000FAEF11F0066C071E081E091E07220822CC 579 | :1023F0000922001EF6EC14F009BE11EF12F000AE37 580 | :10240000000C066C071E081E091EE86A0722082237 581 | :102410000922026C031E041E051E0322042205224B 582 | :10242000000C00BE01EF12F00188FF0C09C013F090 583 | :1024300008C012F008500D02F4CF07F0F3CF06F0F9 584 | :1024400009500E02F4CF09F0F3CF08F00D02F3505B 585 | :102450000726F4500822E86A092212500E02F350AF 586 | :102460000726F4500822E86A09220EAE3CEF12F06B 587 | :102470001250085E1350095A13AE000C0D50085E3E 588 | :102480000E50095A000C016A28EC13F001B64DEF0A 589 | :1024900012F001A20ED001B405D07F0E096EFF0E1E 590 | :1024A000086E1FD0800E096E086A1BD0096A086A80 591 | :1024B00018D001B0FBD78F0E0A60EDD77E0E0A64EC 592 | :1024C000F5D78E0E0A5C05E0D890093208320A2A48 593 | :1024D000F8D701A406D0086C091EE86A092209AEE3 594 | :1024E000E5D712007BEC12F001B6000C01B0000C35 595 | :1024F00001A4000C010C016A28EC13F040EC13F06D 596 | :1025000001B6120001AE08D001A004D001A802D08B 597 | :1025100001801200019012000F500A5C0BE10E5076 598 | :10252000095C08E10D50085C05E10C50075C02E114 599 | :1025300001801200D8A002D0018E10D00A500FC026 600 | :102540000AF00F6E09500EC009F00E6E08500DC053 601 | :1025500008F00D6E07500CC007F00C6E0F500A5CAF 602 | :1025600010E0FF0F09E0019001B403D001AE018437 603 | :10257000120001AE019412000F2AD8900E320D32D3 604 | :102580000C320C50075E0D50085A0E50095A09BE05 605 | :10259000EAD7D8900736083609360A2EF8D7C8D7B2 606 | :1025A0007F0E0A6EFF0E096E086E076E12007F0E18 607 | :1025B00001BEFF0E0A6E02D07F0E0A6E800E096EFB 608 | :1025C000086A076AF3D701AE04D0800E0A6E096A62 609 | :1025D000F7D70A6A096AF4D70350021013101210D1 610 | :1025E000F8E005BEF0D703BE0CD004500510EBE0B8 611 | :1025F000D89012361336023603360406D8A00506E4 612 | :10260000F2D70550D4E10428D2E012AE11D07F0EEB 613 | :10261000121402E113A00CD0132AE86A022203224A 614 | :1026200007E3D880033202321332042A0428BFE0C1 615 | :102630000450C9E013C007F002C008F00334096E6B 616 | :1026400004300A6E09320A9E01BE0A8ED6EF12F0DD 617 | :1026500009360A3602E30184017E06E101800A6A36 618 | :10266000096A086A076A12000A2803E0D88009325A 619 | :102670001200D890093202E1018212000186120094 620 | :102680000E360F3602E3018C017E06E101880F6AE7 621 | :102690000E6A0D6A0C6A12000F2803E0D8800E3211 622 | :0C26A0001200D8900E32EAE1018A12000C 623 | :0426AC00202A2A2A8C 624 | :1026B000002F323000202D20000A0D2A2A2A200067 625 | :1026C0000A0D2A2A2A2A2A2A2A2A2A2A2A2A2A2AA7 626 | :1026D0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A0084 627 | :1026E0000A0D3E2052656164696E67204E4D45417A 628 | :1026F00020466F726D61742054696D652020000A58 629 | :102700000D3E3E205050535F686967685F74696D85 630 | :10271000652020000A0D3E3E205050535F746F74B8 631 | :10272000616C5F74696D6520000A0D3E2043616C29 632 | :102730006962726174696E6720746F203150505302 633 | :10274000207265666572656E6365000A0D3E2053F2 634 | :102750006174656C6C697465206C6F636B20657364 635 | :102760007461626C6973686564000A0D3E2057618C 636 | :102770006974696E6720666F7220736174656C6C32 637 | :10278000697465206C6F636B000A0D53797374650F 638 | :102790006D2048617320426F6F746564000A0D2AD2 639 | :1027A0002A2A204E4F564120524F424F54494353FC 640 | :1027B000202D2047505320434C4F434B202D205673 641 | :1027C000352E30202A2A2A000A0D2A2A2A2A2A2AC5 642 | :1027D0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A59 643 | :1027E0002A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A49 644 | :1027F0002A2A000A0D00560041002F002C003A0042 645 | :102800000A0D24434C4F434B2C002D002A002E0070 646 | :102810002A0EF66E000EF76E000EF86E000109002B 647 | :10282000F550EE6F0900F550EF6F03E1EE6701D050 648 | :102830003DD00900F550E96F0900F550EA6F090035 649 | :10284000F550EB6F09000900F550E96E0900F550ED 650 | :10285000EA6E090009000900F550EC6F0900F55017 651 | :10286000ED6F09000900F6CFF0F0F7CFF1F0F8CFE7 652 | :10287000F2F0E9C0F6FFEAC0F7FFEBC0F8FF000195 653 | :10288000EC5302E1ED5307E00900F550EE6EEC0762 654 | :10289000F8E2ED07F9D7F0C0F6FFF1C0F7FFF2C09C 655 | :0E28A000F8FF0001EE07000EEF5BBFD712003D 656 | :0228AE00D9CF80 657 | :1028B000E6FFDACFE6FFE1CFD9FFE2CFDAFFAC6A7D 658 | :1028C000AB6AFD0EDBA005D0AC88DBA404D0AC8ED7 659 | :1028D00002D0DBB8AC84DBA202D0AC8CAB8CDBA624 660 | :1028E00002D0AB8801D0AB8ADBAC02D09D8A01D08C 661 | :1028F0009D9ADBAE02D09D8801D09D98FB0EDB50E7 662 | :10290000AF6EFC0EDBCF15F015C014F0156A145035 663 | :10291000B06EAC8AAB8EE552E5CFDAFFE7CFD9FFD8 664 | :022920001200A3 665 | :0E292200D9CFE6FFDACFE6FFE1CFD9FFE2CF53 666 | :10293000DAFFE652E652D950FD0F146EFF0EDA2090 667 | :1029400014C0DEFFDD6EDECFE9FFDDCFEAFFEF9ED4 668 | :10295000FA0EDBCF14F0FB0EDBCF15F0FC0EDBCF55 669 | :1029600016F0FD0EDBCF17F014C006F015C007F00F 670 | :1029700016C008F017C009F0E552E552E552E5CF60 671 | :08298000DAFFE7CFD9FF1200D6 672 | :08298800D9CFE6FFDACFE6FF2C 673 | :10299000E1CFD9FFE2CFDAFFACA2FED7FB0EDBCF4F 674 | :1029A000F6FFFC0EDBCFF7FFFD0EDBCFF8FF0800D4 675 | :1029B000F550E66E43EC16F0E552D950FB0FE96E88 676 | :1029C000FF0EDA20EA6EEFCFF6FFEE2AEFCFF7FF29 677 | :1029D000000EEE22EFCFF8FFEE220800F550DCE10A 678 | :0C29E000E552E5CFDAFFE7CFD9FF120087 679 | :0429EC00056A046A0A 680 | :1029F000036A026A200EE76ED8900636073608365C 681 | :102A0000093602360336043605360B50025C0C508C 682 | :102A100003580D5004580E50055809E30B50025E40 683 | :102A20000C50035A0D50045A0E50055A062AE72E30 684 | :042A3000E4D71200D5 685 | :0C2A3400D9CFE6FFDACFE6FFE1CFD9FFF3 686 | :102A4000E2CFDAFFFD0EDB507E0BCD6EFD0EDBAC70 687 | :102A500002D0CD8E01D0CD9ECF6ACE6A9E90DBAEE5 688 | :102A600002D09D8001D09D90CD80E552E5CFDAFF68 689 | :062A7000E7CFD9FF1200C0 690 | :0A2A7600D9CFE6FFDACFE6FFE1CF8B 691 | :102A8000D9FFE2CFDAFFF090FD0EDBA202D0F18A8F 692 | :102A900001D0F19ADBAE02D0F08601D0F096DBA037 693 | :102AA00002D0F18E02D0F19E9382E552E5CFDAFF9B 694 | :062AB000E7CFD9FF120080 695 | :0A2AB600D9CFE6FFDACFE6FFE1CF4B 696 | :102AC000D9FFE2CFDAFFF292FD0EDBA202D0F18C49 697 | :102AD00001D0F19CDBAE02D0F28801D0F298DBA0ED 698 | :102AE00002D0F18E02D0F19E9380E552E5CFDAFF5D 699 | :062AF000E7CFD9FF120040 700 | :0A2AF600D9CFE6FFDACFE6FFE1CF0B 701 | :102B0000D9FFE2CFDAFFE652F20E0001F317ABACC9 702 | :102B100003D0F391ABB0F381ABB4F385ABB2F387E1 703 | :102B2000AE50DF6EDF50E552E552E5CFDAFFE7CF7A 704 | :042B3000D9FF1200B7 705 | :0C2B3400D9CFE6FFDACFE6FFE1CFD9FFF2 706 | :102B4000E2CFDAFFE652E652CE50DF6E010ECFCF73 707 | :102B5000DBFFDECF14F0DDCF15F014C0F3FF15C09E 708 | :102B6000F4FFE552E552E552E5CFDAFFE7CFD9FFB2 709 | :022B7000120051 710 | :0E2B7200D9CFE6FFDACFE6FFE1CFD9FFE2CF01 711 | :102B8000DAFFE652E652D650DF6E010ED7CFDBFFFA 712 | :102B9000DECF14F0DDCF15F014C0F3FF15C0F4FF45 713 | :102BA000E552E552E552E5CFDAFFE7CFD9FF120053 714 | :102BB000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFFE8 715 | :102BC000E652E652FC0EDBCFDEFFDBCFDDFF010E6F 716 | :102BD000DB50CF6EDF50CE6EE552E552E552E5CFC9 717 | :082BE000DAFFE7CFD9FF120074 718 | :082BE800D9CFE6FFDACFE6FFCA 719 | :102BF000E1CFD9FFE2CFDAFFE652E652FC0EDBCF9F 720 | :102C0000DEFFDBCFDDFF010EDB50D76EDF50D66E6F 721 | :102C1000E552E552E552E5CFDAFFE7CFD9FF1200E2 722 | :102C2000D9CFE6FFDACFE6FFE1CFD9FFE2CFDAFF77 723 | :102C3000FD0EDB507F0BD56ED76AD66AF294FD0E7F 724 | :102C4000DBAE02D0F28A01D0F29AD58EE552E5CF02 725 | :082C5000DAFFE7CFD9FF120003 726 | :082C5800FF0EE350306EEF0E99 727 | :102C600001D0F30EE76EE72E33EF16F00C0E2F6E49 728 | :102C7000E76AE72E39EF16F02F2E38EF16F0302ED8 729 | :062C800031EF16F0120016 730 | :0A2C8600D9CFE6FFDACFE6FFE1CF79 731 | :102C9000D9FFE2CFDAFFACAC04D0AC900001F3B3C3 732 | :102CA000AC80FD0EDB50AD6EE552E5CFDAFFE7CF2D 733 | :042CB000D9FF120036 734 | :0C2CB400056A046A100EE76ED89008361E 735 | :102CC0000936043605360D50045C0E50055805E3F0 736 | :102CD0000D50045E0E50055A082AE72EF0D7120058 737 | :102CE0001EEE00F02EEE00F0F86A019C08EC14F0E5 738 | :0C2CF0009FEC16F0E7EC09F0FBD7120097 739 | :042CFC00FE0EE3CF16 740 | :102D0000E9FFFF0EE3CFEAFFF36AF46AEE5203E055 741 | :082D1000F34AF42AFBD712007C 742 | :082D1800FF0EE350E84E12002B 743 | :0E2D2000000000D000D000D0E82EFAD712003C 744 | :022D2E0000EEB5 745 | :0C2D300000F00F0EEE6AEA62FDD7120000 746 | :022D3C002E0067 747 | :022D3E00120081 748 | :102D4000416263646566000000000000000000004E 749 | :102D50000000000000000000000000000000000073 750 | :102D60000000000000000000000000000000000063 751 | :102D70000000000000000000000000000000000053 752 | :102D80000000000000000000000000000000000043 753 | :102D90000000000000000000000000000000000033 754 | :102DA0000000000000000000000020202020202063 755 | :102DB0002020202020202020202020202020202013 756 | :102DC000202000000000000000000000004600007D 757 | :102DD00000000000000000000000000000000000F3 758 | :102DE0000000000000000063000000000000000080 759 | :092DF00000803F0000000000001B 760 | :020000040030CA 761 | :0100010006F8 762 | :010003000EEE 763 | :0100060001F8 764 | :00000001FF 765 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.mcp: -------------------------------------------------------------------------------- 1 | [HEADER] 2 | magic_cookie={66E99B07-E706-4689-9E80-9B2582898A13} 3 | file_version=1.0 4 | device=PIC18F2525 5 | [PATH_INFO] 6 | BuildDirPolicy=BuildDirIsSourceDir 7 | dir_src= 8 | dir_bin= 9 | dir_tmp= 10 | dir_sin= 11 | dir_inc=C:\Program Files\Microchip\mcc18\h 12 | dir_lib=C:\Program Files\Microchip\mcc18\lib 13 | dir_lkr= 14 | [CAT_FILTERS] 15 | filter_src=*.asm;*.c 16 | filter_inc=*.h;*.inc 17 | filter_obj=*.o 18 | filter_lib=*.lib 19 | filter_lkr=*.lkr 20 | [CAT_SUBFOLDERS] 21 | subfolder_src= 22 | subfolder_inc= 23 | subfolder_obj= 24 | subfolder_lib= 25 | subfolder_lkr= 26 | [FILE_SUBFOLDERS] 27 | file_000=. 28 | file_001=. 29 | [GENERATED_FILES] 30 | file_000=no 31 | file_001=no 32 | [OTHER_FILES] 33 | file_000=no 34 | file_001=no 35 | [FILE_INFO] 36 | file_000=testbenh.c 37 | file_001=C:\Program Files\Microchip\MCC18\lkr\18f2525.lkr 38 | [SUITE_INFO] 39 | suite_guid={5B7D72DD-9861-47BD-9F60-2BE967BF8416} 40 | suite_state= 41 | [TOOL_SETTINGS] 42 | TS{DD2213A8-6310-47B1-8376-9430CDFC013F}= 43 | TS{BFD27FBA-4A02-4C0E-A5E5-B812F3E7707C}=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" 44 | TS{C2AF05E7-1416-4625-923D-E114DB6E2B96}=-Ls -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa- 45 | TS{ADE93A55-C7C7-4D4D-A4BA-59305F7D0391}= 46 | [INSTRUMENTED_TRACE] 47 | enable=0 48 | transport=0 49 | format=0 50 | [CUSTOM_BUILD] 51 | Pre-Build= 52 | Pre-BuildEnabled=1 53 | Post-Build= 54 | Post-BuildEnabled=1 55 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.mcs: -------------------------------------------------------------------------------- 1 | [Header] 2 | MagicCookie={0b13fe8c-dfe0-40eb-8900-6712719559a7} 3 | Version=1.0 4 | [File000] 5 | Location=C:\Documents and Settings\Karl\Desktop\Mark 3 - 18F252 - V5.0\Mark 3 - 18F252 - V5.0\testbenh.o 6 | Folder=Intermediary 7 | DeviceName=PIC18F2525 8 | LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} 9 | LanguageToolID={E56A1C86-9D32-4DF6-8C34-FE0388B1B644} 10 | LanguageToolLocation=C:\Program Files\Microchip\MCC18\bin\mcc18.exe 11 | PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)||$(INCDIR)|C:\Program Files\Microchip\mcc18\h||$(LIBDIR)|C:\Program Files\Microchip\mcc18\lib||$(LKRDIR)|| 12 | SOLK=|testbenh.c|||||||C:\Program Files\Microchip\MCC18\lkr\18f2525.lkr|| 13 | SuiteArgsString= 14 | ToolArgsString=-Ls -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa- 15 | TraceCmdString= 16 | DebugOptions= 17 | [File001] 18 | Location=C:\Documents and Settings\Karl\Desktop\Mark 3 - 18F252 - V5.0\Mark 3 - 18F252 - V5.0\testbenh.cof 19 | Folder=Output 20 | DeviceName=PIC18F2525 21 | LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} 22 | LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} 23 | LanguageToolLocation=C:\Program Files\Microchip\MCC18\bin\mplink.exe 24 | PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)||$(INCDIR)|C:\Program Files\Microchip\mcc18\h||$(LIBDIR)|C:\Program Files\Microchip\mcc18\lib||$(LKRDIR)|| 25 | SOLK=|testbenh.c|||||||C:\Program Files\Microchip\MCC18\lkr\18f2525.lkr|| 26 | SuiteArgsString= 27 | ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" 28 | TraceCmdString= 29 | DebugOptions= 30 | [File002] 31 | Location=C:\Documents and Settings\Karl\Desktop\Mark 3 - 18F252 - V5.0\Mark 3 - 18F252 - V5.0\testbenh.hex 32 | Folder=Output 33 | DeviceName=PIC18F2525 34 | LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} 35 | LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} 36 | LanguageToolLocation=C:\Program Files\Microchip\MCC18\bin\mplink.exe 37 | PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)||$(INCDIR)|C:\Program Files\Microchip\mcc18\h||$(LIBDIR)|C:\Program Files\Microchip\mcc18\lib||$(LKRDIR)|| 38 | SOLK=|testbenh.c|||||||C:\Program Files\Microchip\MCC18\lkr\18f2525.lkr|| 39 | SuiteArgsString= 40 | ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" 41 | TraceCmdString= 42 | DebugOptions= 43 | [File003] 44 | Location=C:\Documents and Settings\Karl\Desktop\Mark 3 - 18F252 - V5.0\Mark 3 - 18F252 - V5.0\testbenh.map 45 | Folder=Output 46 | DeviceName=PIC18F2525 47 | LanguageToolSuiteID={5B7D72DD-9861-47BD-9F60-2BE967BF8416} 48 | LanguageToolID={96C98149-AA1B-4CF9-B967-FAE79CAB663C} 49 | LanguageToolLocation=C:\Program Files\Microchip\MCC18\bin\mplink.exe 50 | PPAD=$(BINDIR)||$(TMPDIR)||$(AINDIR)||$(INCDIR)|C:\Program Files\Microchip\mcc18\h||$(LIBDIR)|C:\Program Files\Microchip\mcc18\lib||$(LKRDIR)|| 51 | SOLK=|testbenh.c|||||||C:\Program Files\Microchip\MCC18\lkr\18f2525.lkr|| 52 | SuiteArgsString= 53 | ToolArgsString=/m"$(BINDIR_)$(TARGETBASE).map" /w /o"$(BINDIR_)$(TARGETBASE).cof" 54 | TraceCmdString= 55 | DebugOptions= 56 | [TOOL_LOC_STAMPS] 57 | tool_loc{96C98149-AA1B-4CF9-B967-FAE79CAB663C}=C:\Program Files\Microchip\MCC18\bin\mplink.exe 58 | tool_loc{E56A1C86-9D32-4DF6-8C34-FE0388B1B644}=C:\Program Files\Microchip\MCC18\bin\mcc18.exe 59 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.mcw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/01_PIC_MC_V5P1/testbenh.mcw -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.mptags: -------------------------------------------------------------------------------- 1 | !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ 2 | !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ 3 | !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ 4 | !_TAG_PROGRAM_NAME Exuberant Ctags // 5 | !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ 6 | !_TAG_PROGRAM_VERSION 5.5.4 // 7 | !_TAG_REVISION_NAME MCHPTags // 8 | !_TAG_REVISION_VERSION 6.0.1 // 9 | PPS_high_time E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 11;" v line:11 10 | PPS_initial_time E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 9;" v line:9 11 | PPS_total_time E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 10;" v line:10 12 | bootup E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 227;" f line:227 signature:(void) 13 | bootup E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 51;" p line:51 file: signature:(void) 14 | days E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 14;" v line:14 15 | hours E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 15;" v line:15 16 | i E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 102;" l line:102 17 | i E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 162;" l line:162 18 | j E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 163;" l line:163 19 | lock E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 18;" v line:18 20 | lock_hour E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 19;" v line:19 21 | lock_mins E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 20;" v line:20 22 | main E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 100;" f line:100 signature:(void) 23 | minutes E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 16;" v line:16 24 | months E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 13;" v line:13 25 | num2txt E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 54;" p line:54 file: signature:(long, long) 26 | position E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 24;" v line:24 27 | read_time E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 218;" f line:218 signature:(void) 28 | read_time E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 53;" p line:53 file: signature:(void) 29 | seconds E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 17;" v line:17 30 | setup E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 50;" p line:50 file: signature:(void) 31 | setup E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 58;" f line:58 signature:(void) 32 | temp_txt E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 161;" l line:161 33 | time_stamp E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 159;" f line:159 signature:(void) 34 | time_stamp E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 52;" p line:52 file: signature:(void) 35 | timecheck E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 21;" v line:21 36 | years E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 12;" v line:12 37 | -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/01_SourceCode/01_PIC_MC_V5P1/testbenh.o -------------------------------------------------------------------------------- /01_SourceCode/01_PIC_MC_V5P1/testbenh.tagsrc: -------------------------------------------------------------------------------- 1 | E:\PMUs\Microprocessor Code\GPS_PLL - V3.4 - Beta\testbenh.c 2 | -------------------------------------------------------------------------------- /02_HardwareSourceFiles/US Parts List.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/02_HardwareSourceFiles/US Parts List.xlsx -------------------------------------------------------------------------------- /10_LegacyDocumentation/Component Placement.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/10_LegacyDocumentation/Component Placement.pptx -------------------------------------------------------------------------------- /10_LegacyDocumentation/OpenPMU - Enclosure Assembly - V1.1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/10_LegacyDocumentation/OpenPMU - Enclosure Assembly - V1.1.pdf -------------------------------------------------------------------------------- /10_LegacyDocumentation/OpenPMU - PCB Assembly Instructions (USB-6009-OEM) - V1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/10_LegacyDocumentation/OpenPMU - PCB Assembly Instructions (USB-6009-OEM) - V1.pdf -------------------------------------------------------------------------------- /10_LegacyDocumentation/OpenPMU - PCB Component Placement (USB-6009-OEM) - V1.1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/10_LegacyDocumentation/OpenPMU - PCB Component Placement (USB-6009-OEM) - V1.1.pdf -------------------------------------------------------------------------------- /10_LegacyDocumentation/OpenPMU - PCB Connections (USB-6009-OEM) - V1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/10_LegacyDocumentation/OpenPMU - PCB Connections (USB-6009-OEM) - V1.pdf -------------------------------------------------------------------------------- /20200930_Overview_draft.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/20200930_Overview_draft.pdf -------------------------------------------------------------------------------- /FluxPMU_logo.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/FluxPMU_logo.graffle -------------------------------------------------------------------------------- /FluxPMU_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ALSETLab/FluxPMU/2267d1c1caa32cc42289607fff109cd4ebd9f180/FluxPMU_logo.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![DOI](https://zenodo.org/badge/285968652.svg)](https://zenodo.org/badge/latestdoi/285968652) 2 | 3 | # FluxPMU - An Open Source Maker's Guide of an DIY PMU 4 | ![alt text](https://github.com/ALSETLab/FluxPMU/blob/master/FluxPMU_logo.png) 5 | 6 | FluxPMU is a "grassroots" educational project that aims to enable students to explore and buildan open source, low cost PMU. 7 | 8 | Building from the legacy of [OpenPMU V1](https://ieeexplore.ieee.org/document/6463452), FluxPMU provides a Do-it-Yourself (DIY) guide with all documentation and software sources required to build FluxPMU. 9 | 10 | FluxPMU provides only a refinement of OpenPMU V1's design, and it is NOT to be viewed as an evolution on the design of OpenPMU. For the latest iteration of the OpenPMU device, please visit: [http://www.openpmu.org/](http://www.openpmu.org/). 11 | 12 | ## Cite this work: 13 | 14 | This repository is accompanied by a draft of the paper: 15 | > E. Williamson, L. Vanfretti, P. Adhikari, J. W. Dziuba, and D. Laverty, “FluxPMU - A Maker’s Guide of a DIY Synchronized Phasor Measurement Unit,” submitted for review, IEEE PES ISGT NA 2021, Feb. 15-18, Virtual Event, 2021. 16 | 17 | The paper can be found on this ``root`` directory, it is named [20200930_Overview_draft.pdf](https://github.com/ALSETLab/FluxPMU/blob/master/20200930_Overview_draft.pdf). The paper has been submitted for review to the [IEEE PES ISGT NA 2021](https://ieee-isgt.org/), if and when the paper is published, this repository will be updated to provide a link to the final version of the paper. 18 | 19 | When citing the paper above, we also recommend citing the following publication: 20 | > D. M. Laverty, R. J. Best, P. Brogan, I. Al Khatib, L. Vanfretti and D. J. Morrow, "The OpenPMU Platform for Open-Source Phasor Measurements," in IEEE Transactions on Instrumentation and Measurement, vol. 62, no. 4, pp. 701-709, April 2013, doi: 10.1109/TIM.2013.2240920. 21 | 22 | ## Repository Organization 23 | 24 | ### Where to start? 25 | After reading the paper(s) listed above, the entire "Maker's Guide" can be found in the director ``./00_Documentation/00_Makers Guide.pdf``, this will give you an overview of the different resources associated with this repository. 26 | 27 | ### Organization 28 | This repository contains more than the main "Maker's Guide", it also provides updated source code for all software required for the FluxPMU, documentation for the software, hardware assembly guides, etc. 29 | 30 | The resources have been organized as follows: 31 | - ``00_Documentation`` this is the major folder, it includes the "Maker's Guide" as a single .pdf, [20200930_Overview_draft.pdf](https://github.com/ALSETLab/FluxPMU/blob/master/20200930_Overview_draft.pdf), and three sub-folders. The sub-folders include: 32 | - ``01_HardwareGuides`` contains assembly instructions, PIC micro-controller configuration, wiring, etc. 33 | - ``02_TestingGuides`` contains documents showing how to test the FluxPMU using different instruments such as a frequency generator, an Analog Discovery Board, etc. 34 | - ``03_LabVIEW_VI_Documentation`` contains individual documentation for all LabVIEW VI files in .pdf. You can also find this documentation [online](https://alsetlab.github.io/S3DK/docs/Code_Flow_Chart.html), however, it is also placed here for version tracking and maintainance purposes. 35 | - ``01_SourceCode`` contains two folders, one with all the updated (64-bit) software related to LabVIEW and the PIC micro-controller (v5p1) files used. 36 | - ``02_HardwareSourceFiles`` contains a part list/bill of materials with costs based on US-based suppliers and costs in US dollars, as well as the design BRD files for the PCBs. 37 | - ``10_LegacyDocumentation`` contains the original documents we used when getting FluxPMU started. 38 | 39 | ## Acknowledgement 40 | This work was supported in part by Dominion Energy Virginia and in part by the Center of Excellence for NEOM Research at the King Abdullah University of Science and Technology under grant OSR-2019-CoE-NEOM- 4178.12. 41 | 42 | ## No Warranty 43 | (c) David Laverty, Emmett Williamson, Luigi Vanfretti, Prottay M. Adhikari, Jerry W. Dziuba. 44 | 45 | All materials under this repository are distributed under the GPL v3 license. 46 | 47 | --------------------------------------------------------------------------------