mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-06-19 09:05:48 -04:00
0.B
歩数計修正(途中) 電源シーケンス修正 inita時に電源が切れないようにする(PWMを止められたらすぐに勝手にBLを消す) off時32kHzを止めるのを忘れていた git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@34 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
b6a9f86b9f
commit
1baefd91bb
106
trunk/accero.c
106
trunk/accero.c
@ -54,6 +54,8 @@ u16* hyst_pedometer;
|
||||
|
||||
// ========================================================
|
||||
task_interval tsk_soft_int( );
|
||||
static void pedo_increment();
|
||||
|
||||
|
||||
|
||||
|
||||
@ -88,14 +90,13 @@ task_status_immed tsk_cbk_accero( )
|
||||
// 歩数計 /////////////////////////////////////////////
|
||||
// offでなければ、電源off中でも計測
|
||||
// if( ( vreg_ctr[VREG_C_ACC_CONFIG] & VREG_BITMASK_ACC_CONF_HOSU ) != 0x00 )
|
||||
if( 1 )
|
||||
{
|
||||
static s16 th_H = 0x3500; // 閾値。暫定。動的変更とかしたい…
|
||||
static s16 th_H = 0x3500; // 閾値。暫定。動的変更とかしたい…ので変数
|
||||
static s16 th_L = 0x2A00;
|
||||
static u16 acc_norm[3]; // 加速度の大きさのヒストリ。数字が大きい方が古い
|
||||
static u8 direction; // (0)極大を待つか (1)極小を待つか
|
||||
static u16 interval; // 山と谷の間の時間。短すぎても長すぎてもはじく。
|
||||
static u16 interval_hh; // 山-山間の時間。短過ぎたらはじく。
|
||||
static u16 time_l; // 前回の極小からの経過時間
|
||||
|
||||
|
||||
u16 sx16 = abs( (u16)vreg_ctr[VREG_C_ACC_XH] * 256 + vreg_ctr[VREG_C_ACC_XL] );
|
||||
u16 sy16 = abs( (u16)vreg_ctr[VREG_C_ACC_YH] * 256 + vreg_ctr[VREG_C_ACC_YL] );
|
||||
@ -108,47 +109,95 @@ task_status_immed tsk_cbk_accero( )
|
||||
(long)sy16 * ( sy16 / 2 ) +
|
||||
(long)sz16 * ( sz16 / 2 ) );
|
||||
|
||||
if( direction == 0 ) // 前回は谷
|
||||
{
|
||||
if( acc_norm[2] <= acc_norm[1] && acc_norm[1] > acc_norm[0]
|
||||
&& acc_norm[0] > th_H ) // 極大で、閾値を超えていた
|
||||
&& acc_norm[0] > th_H )
|
||||
// 極大で、閾値を超えていた
|
||||
{
|
||||
direction = 1; // 極小を待つ
|
||||
interval = 0; // 極小までの時間を計る
|
||||
if(( 250 < interval_hh ) && ( interval_hh < 2000 ))
|
||||
// 前回の極大からの間隔がほどよい
|
||||
{
|
||||
if( time_l < interval_hh )
|
||||
// 谷を挟んでいる
|
||||
{
|
||||
// 一歩増えました
|
||||
pedo_increment();
|
||||
}
|
||||
}
|
||||
interval_hh = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
interval_hh += ( interval_hh != 65535 ) ? 1: 0; // 飽和加算って楽に書けたらいいのに
|
||||
}
|
||||
|
||||
// (2) 直近の極小からの時間
|
||||
if( acc_norm[2] >= acc_norm[1] && acc_norm[1] < acc_norm[0]
|
||||
&& acc_norm[0] < th_L )
|
||||
{
|
||||
direction = 0;
|
||||
if( 2 < interval && interval < 20 ) // 早すぎず、遅すぎず
|
||||
time_l += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 一歩加算。 いろいろ失敗した
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 )
|
||||
{
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 )
|
||||
{
|
||||
++vreg_ctr[ VREG_C_ACC_HOSU_H ];
|
||||
time_l = 0;
|
||||
}
|
||||
}
|
||||
if( ++*hyst_pedometer == 0 )
|
||||
{
|
||||
*hyst_pedometer = 65535;
|
||||
}
|
||||
}
|
||||
interval = 0;
|
||||
}
|
||||
interval += 1;
|
||||
}
|
||||
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
歩数+1
|
||||
累積をインクリメント
|
||||
履歴を更新
|
||||
========================================================*/
|
||||
static void pedo_increment()
|
||||
{
|
||||
static u8 last_hour; // 履歴の最新は何時?
|
||||
static u8 last_day;
|
||||
static u8 last_month;
|
||||
static u8 last_year;
|
||||
static u8 p_record;
|
||||
|
||||
// 累積の更新 //
|
||||
// いろいろ失敗した...
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 )
|
||||
{
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 )
|
||||
{
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 ){
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_L ] = 255; // カンスト orz
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_M ] = 255;
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_H ] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 毎時履歴の更新
|
||||
DI();
|
||||
RWAIT = 1;
|
||||
while( !RWST ){;}
|
||||
|
||||
if(( last_hour != HOUR ) || ( last_day != DAY ) || ( last_month != MONTH ) || ( last_year != YEAR ))
|
||||
{
|
||||
last_hour = HOUR;
|
||||
last_day = DAY;
|
||||
last_month = MONTH;
|
||||
last_year = YEAR;
|
||||
p_record += 1;
|
||||
*(hyst_pedometer + p_record) = 0;
|
||||
}
|
||||
RWAIT = 0;
|
||||
EI();
|
||||
|
||||
*(hyst_pedometer + p_record) += 1;
|
||||
if( *( hyst_pedometer + p_record ) == 65535 ) // 65535はマジックナンバーで
|
||||
{
|
||||
*hyst_pedometer = 65534;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
@ -228,7 +277,6 @@ task_status_immed acc_hosu_set( )
|
||||
// 完全停止
|
||||
str_send_buf[0] =
|
||||
( ACC_BITS_PM_PDN << ACC_bP_PM0 | 0 << ACC_bP_DR0 | ACC_BITS_ALL_AXIS_ON );
|
||||
hyst_pedometer = (u16*)pool; // 止めるとヒストリが無効になります(暫定)
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -4,8 +4,14 @@
|
||||
|
||||
#include "jhl_defs.h"
|
||||
|
||||
task_status_immed tsk_cbk_accero( );
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
extern u16* hyst_pedometer;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
task_status_immed tsk_cbk_accero( );
|
||||
task_status_immed acc_hosu_set( );
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
#define MCU_VER_MAJOR 0x00;
|
||||
#define MCU_VER_MINOR 0x0B;
|
||||
#define MCU_VER_MINOR 0x0C;
|
||||
|
||||
#define _OVERCLOCK_
|
||||
|
||||
|
@ -68,6 +68,8 @@ void main_loop( void )
|
||||
renge_init( );
|
||||
renge_task_interval_run_force = 1;
|
||||
|
||||
hyst_pedometer = (u16*)pool;
|
||||
|
||||
EI( );
|
||||
|
||||
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */
|
||||
|
24
trunk/pm.c
24
trunk/pm.c
@ -52,8 +52,6 @@ u8 command_bl_set;
|
||||
static void PM_get_batt_left();
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************************************//**
|
||||
PMIC達の初期化
|
||||
\n 電池メーカー識別
|
||||
@ -236,8 +234,9 @@ task_status_immed PM_bt_temp_update( )
|
||||
err PM_LCD_on( )
|
||||
{
|
||||
// PM_TEG_LCD_dis( 0 ); // 何もしない
|
||||
wait_ms( DELAY_PM_TSS_50B_AND_VCOM );
|
||||
wait_ms( DELAY_PM_VCOM_TO_BL );
|
||||
wait_ms( DELAY_PM_5V_TO_TCOM );
|
||||
wait_ms( DELAY_PM_TCOM_TO_VCS );
|
||||
wait_ms( DELAY_PM_VCS_TO_BL );
|
||||
vreg_ctr[VREG_C_STATUS] |= REG_BIT_LCD_POW;
|
||||
set_irq( VREG_C_IRQ3, REG_BIT_LCD_ON );
|
||||
return ( PM_chk_LDSW( ) );
|
||||
@ -278,7 +277,6 @@ err PM_BL_set( u8 dat )
|
||||
}
|
||||
|
||||
// Write
|
||||
|
||||
if( blset != 0x00 ){
|
||||
wait_ms( 10 );
|
||||
}
|
||||
@ -362,7 +360,7 @@ err PM_LCD_on( )
|
||||
|
||||
PM_VDDLCD_on( );
|
||||
|
||||
wait_ms( DELAY_PM_TSS_50B_AND_VCOM );
|
||||
wait_ms( DELAY_PM_TSS_50B_AND_TCOM );
|
||||
|
||||
PM_TCOM_on( );
|
||||
|
||||
@ -553,7 +551,6 @@ err PM_sys_pow_on( )
|
||||
PM_reset_neg( );
|
||||
RESET2_neg;
|
||||
FCRAM_RST_neg;
|
||||
return ( ERR_SUCCESS );
|
||||
|
||||
#else
|
||||
// TWL PMIC
|
||||
@ -590,8 +587,9 @@ err PM_sys_pow_on( )
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
|
||||
return ( ERR_SUCCESS );
|
||||
#endif
|
||||
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
@ -603,8 +601,8 @@ err PM_sys_pow_on( )
|
||||
err PM_sys_pow_off( )
|
||||
{
|
||||
#ifdef _PMIC_CTR_
|
||||
PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
|
||||
PM_LCD_off( ); // TCOM,VCS OFF も消してきます。
|
||||
// PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
|
||||
// PM_LCD_off( ); // TCOM,VCS OFF も消してきます。
|
||||
|
||||
PM_reset_ast( );
|
||||
RESET2_ast;
|
||||
@ -717,7 +715,7 @@ void tsk_batt( )
|
||||
#endif
|
||||
}
|
||||
#ifdef _MODEL_WM0_
|
||||
BT_CHG_EN_n = 0; // /WL_RSTなのです
|
||||
BT_CHG_EN_n = 0; // /WL_RSTです...
|
||||
#endif
|
||||
|
||||
// 充電 //
|
||||
@ -870,8 +868,6 @@ static void PM_get_batt_left(){
|
||||
// PMIC-NTRに電池残量を教えてあげる
|
||||
iic_mcu_write_a_byte( IIC_SLA_CODEC,
|
||||
CODEC_REG_BT,
|
||||
( vreg_ctr[ VREG_C_BT_REMAIN ] < 5 ) ); // 1で電池切れ
|
||||
|
||||
|
||||
( vreg_ctr[ VREG_C_BT_REMAIN ] < 5 )? 1 : 0 ); // 1で電池切れ
|
||||
|
||||
}
|
||||
|
@ -70,9 +70,9 @@ enum BT_GAUGE_REG_ADRS
|
||||
|
||||
|
||||
#define DELAY_PM_TW_PWUP 16
|
||||
#define DELAY_PM_TSS_50B_AND_VCOM ( 5 + 17 )
|
||||
#define DELAY_PM_5V_TO_VCOM 17
|
||||
#define DELAY_PM_TCOM_TO_VCS 17
|
||||
#define DELAY_PM_TSS_50B_AND_TCOM 17
|
||||
#define DELAY_PM_5V_TO_TCOM 17
|
||||
#define DELAY_PM_TCOM_TO_VCS 3
|
||||
#define DELAY_PM_VCS_TO_BL ( 17 + 5 )
|
||||
#define DELAY_PM_LCD_OFF ( 50 + 1 )
|
||||
|
||||
|
@ -12,6 +12,7 @@ void rtc_unlock( );
|
||||
|
||||
// ------------------------------------
|
||||
#define RTC_32k_on() { RCLOE0 = 1; }
|
||||
#define RTC_32k_off() { RCLOE0 = 0; }
|
||||
|
||||
|
||||
// ------------------------------------
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
//=========================================================
|
||||
#define INTERVAL_TSK_SW 16
|
||||
#define CLICK_THRESHOLD 3
|
||||
#define CLICK_THRESHOLD 2
|
||||
#define HOLD_THREASHOLD (u8)( 600 / INTERVAL_TSK_SW )
|
||||
|
||||
|
||||
|
@ -188,6 +188,7 @@ void tsk_sys( )
|
||||
IIC_ctr_Stop( );
|
||||
IIC_twl_Stop( );
|
||||
iic_mcu_stop( );
|
||||
RTC_32k_off();
|
||||
|
||||
vreg_ctr[VREG_C_IRQ0] = 0;
|
||||
vreg_ctr[VREG_C_IRQ1] = 0;
|
||||
@ -300,6 +301,8 @@ static void chk_emergencyExit(){
|
||||
else
|
||||
{
|
||||
// デバッガなりがリセットをかけた
|
||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL, 0 );
|
||||
vreg_ctr[VREG_C_STATUS] = ( vreg_ctr[VREG_C_STATUS] & 0b10011111 );
|
||||
vreg_ctr[VREG_C_COMMAND0] |= REG_BIT_RESET1_REQ;
|
||||
renge_task_immed_add( do_command );
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -7,12 +7,12 @@ FrameCY=1043
|
||||
OpenFile1=task_misc.c,0,220,220,1464,977,0,1,0,0
|
||||
OpenFile2=task_sys.c,0,308,308,1552,1065,0,256,0,0
|
||||
OpenFile3=renge\renge.c,0,330,330,1574,1087,0,172,0,0
|
||||
OpenFile4=pm.c,0,286,286,1530,1043,27,542,30,0
|
||||
OpenFile5=loader.c,0,154,154,1398,911,0,264,0,0
|
||||
OpenFile6=task_debug.c,0,324,114,1568,871,25,13,57,0
|
||||
OpenFile7=ProjectWindow
|
||||
OpenFile4=loader.c,0,154,154,1398,911,0,264,0,0
|
||||
OpenFile5=task_debug.c,0,324,114,1568,871,25,13,57,0
|
||||
OpenFile6=ProjectWindow
|
||||
PrjPos=0,2,754,3,253
|
||||
OpenFile8=config.h,0,264,264,1508,1021,0,20,0,0
|
||||
OpenFile7=config.h,0,264,264,1508,1021,2,19,21,0
|
||||
OpenFile8=pm.c,0,411,311,1655,1068,0,781,0,0
|
||||
OpenFile9=OutputWindow
|
||||
OutputPos=0,48,992,426,1226
|
||||
ActivePRJ=yav_mcu_bsr.prj
|
||||
|
@ -11,7 +11,7 @@ T=4b0e133a
|
||||
7=rtc.h
|
||||
8=reboot.h
|
||||
[pm.c]
|
||||
T=4b131a22
|
||||
T=4b1868e0
|
||||
1=incs.h
|
||||
2=adc.h
|
||||
3=led.h
|
||||
@ -94,7 +94,7 @@ T=4b03c375
|
||||
T=4afd21cb
|
||||
1=incs_loader.h
|
||||
[sw.c]
|
||||
T=4b04cee4
|
||||
T=4b187240
|
||||
1=incs.h
|
||||
2=i2c_twl.h
|
||||
3=i2c_ctr.h
|
||||
@ -103,7 +103,7 @@ T=4b04cee4
|
||||
6=pm.h
|
||||
7=rtc.h
|
||||
[task_debug.c]
|
||||
T=4b13151d
|
||||
T=4b14e842
|
||||
1=incs.h
|
||||
2=renge\renge.h
|
||||
3=pm.h
|
||||
@ -115,7 +115,7 @@ T=4b0b8f86
|
||||
3=pm.h
|
||||
4=accero.h
|
||||
[task_sys.c]
|
||||
T=4b0cf543
|
||||
T=4b161be1
|
||||
1=incs.h
|
||||
2=i2c_twl.h
|
||||
3=i2c_ctr.h
|
||||
@ -141,7 +141,7 @@ T=4b023fdb
|
||||
T=4b0d0086
|
||||
1=config.h
|
||||
[config.h]
|
||||
T=4b131da1
|
||||
T=4b189379
|
||||
[bsr_system.h]
|
||||
T=4afd21ca
|
||||
[renge\renge.h]
|
||||
@ -170,9 +170,9 @@ T=4afd21cb
|
||||
[i2c_ctr.h]
|
||||
T=4afd21cb
|
||||
[pm.h]
|
||||
T=4b0b8f87
|
||||
T=4b1637ee
|
||||
[rtc.h]
|
||||
T=4afd21cb
|
||||
T=4b161be1
|
||||
[adc.h]
|
||||
T=4afd21cb
|
||||
1=jhl_defs.h
|
||||
|
Loading…
Reference in New Issue
Block a user