- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
using PSoC Creator 4.3 with PDL v3 = 3.1.2 and PDL v2 = 2.1.0. The BLE Device is configured as Peripheral the connection settings are the following:
/* 8 x 1.25 = 10 ms */
#define MINIMUM_CONNECTION_INTERVAL (8u)
/* 8 x 1.25 = 10 ms */
#define MAXIMUM_CONNECTION_INTERVAL (8u)
/* 125 connection interval skips */
#define SLAVE_LATENCY 12
/* Supervision timeout of 3 second */
#define SUPERVISION_TIMEOUT (300u)
I use an BLE-Dongle as Central to activate Notifications. If they activated the Peripheral sends Notifications via BLE and than enter DeepSleep Mode. The WatchDogTimer is used to wakeup the System every 2 s. I recognized with an Poweranalyzer that the Powerconsumption is sometimes higher than I expected. It seems like the BLE device is running faulty in the background.
The sequence is:
trigger sensor measurement
enter DeepSleep
WatchDogTimer interrupt // after 25ms
read out sensor
send Notification
enter DeepSleep
WatchDogTimer interrupt // after 2 s
Bad:
Good:
Can someone explain what going with the BLE device? Why sometimes it work and why not?
regards,
Alex
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Ganesh,
The right incoming of data I've checked with a CYC8PROTO-Board configured as Central with my own written GUI and with the Cypress BLE-Dongle CY5677 and CySmart 1.3. The devices lay on my table with a distance of 30 cm.
I think the problem is the CM0 Core, configured as controller, should not enter into DeepSleep without checking the BLE-Controller state. I add the following to main loop in CM0:
while(1)
{
Cy_BLE_ProcessEvents();
if( Cy_BLE_ControllerLPM( CY_BLE_BLESS_DEEPSLEEP ) == CY_BLE_BLESS_DEEPSLEEP )
{
Cy_SysPm_DeepSleep( CY_SYSPM_WAIT_FOR_INTERRUPT );
}
}
With this the high current consumption seems eliminated. I add an Code example were it is realized like in my Project.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Alex,
The physical and Datalink layer handles the data transfer between the Server and Client. Due to environmental factors if the Central misses to receive the correct data (checksum is checked) then the server will send the notification again. This might take the additional time you are observing.
Can you keep the Server and Client devices close to each other and check if you are observing the same?
Are you seeing error in data received by the central?
What is the difference in current consumption you have observed?
Thanks
Ganesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Ganesh,
The right incoming of data I've checked with a CYC8PROTO-Board configured as Central with my own written GUI and with the Cypress BLE-Dongle CY5677 and CySmart 1.3. The devices lay on my table with a distance of 30 cm.
I think the problem is the CM0 Core, configured as controller, should not enter into DeepSleep without checking the BLE-Controller state. I add the following to main loop in CM0:
while(1)
{
Cy_BLE_ProcessEvents();
if( Cy_BLE_ControllerLPM( CY_BLE_BLESS_DEEPSLEEP ) == CY_BLE_BLESS_DEEPSLEEP )
{
Cy_SysPm_DeepSleep( CY_SYSPM_WAIT_FOR_INTERRUPT );
}
}
With this the high current consumption seems eliminated. I add an Code example were it is realized like in my Project.