Skip to content

Commit ce6ebc5

Browse files
committed
MPAE-19448 Created and tested MPLAB X IDE Project, working as expected
1 parent 4e75ebb commit ce6ebc5

32 files changed

+4988
-0
lines changed
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
#
2+
# There exist several targets which are by default empty and which can be
3+
# used for execution of your targets. These targets are usually executed
4+
# before and after some main targets. They are:
5+
#
6+
# .build-pre: called before 'build' target
7+
# .build-post: called after 'build' target
8+
# .clean-pre: called before 'clean' target
9+
# .clean-post: called after 'clean' target
10+
# .clobber-pre: called before 'clobber' target
11+
# .clobber-post: called after 'clobber' target
12+
# .all-pre: called before 'all' target
13+
# .all-post: called after 'all' target
14+
# .help-pre: called before 'help' target
15+
# .help-post: called after 'help' target
16+
#
17+
# Targets beginning with '.' are not intended to be called on their own.
18+
#
19+
# Main targets can be executed directly, and they are:
20+
#
21+
# build build a specific configuration
22+
# clean remove built files from a configuration
23+
# clobber remove all built files
24+
# all build all configurations
25+
# help print help mesage
26+
#
27+
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
28+
# .help-impl are implemented in nbproject/makefile-impl.mk.
29+
#
30+
# Available make variables:
31+
#
32+
# CND_BASEDIR base directory for relative paths
33+
# CND_DISTDIR default top distribution directory (build artifacts)
34+
# CND_BUILDDIR default top build directory (object files, ...)
35+
# CONF name of current configuration
36+
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
37+
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
38+
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
39+
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
40+
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
41+
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
42+
#
43+
# NOCDDL
44+
45+
46+
# Environment
47+
MKDIR=mkdir
48+
CP=cp
49+
CCADMIN=CCadmin
50+
RANLIB=ranlib
51+
52+
53+
# build
54+
build: .build-post
55+
56+
.build-pre:
57+
# Add your pre 'build' code here...
58+
59+
.build-post: .build-impl
60+
# Add your post 'build' code here...
61+
62+
63+
# clean
64+
clean: .clean-post
65+
66+
.clean-pre:
67+
# Add your pre 'clean' code here...
68+
# WARNING: the IDE does not call this target since it takes a long time to
69+
# simply run make. Instead, the IDE removes the configuration directories
70+
# under build and dist directly without calling make.
71+
# This target is left here so people can do a clean when running a clean
72+
# outside the IDE.
73+
74+
.clean-post: .clean-impl
75+
# Add your post 'clean' code here...
76+
77+
78+
# clobber
79+
clobber: .clobber-post
80+
81+
.clobber-pre:
82+
# Add your pre 'clobber' code here...
83+
84+
.clobber-post: .clobber-impl
85+
# Add your post 'clobber' code here...
86+
87+
88+
# all
89+
all: .all-post
90+
91+
.all-pre:
92+
# Add your pre 'all' code here...
93+
94+
.all-post: .all-impl
95+
# Add your post 'all' code here...
96+
97+
98+
# help
99+
help: .help-post
100+
101+
.help-pre:
102+
# Add your pre 'help' code here...
103+
104+
.help-post: .help-impl
105+
# Add your post 'help' code here...
106+
107+
108+
109+
# include project implementation makefile
110+
include nbproject/Makefile-impl.mk
111+
112+
# include project make variables
113+
include nbproject/Makefile-variables.mk
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
/*
2+
© [2025] Microchip Technology Inc. and its subsidiaries.
3+
4+
Subject to your compliance with these terms, you may use Microchip
5+
software and any derivatives exclusively with Microchip products.
6+
You are responsible for complying with 3rd party license terms
7+
applicable to your use of 3rd party software (including open source
8+
software) that may accompany Microchip software. SOFTWARE IS ?AS IS.?
9+
NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS
10+
SOFTWARE, INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT,
11+
MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
12+
WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
13+
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY
14+
KIND WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF
15+
MICROCHIP HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE
16+
FORESEEABLE. TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP?S
17+
TOTAL LIABILITY ON ALL CLAIMS RELATED TO THE SOFTWARE WILL NOT
18+
EXCEED AMOUNT OF FEES, IF ANY, YOU PAID DIRECTLY TO MICROCHIP FOR
19+
THIS SOFTWARE.
20+
*/
21+
/**
22+
* I2C_HOST EXAMPLE Generated Driver File
23+
*
24+
* @file i2c_host example.c
25+
*
26+
* @ingroup i2c_host example
27+
*
28+
* @version I2C_HOST EXAMPLE Example Version 1.0.0
29+
*
30+
* @brief Generated file for
31+
* Example: 4. I2C Proximity Sensor
32+
* Implementation: Interrupts with callbacks
33+
* Visualization: Printf with error handling
34+
* MCU Device family: PIC18F/18F
35+
*/
36+
#include "mcc_generated_files/system/system.h"
37+
38+
// TODO: Replace TimerX with name of const struct TIMER_INTERFACE, from MCC Generated Files > timer > {timer_header}X
39+
static const struct TIMER_INTERFACE *Timer = &Timer2; // TODO: Replace TimerX with the timer instance number
40+
41+
uint8_t VCNL4200_Initialize(void);
42+
uint8_t VCNL4200_ProximityRead(uint16_t* proximityValue);
43+
void Timer_Callback_250ms(void);
44+
const uint8_t* I2CErrorToString(uint8_t error);
45+
46+
// Note: VCNL4200 - High Sensitivity Long Distance Proximity and Ambient Light Sensor With I2C Interface
47+
// Reference to the VCNL4200 data sheet: https://www.vishay.com/docs/84430/vcnl4200.pdf
48+
// The VCNL4200 command codes are located in Table 1 (page 9) of the VCNL4200 data sheet
49+
#define PROXIMITY_I2C_ADDRESS ((uint8_t)0x51)
50+
#define PROXIMITY_REGISTER ((uint8_t)0x08)
51+
52+
uint16_t proximityValue; // VCNL4200 sensor result
53+
uint8_t errorState = I2C_ERROR_NONE;
54+
volatile bool timerTick = 0; // volatile because this variable is used inside & outside the ISR.
55+
56+
uint8_t VCNL4200_ProximityRead(uint16_t* proximityValue)
57+
{
58+
union
59+
{
60+
uint8_t bytes[2];
61+
uint16_t value;
62+
} proximityResponse;
63+
uint8_t proximityData = PROXIMITY_REGISTER;
64+
65+
I2C_Host.WriteRead(PROXIMITY_I2C_ADDRESS, &proximityData, sizeof(proximityData), &proximityResponse.bytes[0], sizeof(proximityResponse));
66+
while(I2C_Host.IsBusy())
67+
{
68+
}
69+
70+
*proximityValue = proximityResponse.value;
71+
errorState = I2C_Host.ErrorGet();
72+
// Error states:
73+
// 0x00 = I2C_ERROR_NONE
74+
// 0x01 = I2C_ERROR_ADDR_NACK
75+
// 0x02 = I2C_ERROR_DATA_NACK
76+
// 0x03 = I2C_ERROR_BUS_COLLISION
77+
return errorState;
78+
}
79+
80+
const uint8_t* I2CErrorToString(uint8_t error)
81+
{
82+
switch (error)
83+
{
84+
case I2C_ERROR_NONE:
85+
return "I2C_ERROR_NONE";
86+
case I2C_ERROR_ADDR_NACK:
87+
return "I2C_ERROR_ADDR_NACK";
88+
case I2C_ERROR_DATA_NACK:
89+
return "I2C_ERROR_DATA_NACK";
90+
case I2C_ERROR_BUS_COLLISION:
91+
return "I2C_ERROR_BUS_COLLISION";
92+
default:
93+
return "UNKNOWN_ERROR";
94+
}
95+
}
96+
97+
uint8_t VCNL4200_Initialize(void)
98+
{
99+
uint8_t initConfigOne[3] = {0x03, 0x2A, 0x0A};
100+
uint8_t initConfigTwo[3] = {0x03, 0x70, 0x07};
101+
102+
I2C_Host.Write(PROXIMITY_I2C_ADDRESS, &initConfigOne, sizeof(initConfigOne));
103+
while(I2C_Host.IsBusy())
104+
{
105+
}
106+
107+
I2C_Host.Write(PROXIMITY_I2C_ADDRESS, &initConfigTwo, sizeof(initConfigTwo));
108+
while(I2C_Host.IsBusy())
109+
{
110+
}
111+
112+
errorState = I2C_Host.ErrorGet();
113+
return errorState;
114+
}
115+
116+
void Timer_Callback_250ms(void)
117+
{
118+
timerTick = 1;
119+
}
120+
121+
int main(void)
122+
{
123+
__delay_ms(500); // Prevent program running when programming
124+
125+
SYSTEM_Initialize();
126+
INTERRUPT_GlobalInterruptEnable();
127+
printf("Example: 4. I2C Proximity Sensor, Implementation: Interrupts with callbacks, Visualization: Printf with error handling \r\n");
128+
printf("MCU Device family: PIC18F/18F \r\n\r\n");
129+
130+
errorState = VCNL4200_Initialize(); // Initializes the proximity sensor (VCNL4200) over the I2C bus
131+
printf("I2C proximity sensor initialize status: %d - %s \r\n\r\n", errorState, I2CErrorToString(errorState));
132+
Timer->TimeoutCallbackRegister(Timer_Callback_250ms);
133+
INTERRUPT_GlobalInterruptEnable();
134+
135+
while(1)
136+
{
137+
if(timerTick == 1)
138+
{
139+
errorState = VCNL4200_ProximityRead(&proximityValue);
140+
if (errorState != I2C_ERROR_NONE)
141+
{
142+
printf("The proximity sensor error is: %d - %s\r\n", errorState, I2CErrorToString(errorState));
143+
}
144+
printf("The proximityValue is: %d\r\n", proximityValue);
145+
IO_LED_Toggle();
146+
IO_Debug_Toggle();
147+
timerTick = 0;
148+
}
149+
}
150+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# This file has been autogenerated by MPLAB Code Configurator. Please do not edit this file.
2+
3+
manifest_file_version: 1.0.0
4+
project: pic18f57q43-i2c-proximity-sensor-callbacks-printf-errors
5+
creation_date: 2025-04-03T14:51:17.525+02:00[Europe/Berlin]
6+
operating_system: Windows 11
7+
mcc_mode: IDE
8+
mcc_mode_version: v6.25
9+
device_name: PIC18F57Q43
10+
compiler: XC8 3.00
11+
mcc_version: 5.5.2
12+
mcc_core_version: 5.7.1
13+
content_manager_version: 5.0.1
14+
is_mcc_offline: false
15+
is_using_prerelease_versions: true
16+
mcc_content_registries: https://registry.npmjs.org/,https://artifacts.microchip.com/artifactory/api/npm/npm/
17+
device_library: {library_class: com.microchip.mcc.melody.Library, name: Melody, version: 2.8.1}
18+
packs: {name: PIC18F-Q_DFP, version: 1.28.451}
19+
modules:
20+
- {name: '@mchp-mcc/example-i2c-host', type: MELODY, version: 1.0.0}
21+
- {name: '@mchp-mcc/i2c-host-driver', type: MELODY, version: 1.1.0-dev.1}
22+
- {name: '@mchp-mcc/main-manager', type: MELODY, version: 3.1.2}
23+
- {name: '@mchp-mcc/pic-8bit', type: MELODY, version: 5.29.1-dev.6}
24+
- {name: '@mchp-mcc/pic18-configuration-bits-v1', type: MELODY, version: 5.3.5}
25+
- {name: '@mchp-mcc/pic18-pin-manager', type: MELODY, version: 3.7.1}
26+
- {name: '@mchp-mcc/pin-content-processor', type: MELODY, version: 3.9.1-feat.6}
27+
- {name: '@mchp-mcc/scf-pic8-i2c-v1', type: MELODY, version: 6.1.4}
28+
- {name: '@mchp-mcc/scf-pic8-interrupt-v1', type: MELODY, version: 5.2.11}
29+
- {name: '@mchp-mcc/scf-pic8-osc-v1', type: MELODY, version: 4.4.0}
30+
- {name: '@mchp-mcc/scf-pic8-tmr2-v1', type: MELODY, version: 5.1.1-dev.2}
31+
- {name: '@mchp-mcc/scf-pic8-uart-v1', type: MELODY, version: 7.2.0}
32+
- {name: '@mchp-mcc/timer', type: MELODY, version: 1.2.3}
33+
- {name: '@mchp-mcc/uart-driver', type: MELODY, version: 1.10.2}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# This file has been autogenerated by MPLAB Code Configurator. Please do not edit this file.
2+
3+
manifest_file_version: 1.0.0
4+
project: pic18f57q43-i2c-proximity-sensor-callbacks-printf-errors
5+
creation_date: 2025-04-03T14:51:17.484+02:00[Europe/Berlin]
6+
operating_system: Windows 11
7+
mcc_mode: IDE
8+
mcc_mode_version: v6.25
9+
device_name: PIC18F57Q43
10+
compiler: XC8 3.00
11+
mcc_version: 5.5.2
12+
mcc_core_version: 5.7.1
13+
content_manager_version: 5.0.1
14+
is_mcc_offline: false
15+
is_using_prerelease_versions: true
16+
mcc_content_registries: https://registry.npmjs.org/,https://artifacts.microchip.com/artifactory/api/npm/npm/
17+
device_library: {library_class: com.microchip.mcc.melody.Library, name: Melody, version: 2.8.1}
18+
packs: {name: PIC18F-Q_DFP, version: 1.28.451}
19+
modules:
20+
- {name: '@mchp-mcc/example-i2c-host', type: MELODY, version: 1.0.0}
21+
- {name: '@mchp-mcc/i2c-host-driver', type: MELODY, version: 1.1.0-dev.1}
22+
- {name: '@mchp-mcc/main-manager', type: MELODY, version: 3.1.2}
23+
- {name: '@mchp-mcc/pic-8bit', type: MELODY, version: 5.29.1-dev.6}
24+
- {name: '@mchp-mcc/pic18-configuration-bits-v1', type: MELODY, version: 5.3.5}
25+
- {name: '@mchp-mcc/pic18-pin-manager', type: MELODY, version: 3.7.1}
26+
- {name: '@mchp-mcc/pin-content-processor', type: MELODY, version: 3.9.1-feat.6}
27+
- {name: '@mchp-mcc/scf-pic8-i2c-v1', type: MELODY, version: 6.1.4}
28+
- {name: '@mchp-mcc/scf-pic8-interrupt-v1', type: MELODY, version: 5.2.11}
29+
- {name: '@mchp-mcc/scf-pic8-osc-v1', type: MELODY, version: 4.4.0}
30+
- {name: '@mchp-mcc/scf-pic8-tmr2-v1', type: MELODY, version: 5.1.1-dev.2}
31+
- {name: '@mchp-mcc/scf-pic8-uart-v1', type: MELODY, version: 7.2.0}
32+
- {name: '@mchp-mcc/timer', type: MELODY, version: 1.2.3}
33+
- {name: '@mchp-mcc/uart-driver', type: MELODY, version: 1.10.2}

0 commit comments

Comments
 (0)