説明を見る。00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <p24FJ64GA002.h>
00019
00020 #include "types.h"
00021 #include "ssm.h"
00022 #include "extmeter.h"
00023
00024 #include "libdac.h"
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 EXTMETER_T extmeter;
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 void EXTMETER_init(unsigned char target)
00052 {
00053 extmeter.target = target;
00054
00055
00056 switch(target){
00057 case EXTMETER_SPEED:
00058 extmeter.map[ 0 ] = 0;
00059 extmeter.map[ 1 ] = 12;
00060 extmeter.map[ 2 ] = 24;
00061 extmeter.map[ 3 ] = 36;
00062 extmeter.map[ 4 ] = 48;
00063 extmeter.map[ 5 ] = 60;
00064 extmeter.map[ 6 ] = 72;
00065 extmeter.map[ 7 ] = 84;
00066 extmeter.map[ 8 ] = 96;
00067 extmeter.map[ 9 ] = 108;
00068 extmeter.map[ 10 ] = 120;
00069 extmeter.map[ 11 ] = 132;
00070 extmeter.map[ 12 ] = 144;
00071 extmeter.map[ 13 ] = 156;
00072 extmeter.map[ 14 ] = 168;
00073 extmeter.map[ 15 ] = 180;
00074 break;
00075
00076 case EXTMETER_ENGINE:
00077 extmeter.map[ 0 ] = 0;
00078 extmeter.map[ 1 ] = 600;
00079 extmeter.map[ 2 ] = 1200;
00080 extmeter.map[ 3 ] = 2800;
00081 extmeter.map[ 4 ] = 3400;
00082 extmeter.map[ 5 ] = 4000;
00083 extmeter.map[ 6 ] = 4600;
00084 extmeter.map[ 7 ] = 5200;
00085 extmeter.map[ 8 ] = 5800;
00086 extmeter.map[ 9 ] = 6400;
00087 extmeter.map[ 10 ] = 7000;
00088 extmeter.map[ 11 ] = 7600;
00089 extmeter.map[ 12 ] = 8200;
00090 extmeter.map[ 13 ] = 8800;
00091 extmeter.map[ 14 ] = 9400;
00092 extmeter.map[ 15 ] = 10000;
00093 break;
00094
00095 case EXTMETER_BOOST:
00096 extmeter.map[ 0 ] = -1.000;
00097 extmeter.map[ 1 ] = -0.900;
00098 extmeter.map[ 2 ] = -0.700;
00099 extmeter.map[ 3 ] = -0.500;
00100 extmeter.map[ 4 ] = -0.300;
00101 extmeter.map[ 5 ] = -0.180;
00102 extmeter.map[ 6 ] = -0.000;
00103 extmeter.map[ 7 ] = 0.200;
00104 extmeter.map[ 8 ] = 0.350;
00105 extmeter.map[ 9 ] = 0.510;
00106 extmeter.map[ 10 ] = 0.700;
00107 extmeter.map[ 11 ] = 0.900;
00108 extmeter.map[ 12 ] = 1.050;
00109 extmeter.map[ 13 ] = 1.200;
00110 extmeter.map[ 14 ] = 1.400;
00111 extmeter.map[ 15 ] = 1.600;
00112 break;
00113
00114 case EXTMETER_THROTTLE:
00115 extmeter.map[ 0 ] = 00;
00116 extmeter.map[ 1 ] = 6.60;
00117 extmeter.map[ 2 ] = 13.20;
00118 extmeter.map[ 3 ] = 19.80;
00119 extmeter.map[ 4 ] = 26.40;
00120 extmeter.map[ 5 ] = 33.00;
00121 extmeter.map[ 6 ] = 39.60;
00122 extmeter.map[ 7 ] = 46.20;
00123 extmeter.map[ 8 ] = 52.80;
00124 extmeter.map[ 9 ] = 59.40;
00125 extmeter.map[ 10 ] = 66.00;
00126 extmeter.map[ 11 ] = 72.60;
00127 extmeter.map[ 12 ] = 79.20;
00128 extmeter.map[ 13 ] = 85.80;
00129 extmeter.map[ 14 ] = 92.40;
00130 extmeter.map[ 15 ] = 100.00;
00131 break;
00132
00133 case EXTMETER_COOLANT:
00134 case EXTMETER_INTAKEAIR:
00135 default:
00136 extmeter.map[ 0 ] = -40;
00137 extmeter.map[ 1 ] = -28;
00138 extmeter.map[ 2 ] = -16;
00139 extmeter.map[ 3 ] = -4;
00140 extmeter.map[ 4 ] = 8;
00141 extmeter.map[ 5 ] = 20;
00142 extmeter.map[ 6 ] = 32;
00143 extmeter.map[ 7 ] = 44;
00144 extmeter.map[ 8 ] = 56;
00145 extmeter.map[ 9 ] = 68;
00146 extmeter.map[ 10 ] = 80;
00147 extmeter.map[ 11 ] = 92;
00148 extmeter.map[ 12 ] = 104;
00149 extmeter.map[ 13 ] = 116;
00150 extmeter.map[ 14 ] = 128;
00151 extmeter.map[ 15 ] = 140;
00152 break;
00153 }
00154
00155 return;
00156 }
00157
00158
00159
00160
00161
00162
00163
00164
00165 BOOL EXTMETER_main(void)
00166 {
00167 unsigned int i;
00168 double data;
00169
00170
00171 switch(extmeter.target){
00172 case EXTMETER_SETTING: DAC_setvalue(extmeter.setting); return(TRUE);
00173
00174 case EXTMETER_SPEED: data = ssm_data.speed; break;
00175 case EXTMETER_ENGINE: data = ssm_data.engine; break;
00176 case EXTMETER_BOOST: data = ssm_data.boost; break;
00177 case EXTMETER_THROTTLE: data = ssm_data.throttle; break;
00178 case EXTMETER_COOLANT: data = ssm_data.coolant; break;
00179 case EXTMETER_INTAKEAIR: data = ssm_data.intakeair; break;
00180 default: break;
00181 }
00182
00183
00184 for(i = 1; i < EXTMETER_DIV; i++){
00185 if(extmeter.map[i - 1] <= data && data < extmeter.map[i]){
00186 DAC_setvalue(((i << 4) & 0xf0) | ((unsigned char)(((data - extmeter.map[i - 1]) / (extmeter.map[i] - extmeter.map[i - 1])) * EXTMETER_DIV) & 0x0f));
00187 }
00188 }
00189
00190 return(TRUE);
00191 }
00192
00193