-
Notifications
You must be signed in to change notification settings - Fork 0
/
skS11059-02DT.c
255 lines (226 loc) · 7.95 KB
/
skS11059-02DT.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
/*******************************************************************************
* skADXL345I2C - ADXL345関数ライブラリ(I2Cバージョン) *
* このライブラリは、ADXL345を使った3軸加速度センサモジュール用です *
* 現在このライブラリは各軸の値を読み込む機能のみ対応です。 *
* *
* acceler_Init - ADXL345の初期化を行う処理 *
* acceler_Read - ADXL345の各軸の値を読み込む処理 *
* *
* メモ:__delay_us() を使用しているので "skADXL345I2C.h" に *
* "#define _XTAL_FREQ 8000000"が記述されています、 *
* 8MHz以外のCPUクロックにする人は書き換えましょう。 *
* ============================================================================ *
* VERSION DATE BY CHANGE/COMMENT *
* ---------------------------------------------------------------------------- *
* 1.00 2014-01-29 きむ茶工房(きむしげ) Create *
* 1.01 2014-03-29 きむ茶工房(きむしげ) ファイル名とacceler_Initの変更 *
* 1.10 2015-10-10 きむ茶工房(きむしげ) MPLAB X・XC8 V1.32用に書換え *
* ============================================================================ *
* PIC 12F1822 16F1827 (このライブラリ自体は他のPICでもOKと思います) *
* MPLAB IDE(V8.84) MPLAB X(v2.15) *
* MPLAB(R) XC8 C Compiler Version 1.00/1.32 *
*******************************************************************************/
#include <xc.h>
#include "mcc_generated_files/mcc.h"
#include "skI2Clib.h"
#include "skS11059-02DT.h"
#include "skI2CLCDlib.h"
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
uint8_t a[4]={};
uint8_t b[4]={};
uint16_t c[4]={};
// ADXL345のレジスターからデータを読み込む処理
// adress : 読み込むアドレスを指定
//int register_read(char address)
//{
// int ans ;
//
// ans = I2C_Start(S11059_ADRES,RW_0); // スタートコンディションを発行する
// if (ans == 0) {
// I2C_Send(address) ; // レジスタアドレスの送信
// I2C_rStart(S11059_ADRES,RW_1) ; // リピート・スタートコンディションを発行する
// ans = I2C_Receive(NOACK); // データ内容を受信する
// } else ans = -1 ;
// I2C_Stop() ; // ストップコンディションを発行する
// return ans ;
//}
// ADXL345のレジスターにデータを書き込む処理
// adress : 書き込むアドレスを指定
// val : 書き込むデータを指定
//int register_write(char address, char val)
//{
// int ans ;
//
// ans = I2C_Start(S11059_ADRES,RW_0); // スタートコンディションを発行する
// if(ans == 0){
// I2C_Send(address) ; // レジスタアドレスの送信
// I2C_Send(val) ; // データ内容の送信
//
// } else ans = -1 ;
// return ans ;
//}
//int register_rewrite(char address, char val)
//{
// int ans ;
//
// ans = I2C_rStart(S11059_ADRES,RW_0); // スタートコンディションを発行する
// if (ans == 0) {
// I2C_Send(address) ; // レジスタアドレスの送信
// I2C_Send(val) ; // データ内容の送信
// } else ans = -1 ;
// return ans ;
//}
//int register_write_read(char address)
//{
// int ans ;
//
// ans = I2C_Start(S11059_ADRES,RW_0); // スタートコンディションを発行する
// if(ans == 0){
// I2C_Send(address) ; // レジスタアドレスの送信
//// I2C_Send(val) ; // データ内容の送信
//
// } else ans = -1 ;
// I2C_rStart(S11059_ADRES,RW_1); // スタートコンディションを発行する
// return ans ;
//}
/*******************************************************************************
* ans = acceler_Init() *
* ADXL345の初期化を行う処理 *
* ans = -1ならADXL345が応答していない *
*******************************************************************************/
//int ColorSensor_Init(void)
//{
// int ans ;
//
// register_write(CONTROL,0x89) ; // ADCリセット、スリープ解除
// register_rewrite(CONTROL,0x09) ; // ADCリセット解除、バスリリース
//
// I2C_Stop(); // ストップコンディションを発行する
// __delay_ms(1000);
//
// register_write_read(0x03);
//
//
//
//}
/*******************************************************************************
* void Color_Read(void) *
* 各色の値を読み込む処理。先に1回、初期設定ありのColor();を実行すること *
* *
*******************************************************************************/
void Color_Read(void)
{
char buf[16];
int i;
int ans ;
__delay_ms(100);
ans =I2C_Start(0x2A,RW_0);
if (ans == 0) {
I2C_Send(0x03);
}
ans =I2C_rStart(0x2A,RW_1);
i=0;
a[i]=I2C_Receive(ACK);
b[i]=I2C_Receive(ACK);
c[i]=(a[i]<<8)|b[i];
i++;
a[i]=I2C_Receive(ACK);
b[i]=I2C_Receive(ACK);
c[i]=(a[i]<<8)|b[i];
i++;
a[i]=I2C_Receive(ACK);
b[i]=I2C_Receive(ACK);
c[i]=(a[i]<<8)|b[i];
i++;
a[i]=I2C_Receive(ACK);
b[i]=I2C_Receive(NOACK);
c[i]=(a[i]<<8)|b[i];
I2C_Stop();
LCD_Clear() ;
__delay_ms(20);
i=0;
sprintf(buf,"R:0x%04x",c[i]);
LCD_Puts(buf);
__delay_ms(10);
i++;
sprintf(buf,"G:0x%04x",c[i]);
LCD_Puts(buf);
__delay_ms(10);
i++;
LCD_SetCursor(0,1);
__delay_ms(10);
sprintf(buf,"B:0x%04x",c[i]);
LCD_Puts(buf);
__delay_ms(10);
i++;
sprintf(buf,"I:0x%04x",c[i]);
LCD_Puts(buf);
__delay_ms(10);
}
/*******************************************************************************
* void Color(void) *
* ST11059の初期設定と各色の値を読み込む処理 *
* 固定時間モード、Highゲイン、22.4ms/ch *
*******************************************************************************/
void Color(void){
char buf[16];
int i;
int ans ;
ans =I2C_Start(0x2A,RW_0);
if (ans == 0) {
I2C_Send(0x00);
I2C_Send(0x8A);
}
__delay_ms(10);
ans =I2C_rStart(0x2A,RW_0);
if (ans == 0) {
I2C_Send(0x00);
I2C_Send(0x0A);
}
I2C_Stop();
__delay_ms(120);
ans =I2C_Start(0x2A,RW_0);
if (ans == 0) {
I2C_Send(0x03);
}
ans =I2C_rStart(0x2A,RW_1);
i=0;
a[i]=I2C_Receive(ACK);
b[i]=I2C_Receive(ACK);
c[i]=(a[i]<<8)|b[i];
i++;
a[i]=I2C_Receive(ACK);
b[i]=I2C_Receive(ACK);
c[i]=(a[i]<<8)|b[i];
i++;
a[i]=I2C_Receive(ACK);
b[i]=I2C_Receive(ACK);
c[i]=(a[i]<<8)|b[i];
i++;
a[i]=I2C_Receive(ACK);
b[i]=I2C_Receive(NOACK);
c[i]=(a[i]<<8)|b[i];
I2C_Stop();
LCD_Clear() ;
__delay_ms(20);
i=0;
sprintf(buf,"R:0x%04x",c[i]);
LCD_Puts(buf);
__delay_ms(20);
i++;
sprintf(buf,"G:0x%04x",c[i]);
LCD_Puts(buf);
__delay_ms(20);
i++;
LCD_SetCursor(0,1);
__delay_ms(20);
sprintf(buf,"B:0x%04x",c[i]);
LCD_Puts(buf);
__delay_ms(20);
i++;
sprintf(buf,"I:0x%04x",c[i]);
LCD_Puts(buf);
__delay_ms(20);
}