歩数計修正(途中)
電源シーケンス修正
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:
fujita_ryohei 2009-12-04 08:18:29 +00:00
parent b6a9f86b9f
commit 1baefd91bb
12 changed files with 561 additions and 579 deletions

View File

@ -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 );
}
/*=========================================================
 
  
 
========================================================*/
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
{

View File

@ -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

View File

@ -6,7 +6,7 @@
#define MCU_VER_MAJOR 0x00;
#define MCU_VER_MINOR 0x0B;
#define MCU_VER_MINOR 0x0C;
#define _OVERCLOCK_

View File

@ -68,6 +68,8 @@ void main_loop( void )
renge_init( );
renge_task_interval_run_force = 1;
hyst_pedometer = (u16*)pool;
EI( );
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */

View File

@ -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で電池切れ
}

View File

@ -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 )

View File

@ -12,6 +12,7 @@ void rtc_unlock( );
// ------------------------------------
#define RTC_32k_on() { RCLOE0 = 1; }
#define RTC_32k_off() { RCLOE0 = 0; }
// ------------------------------------

View File

@ -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 )

View File

@ -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

View File

@ -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

View File

@ -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