PowerPoint プレゼンテーション

Similar documents
PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

mbed_library_study_meeting_v1.0.key

CM-3G 周辺モジュール拡張技術文書 MS5607センサ(温度、気圧)

CM1-GTX

Microsoft Word - マイコンを用いた信号# doc

Microsoft Word - SU1202教本(Disp)原稿.docx

thesis.dvi

3. スイッチ設定 ( 表 3) モジュール SW4 SW5 C1 OFF 下 (GND) C2 OFF 下 (GND) C3 OFF 下 (GND) C4 OFF 下 (GND) C5 OFF 上 (R/-W) C6 ON 下 (GND) 使用するモジュールに応じて, スイッチを切り換えて下さい.

untitled

(Making the electronic circuit with use of micro-processor)

r07.dvi

ohp07.dvi

AN15880A

untitled

64bit SSE2 SSE2 FPU Visual C++ 64bit Inline Assembler 4 FPU SSE2 4.1 FPU Control Word FPU 16bit R R R IC RC(2) PC(2) R R PM UM OM ZM DM IM R: reserved

1 1 TA, ,9 1. ( 2. TM TM GUI TM 1. P7-13 TM Notepad, Meadow, ( P109 ). 2. (shisaku01/sys test)

MAX191 EV J

WAGO Profibus /-833及び三菱MELSEC Q02HCPU/QJ71PB92Dのコンフィグレーション

joho07-1.ppt

TOS7200 CD-ROM DUT PC 1.0X p.15 NEMA Vac/10 A [85-AA-0003] m : CEE7/7 : 250Vac/10 A [85-AA-0005] : GB1002 : 250Vac/10A [ ] 2016

Untitled

#define HOUR 0x04 #define DAY 0x05 #define WEEKDAY 0x06 #define MONTH 0x07 #define YEAR 0x08 #define CKOUT 0x0D #define CTRLT 0x0E // CLKOUT // TIMER

USB モジュール

RX600 & RX200シリーズ アプリケーションノート RX用仮想EEPROM

表 示 制 御 16 文 字 2 行 の 表 示 が 可 能 ですが, 内 部 アドレスと LCD 画 面 とは 連 続 したアドレスに 配 置 されていませ ん A +0B +0C +0D +0E +0F +40

DB0

電気的特性 (Ta=25 C) 項目 記号 条件 Min. Typ. Max. 単位 読み出し周波数 * 3 fop khz ラインレート * Hz 変換ゲイン Gc ゲイン =2-5 - e-/adu トリガ出力電圧 Highレベル Vdd V -

CM-3G 周辺モジュール拡張技術文書 INA226センサ(電流、電圧、電力)

untitled

PIC

GM-F520S/GM-F470S/GM-F420S


スライド 1

[ 1] 1 Hello World!! 1 #include <s t d i o. h> 2 3 int main ( ) { 4 5 p r i n t f ( H e l l o World!! \ n ) ; 6 7 return 0 ; 8 } 1:

DUSx200 シリーズコントローラ I2C インターフェース仕様書

AN-1077: ADXL345 Quick Start Guide

untitled

(Version: 2017/4/18) Intel CPU 1 Intel CPU( AMD CPU) 64bit SIMD Inline Assemler Windows Visual C++ Linux gcc 2 FPU SSE2 Intel CPU do

スライド 1

超初心者用

スライド 1

MPL115A

‚æ4›ñ

3 5 動作試験 変調せず超音波を出し続ける (DC 出力) と, 最初の 15 秒程度は ピーーー という高周波音が聞こえ, そ れから ブブブブ というノイズが混ざり始めた. DC 出力の超音波焦点を電子秤に照射したところ, 最初は 0.60 g と表示されるものの, ノイズが混ざり始めると 0

PIC倒立振子

DA100データアクイジションユニット通信インタフェースユーザーズマニュアル

パーツリスト 組み立て前にすべてのパーツがそろっているかご確認ください 種類 品番 数 種類 品番 数 基板 I2C LCD 1 コンデンサ 0.1uF (104) 積層セラミック 1 IC ATtiny コンデンサ 10uF 電解 1 半固定抵抗 10~50kΩ 1 コネクタ IC ソ

MQTT V3.1 プロトコル仕様

NL-20取扱説明書_操作編

(2 Linux Mozilla [ ] [ ] [ ] [ ] URL 2 qkc, nkc ~/.cshrc (emacs 2 set path=($path /usr/meiji/pub/linux/bin tcsh b

R1RW0408D シリーズ

表 信号端子 端子名 入出力 機能 DTR 出力 COM ポート DTR (Data Terminal Ready Control Output / Handshake Signal) RXD 入力 COM ポート RXD (Receiving Asynchronous Data Input) TX

Microsoft Word - PIC-P14マニュアル.doc

IM315-EVB取扱説明書

CMOS リニアイメージセンサ用駆動回路 C CMOS リニアイメージセンサ S 等用 C は当社製 CMOSリニアイメージセンサ S 等用に開発された駆動回路です USB 2.0インターフェースを用いて C と PCを接続

64bit SSE2 SSE2 FPU Visual C++ 64bit Inline Assembler 4 FPU SSE2 4.1 FPU Control Word FPU 16bit R R R IC RC(2) PC(2) R R PM UM OM ZM DM IM R: reserved

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

1

GR-SAKURA-SAのサンプルソフト説明

FreeBSD 1

untitled

R1LV0416Dシリーズ データシート

HN58C256A シリーズ/HN58C257A シリーズ データシート

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() 2 double *a[ ]; double 1 malloc() dou

ESP8266-CORE-R Copyrig

ANJ_1092A

program.dvi

1

Page 1

スライド 1

I J

C ( ) C ( ) C C C C C 1 Fortran Character*72 name Integer age Real income 3 1 C mandata mandata ( ) name age income mandata ( ) mandat

Microsoft PowerPoint - NxLecture ppt [互換モード]

4

Timers_JP.fm

C言語によるアルゴリズムとデータ構造

Photo Sensor – 적외선 센서

SystemC 2.0を用いた簡易CPUバスモデルの設計


プログラミング基礎

¥¤¥ó¥¿¡¼¥Í¥Ã¥È·×¬¤È¥Ç¡¼¥¿²òÀÏ Âè2²ó

1.1 シリアル通信 Fig. 1 にあるように 通信は大きく分けてシリアル通信とパラレル通信に分かれる シリアル通信は基本的に送受信に各 1 本のデータ線を使い 全てのビットを順番にデータ線に流すことによ り通信が行われる このため TxD,RxD の最低 2 本の線を繋げば通信できる (Fig.

不可能への挑戦株式会社日昇テクノロジー低価格 高品質が不可能? 日昇テクノロジーなら可能にする 無線モジュール NRF24L01 の MCU 8051 向 けユーザーマニュアル 株式会社日昇テクノロジー 更新日 2013/0

スライド 1

( ) ( ) 30 ( ) 27 [1] p LIFO(last in first out, ) (push) (pup) 1

MAX IIデバイスのIEEE (JTAG)バウンダリ・スキャン・テスト

joho09.ppt

R1EV5801MBシリーズ データシート

PIC

A_chapter3.dvi

I ASCII ( ) NUL 16 DLE SP P p 1 SOH 17 DC1! 1 A Q a q STX 2 18 DC2 " 2 B R b

25 II :30 16:00 (1),. Do not open this problem booklet until the start of the examination is announced. (2) 3.. Answer the following 3 proble

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

oxygen49-61_userguide

1. A0 A B A0 A : A1,...,A5 B : B1,...,B

R1RW0416DI シリーズ

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

slide

Transcription:

磁気コンパスの試作 ~ データ送信の無線化 ~ 液晶表示 電源 5V 位 ICSP PICKit3 PIC:16F1827 液晶表示器 ACM1602NI-FLW-FBW-M01 液晶表示器 AQM0802A-RN-GBW PIC16F1827 完成版 変更点 :2015.1.23 2015.1.30 倒立振子デモ 2015.1.22 倒立振子, グラフィッデモ 2014.12.18 グラフィックデモ ( 脈拍計 ) 2014.12.04 本件紹介, グラフィックデモマンデルブロ 2014.11.xx 技術交流開始 液晶表示器を使用 ( 試験のため 2 台使用 ) 測定値を基板上で確認できる. 小型器は即席な値確認に利用予定. センサーと無線モジュール PIC の電源を 3.3V に統一した. 利点 : レベルコンバーターなどの回路が不要 3.3V レギュレータ PIC:12F1822 無線モジュール ( 未使用 ) TOCOS TWE-Lite 本稿紹介部分 図 1 磁気コンパス概要 注意 : この情報によって第 3 者が, 何らかの損害を受けてもこの情報の提供者は, いかなる損害賠償責任も負わない. X+ Y+ 地球磁力線の方向 : 南極 (N) から出て北極 (S) に入ると仮定 59.8deg PICをPIC16F876からPIC16F1827に変更した. 利点 : 低電圧 (1.8V) から動作開始する. I2Cポート 2,USART 1ポートは, 何かと便利.I2Cは液晶ディスプレイと磁気センサーに,USARTは無線モジュールに繋いだので, 遠隔測定が可能となった. 但し,PICKit2 は対応していないので, プログラミングできない. PICKit3 ならば可能 ブレッドボードを採用. 永久性は無いけど, インスタントに体験するには最高. 分解能 : コンパスは 0.1 度の分解能を得た. センサーの 13Bit 幅と atan() 計算精度に依存する. 温度測定はコーディングしていない.

PIC:12F1827 ICSP (PICKit3) 液晶ディスプレイ ACM1602NI-FLW-FBW-M01 S C S AQM0802A HMC5883L V SS V DD V O V BL+ V BL- L D A 1 2 3 4 5 6 7 液晶ディスプレイ 磁気センサー M C P P L GD GC R V DD V SS 1 2 3 4 5 6 S S G C D ND L A 1 2 3 4 I2C V DD 10kΩ 2 3.3V 28 27 26 25 24 23 22 21 20 19 18 17 16 15 + Vin 3.3~6.6V TA48033S 1 2 3.3V Vin Vout 3 GND 1µF 1µF V SS V DD TX V CC G N D TOCOS TWE-Lite DIP R X B P S 無線モジュール T X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - 図 2 回路

// Test of Magnetic Compass HMC5883L 2015.1.1 // Compass ===> LCD ACM1602N1-FLW-FBW M01 Akizuki // Temperature ===> AQM0802A Akizuki // Send to PC by RS232C And TWE-Lite M.T #include<16f1827.h> #include<math.h> #fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,BROWNOUT // #use delay(clock=8000000) #use i2c(master,sda=pin_b1,scl=pin_b4,fast,noforce_sw) #use RS232(PARITY=N, BAUD=38400,XMIT=PIN_B5, RCV=PIN_B1) // i2c slave addresses #define HMC5883L_WRT_ADDR 0x3C #define HMC5883L_READ_ADDR 0x3D // ACM1602 #define LCD_ADD 0xA0 // ACM1602 Slave Address // AQM0802A #define LCD_ADD_AQM 0x7c // AQM0802 Slave Address // AQM W/R Mode val #define LCD_CMD_AQM 0x80 // Instruction Write Mode #define LCD_DAT_AQM 0xC0 // Data Write Mode #define line_1_aqm 0x00 // first line #define line_2_aqm 0xC0 // second line = 0x80 + 0x40 // Register addresses #define HMC5883L_CFG_A_REG 0x00 #define HMC5883L_CFG_B_REG 0x01 #define HMC5883L_MODE_REG 0x02 #define HMC5883L_X_MSB_REG 0x03 // mtsw 21014.11.11 #define HMC5883L_STR #define HMC5883L_IRA #define HMC5883L_IRB #define HMC5883L_IRC void LCD_cmd(unsigned char cmd); void LCD_Clear(); void LCD_Setline(unsigned char line); void LCD_init(); void LCD_data(unsigned char data); void LCD_space(int8 n); void LCD_com_AQM(unsigned char cmd); void LCD_Clear_AQM(); void LCD_Setline_AQM(unsigned char line); void LCD_init_AQM(); void LCD_data_AQM(unsigned char data); void LCD_space_AQM(int8 n); 0x09 //Status Register A 0x0A //Identification Register A = 0x48 0x0B //Identification Register B = 0x34 0x0C //Identification Register C = 0x33 #define line_1 #define line_2 #define data_out #define cmd_code 0x80 0xC0 0x80 0x00 static int16 d1,d2,d3,d4,d5; void hmc5883l_write_reg(int8 reg, int8 data); int8 hmc5883l_read_reg (int8 reg); void hmc5883l_read_data(); void disp_val(int16 x, int8 mod); typedef struct{ int16 x; int16 y; int16 z; hmc5883l_result; // This global structure holds the values read // from the HMC5883L x,y,z registers. hmc5883l_result compass = {0,0,0; // ========================================== void main(){ double xx, yy, zz, deg; int16 degree, x, y, z; char cnt; LCD_init_AQM(); LCD_Clear_AQM(); // Infuluence to ACM1602 LCD_Setline_AQM(line_1_AQM); LCD_space_AQM(5); LCD_data_AQM('V'); LCD_data_AQM('a'); LCD_data_AQM('r'); LCD_init(); LCD_Setline(line_1); while(cnt < 16){ LCD_data(0x30 + cnt++); LCD_Setline(line_2); while(cnt < 16){ LCD_data(0x40 + cnt++); LCD_Clear(); LCD_Setline(line_1); LCD_space(4); LCD_data('Y'); LCD_space(2); LCD_data('V'); LCD_data('a'); LCD_data('r'); // Meas & Display while(1) { LCD_Setline_AQM(line_2_AQM); LCD_data_AQM(' ');LCD_data_AQM(' '); hmc5883l_write_reg(hmc5883l_cfg_a_reg, 0x70); //0x70 CCS=0x70 hmc5883l_write_reg(hmc5883l_cfg_b_reg, 0x80); //0xA0 CCS=0xA0 hmc5883l_write_reg(hmc5883l_mode_reg, 0x00); //0x00 CCS=0x00 hmc5883l_read_data(); x = (compass.x ^ 0xFFFF); y = (compass.y ^ 0xFFFF); zz = z = compass.z; // Reverse Sign // Reverse Sign

if( x & 0x8000 ){ x *= -1; if( y & 0x8000){ y *= -1; deg = 57.30*ATAN(yy/xx) + 90; deg = 57.30*ATAN(xx/yy); if( x > 0){ if( y & 0x8000){ y *= -1; deg = 57.30*ATAN(xx/yy) + 180; deg = 57.30*ATAN(yy/xx) + 270; xx *= 10; yy *= 10; zz *= 10; degree = deg * 10; LCD_Setline(line_1); LCD_data('X');LCD_data(' '); printf(" rx "); disp_val(xx,0); LCD_space(5); LCD_data('V');LCD_data('a');LCD_data('r'); LCD_Setline(line_2); LCD_data('Y');LCD_data(' '); printf(" Y"); disp_val(yy,0); printf(" Z "); disp_val(zz,2); LCD_space(2); printf(" Var "); disp_val(degree,0); disp_val(degree,1); // mod = 2 >>> EUSART Only // mod = 0 >>> ACM1602 // mod = 1 >>> AQM0802 delay_ms(30); // ACM1602NI-FLW-FBW-M01 void LCD_cmd(unsigned char cmd){ int16 u_t=10; delay_ms(10); i2c_write(lcd_add); delay_us(u_t); i2c_write(cmd_code);delay_us(u_t); i2c_write(cmd); delay_us(u_t); // Send Command delay_ms(10); void LCD_Clear(){ LCD_cmd(0x01); delay_ms(3); void LCD_Setline(unsigned char line) { LCD_cmd(line); void LCD_init(){ delay_ms(40); LCD_cmd(0x01); // delay_ms(1); LCD_cmd(0x38); // delay_ms(1); LCD_cmd(0x0C); // delay_ms(1); void LCD_data(unsigned char data){ int16 u_t=100; // Slave Address // Command Mode delay_ms(1); i2c_write(lcd_add); delay_us(u_t); // Slave Address i2c_write(data_out);delay_us(u_t); // Data Out Code i2c_write(data); delay_us(u_t); // Send Command delay_ms(1); void LCD_space(int8 n){ int8 cnt; while(cnt++ < n){ LCD_data(' '); // AQM0802 // void LCD_com_AQM(unsigned char cmd){ int16 u_t=50; delay_ms(5); i2c_write(lcd_add_aqm); delay_us(u_t); // Slave Address // Command Mode i2c_write(lcd_cmd_aqm);delay_us(u_t); i2c_write(cmd); delay_us(u_t); // Send Command delay_ms(5); void LCD_Clear_AQM(){ LCD_com_AQM(0x01); delay_ms(20); void LCD_Setline_AQM(unsigned char line) { LCD_com_AQM(line); void LCD_init_AQM(){ delay_ms(60); LCD_com_AQM(0x38); LCD_com_AQM(0x39); LCD_com_AQM(0x14); LCD_com_AQM(0x70); // Function set // Function set // Internal OSC frequency // Contrast

LCD_com_AQM(0x56); // Power/ICON/Contrast Control LCD_com_AQM(0x6c); // Follow Control delay_ms(300); LCD_com_AQM(0x38); // Function set LCD_com_AQM(0x0c); // Display ON/OFF Control LCD_com_AQM(0x01); // Clear Display delay_ms(2); void LCD_data_AQM(unsigned char data){ int16 u_t=100; delay_ms(5); i2c_write(lcd_add_aqm); delay_us(u_t); // Slave Address i2c_write(lcd_dat_aqm);delay_us(u_t); // Data Out Code i2c_write(data); delay_us(u_t); // Send Command delay_ms(5); void LCD_space_AQM(int8 n){ int8 cnt; while(cnt++ < n){ LCD_data_AQM(' '); // Low level routines for HMC5883L void hmc5883l_write_reg(int8 reg, int8 data){ i2c_write(hmc5883l_wrt_addr); i2c_write(reg); i2c_write(data); int8 hmc5883l_read_reg(int8 reg){ int8 retval; i2c_write(hmc5883l_wrt_addr); i2c_write(reg); // mtsw i2c_write(hmc5883l_read_addr); retval = i2c_read(0); return(retval); void hmc5883l_read_data(){ int8 x_lsb; int8 x_msb; int8 y_lsb; int8 y_msb; int8 z_lsb; int8 z_msb; i2c_write(hmc5883l_wrt_addr); i2c_write(hmc5883l_x_msb_reg); // Point to X-msb register = 0x03 delay_ms(1); // mtsw i2c_write(hmc5883l_read_addr); x_msb = i2c_read(); x_lsb = i2c_read(); z_msb = i2c_read(); z_lsb = i2c_read(); y_msb = i2c_read(); y_lsb = i2c_read(0); // Combine high and low bytes into 16-bit values. compass.x = make16(x_msb, x_lsb); compass.y = make16(y_msb, y_lsb); compass.z = make16(z_msb, z_lsb); void disp_val(int16 x, int8 mod){ int8 sw; if( x == 0xFFFF){ printf("ox FFFF"); if( x & 0x8000){ // Minus? printf("-"); x = ( x ^ 0xFFFF)+1; printf(" "); d5 = x % 10 + 0x30; d4 = x % 10 + 0x30; d3 = x % 10 + 0x30; d2 = x % 10 + 0x30; d1 = x % 10 + 0x30; sw = 0; if(d1 == 0x30){ d1 = 0x20; sw = 1; if( (d2 == 0x30)&&(sw == 0)){ d2 = 0x20; // Disp Digits

sw = 1; if((d3 == 0x30)&&(sw == 0)){ d3 = 0x20; sw = 1; if((d4 == 0x30)&&(sw == 0)){ d4 = 0x20; if(mod == 2){ printf("%1c%1c%1c%1c.%1c",d1,d2,d3,d4,d5); if(mod == 1){ LCD_data_AQM(d1); LCD_data_AQM(d2); LCD_data_AQM(d3); LCD_data_AQM(d4); LCD_data_AQM('.');LCD_data_AQM(d5); printf("%1c%1c%1c%1c.%1c",d1,d2,d3,d4,d5); LCD_data(d1); LCD_data(d2); LCD_data(d3); LCD_data(d4); LCD_data('.');LCD_data(d5);