Skip to content

Commit c89aee1

Browse files
Prasanna MahendravadaSachin Shewale
authored andcommitted
Pull request #9: Feature/MPAE-17723 port mcc
Merge in EBE/pic18f47q10-adc-dc-motor-with-touch-interface-mplab from feature/MPAE-17723-port-mcc to develop
1 parent dbb60e9 commit c89aee1

File tree

89 files changed

+55853
-61279
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+55853
-61279
lines changed

.main-meta/main.json

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@
22
"metaDataVersion": "1.0.0",
33
"category": "com.microchip.ide.project",
44
"content": {
5-
"metaDataVersion": "1.1.0",
5+
"metaDataVersion": "1.3.0",
66
"name": "com.microchip.mcu8.mplabx.project.pic18f47q10-adc-dc-motor-with-touch-interface-mplab",
7-
"version": "1.0.2",
7+
"version": "2.0.0",
88
"displayName": "DC Motor Control using Capacitive Touch Interface",
99
"projectName": "pic18f47q10-adc-dc-motor-with-touch-interface-mplab",
1010
"shortDescription": "This demo is developed using PIC18-Q10 family MCU and Curiosity Nano development board. The demo demonstrates the usage of ADCC with hardware CVD technique and PWM peripherals of PIC18F47Q10 MCU to control DC motor through capacitive touch interface.",
1111
"ide": {
1212
"name": "MPLAB X",
13-
"semverRange": ">=5.40.0"
13+
"semverRange": ">=6.20.0"
1414
},
1515
"compiler": [
1616
{
1717
"name": "XC8",
18-
"semverRange": "^2.30.0"
18+
"semverRange": "^2.46.0"
1919
}
2020
],
2121
"dfp": {
2222
"name": "PIC18F-Q_DFP",
23-
"semverRange": "^1.8.154"
23+
"semverRange": "^1.25.433"
2424
},
2525
"configurator": {
2626
"name": "MCC",
27-
"semverRange": ">=4.0.1"
27+
"semverRange": ">=5.5.0"
2828
},
2929
"device": {
3030
"metaDataVersion": "1.0.0",
@@ -36,26 +36,14 @@
3636
"versionRange": "*"
3737
}
3838
},
39-
"author": "Microchip",
40-
"subcategories": [
41-
"Motor Control",
42-
[
43-
"Peripherals", "TMR2"
44-
],
45-
[
46-
"Peripherals", "PWM"
47-
],
48-
[
49-
"Peripherals", "ADCC"
50-
]
51-
],
39+
"author": "Prasanna Mahendravada",
40+
5241
"peripherals": [
5342
"TMR2","PWM","ADCC"
5443
],
5544
"keywords": [
5645
"mTouch",
57-
"CVD",
58-
"Curiosity Nano",
46+
"CVD",
5947
"Fan Controller",
6048
"Slider",
6149
"Motor Control PWM",

README.md

Lines changed: 88 additions & 149 deletions
Large diffs are not rendered by default.
Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
/*
2+
© [2024] 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+
#include "application.h"
23+
24+
static key_t keyInfo;
25+
static uint16_t state = GET_EVENT;
26+
static e_key buttonNo = NO_KEY;
27+
static uint16_t motorState = HALTED;
28+
29+
void ApplicationTask(void)
30+
{
31+
uint16_t motorSpeed = SPEED0;
32+
33+
switch (state)
34+
{
35+
case GET_EVENT:
36+
//Check if any button/slider pressed/released event is pending
37+
if (GetEvent() != NO_KEY)
38+
{
39+
buttonNo = GetButton();
40+
if (buttonNo < MAX_KEYS)
41+
{
42+
state = GET_CMD;
43+
}
44+
ClearButton();
45+
ClearEvent();
46+
}
47+
break;
48+
49+
case GET_CMD:
50+
if (buttonNo == BUTTON1)
51+
{
52+
state = MOTOR_START;
53+
}
54+
else if (buttonNo == BUTTON2)
55+
{
56+
state = MOTOR_STOP;
57+
}
58+
else if (buttonNo == SLIDER)
59+
{
60+
state = SPEED_CTRL;
61+
}
62+
else
63+
{
64+
state = GET_EVENT;
65+
}
66+
// Clear the button to update in next event received
67+
buttonNo = NO_KEY;
68+
break;
69+
70+
case MOTOR_START:
71+
if (motorState != RUNNING)
72+
{
73+
motorState = RUNNING;
74+
//Set the DC Motor 8 Click EN pin
75+
EN_SetHigh();
76+
//Set the motor speed to minimum
77+
PWM4_LoadDutyValue(MIN_SPEED);
78+
TurnOnSliderLED1();
79+
BUTTON_LED2_SetHigh();
80+
BUTTON_LED1_SetLow();
81+
}
82+
else
83+
{
84+
state = GET_EVENT;
85+
}
86+
break;
87+
88+
case MOTOR_STOP:
89+
if (motorState == RUNNING)
90+
{
91+
motorState = HALTED;
92+
93+
//Reset the DC Motor 8 Click EN pin
94+
EN_SetLow();
95+
96+
//Set the motor speed to 0
97+
PWM4_LoadDutyValue(SPEED0);
98+
TurnOffSliderLEDs();
99+
BUTTON_LED1_SetHigh();
100+
BUTTON_LED2_SetLow();
101+
}
102+
else
103+
{
104+
state = GET_EVENT;
105+
}
106+
break;
107+
108+
case SPEED_CTRL:
109+
if (motorState == RUNNING)
110+
{
111+
// Get the motor speed value depending upon predefined ranges
112+
motorSpeed = GetMotorSpeed(keyInfo.sliderADCValue);
113+
//Set the motor speed to corresponding motor speed value
114+
PWM4_LoadDutyValue(motorSpeed);
115+
keyInfo.sliderADCValue = 0;
116+
}
117+
state = GET_EVENT;
118+
break;
119+
120+
default:
121+
state = GET_EVENT;
122+
break;
123+
124+
}
125+
}
126+
127+
void ProcessButtonRelease(enum mtouch_button_names button)
128+
{
129+
switch (button)
130+
{
131+
case Button0:
132+
keyInfo.key = BUTTON1;
133+
keyInfo.keyStatus = KEY_RELEASED;
134+
break;
135+
136+
case Button1:
137+
keyInfo.key = BUTTON2;
138+
keyInfo.keyStatus = KEY_RELEASED;
139+
break;
140+
141+
default:
142+
break;
143+
144+
}
145+
}
146+
147+
void ProcessSliderChange(enum mtouch_slider_names slider)
148+
{
149+
keyInfo.key = SLIDER;
150+
keyInfo.keyStatus = KEY_PRESSED;
151+
keyInfo.sliderADCValue = MTOUCH_Slider_Position_Get(Slider0);
152+
}
153+
154+
e_key_state GetEvent(void)
155+
{
156+
return keyInfo.keyStatus;
157+
}
158+
159+
void ClearEvent(void)
160+
{
161+
keyInfo.keyStatus = KEY_NO_ACTION;
162+
}
163+
164+
e_key GetButton(void)
165+
{
166+
return keyInfo.key;
167+
}
168+
169+
void ClearButton(void)
170+
{
171+
keyInfo.key = NO_KEY;
172+
}
173+
174+
uint16_t GetMotorSpeed(uint16_t adcVal)
175+
{
176+
uint16_t retVal = 0;
177+
178+
if (adcVal < SLIDER_COUNT_MIN)
179+
{
180+
//turn off all the slider LEDs
181+
TurnOffSliderLEDs();
182+
retVal = SPEED0;
183+
}
184+
else if ((adcVal > (SLIDER_COUNT_MIN - 1) ) && (adcVal < SLIDER_COUNT_1))
185+
{
186+
//turn on slider LED 1
187+
TurnOnSliderLED1();
188+
retVal = SPEED1;
189+
}
190+
else if ((adcVal > (SLIDER_COUNT_1 - 1)) && (adcVal < SLIDER_COUNT_2))
191+
{
192+
//turn on slider LED 1 and 2
193+
TurnOnSliderLED2();
194+
retVal = SPEED2;
195+
}
196+
else if ((adcVal > (SLIDER_COUNT_2 - 1)) && (adcVal < SLIDER_COUNT_3))
197+
{
198+
//turn on slider LED 1, 2 and 3
199+
TurnOnSliderLED3();
200+
retVal = SPEED3;
201+
}
202+
else if ((adcVal > (SLIDER_COUNT_3 - 1)) && (adcVal < SLIDER_COUNT_4))
203+
{
204+
//turn on slider LED 1, 2, 3 and 4
205+
TurnOnSliderLED4();
206+
retVal = SPEED4;
207+
}
208+
else if ((adcVal > (SLIDER_COUNT_4 - 1)) && (adcVal < SLIDER_COUNT_MAX))
209+
{
210+
//turn on slider LED 1, 2, 3, 4 and 5
211+
TurnOnSliderLED5();
212+
retVal = SPEED5;
213+
}
214+
else if (adcVal > (SLIDER_COUNT_MAX - 1) )
215+
{
216+
//turn on all the slider LEDs 1, 2, 3, 4, 5 and 6
217+
TurnOnSliderLED6();
218+
retVal = MAX_SPEED;
219+
}
220+
else
221+
{
222+
retVal = 0;
223+
}
224+
return retVal;
225+
}
226+

0 commit comments

Comments
 (0)