Presentation is loading. Please wait.

Presentation is loading. Please wait.

2009年8月18日,新潟大学 「情報」と「ものづくり」 の実践教育3 下保敏和,佐藤亮一.

Similar presentations


Presentation on theme: "2009年8月18日,新潟大学 「情報」と「ものづくり」 の実践教育3 下保敏和,佐藤亮一."— Presentation transcript:

1 2009年8月18日,新潟大学 「情報」と「ものづくり」 の実践教育3 下保敏和,佐藤亮一

2 試験について 重要 のページを要チェックしてください. PIC回路,プログラムが完成しなくても,合否には関係ありません

3 本日の内容 午前 9:20-10:10 論理演算(NOT, AND, OR)
10:20-11:10 プログラム説明(論理演算,テーブル処理) 11:20-12:10 演習 午後 13:20-14:10 モータを用いる回路の説明           (ドライブ能力,入力ポートについて) 14:20-15:10 回路作成 15:20-16:10 (プログラム作成(条件文),説明) 16:20-17:00 試験

4 午前の目次 論理演算 論理演算のプログラム解説 テーブル処理のプログラム解説 演習

5 午前の目次 論理演算 論理演算のプログラム解説 テーブル処理のプログラム解説 演習

6 1.論理演算 重要 否定(NOT)演算 論理積(AND)演算 論理和(OR)演算 A OUT 1 A B OUT 1 A B OUT 1

7 1.論理演算 重要 否定(NOT)演算 論理積(AND)演算 論理和(OR)演算

8 午前の目次 論理演算 論理演算のプログラム解説 テーブル処理のプログラム解説 演習

9 2.論理演算のプログラム sample-84-not.c 否定(NOT)を用いたプログラム例 for(;;) { pb = 1;
for (i=0; i<13 ; i++) { PORTB = ~pb; PORTA = ~pb >> 8; timer_wait(INTERVAL); pb <<= 1; } pb = 1;  8ビットだと  PORTB = ~pb; により,以下のようになる. NOT PORTB 0がON,1がOFF 点滅が逆になる 実際には,PORTA(0-4), PORTB (0-7)の 合計13個のLEDが点滅する.

10 2.論理演算のプログラム sample-84-logic.c 論理積(AND), 論理和(NOT)を用いたプログラム例 for(;;) {
/* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } /* off from high bit */ pb = 0x1000; for (i=0; i<13 ; i++) { PORTB |= pb; PORTA |= pb >> 8; timer_wait(INTERVAL); pb >>= 1; }

11 2.論理演算のプログラム sample-84-logic.c 前半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } PORTB = 0xff; PORTA = 0x1f; PORTBとPORTAの初期値 PORTA PORTB

12 2.論理演算のプログラム sample-84-logic.c 前半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } pb = 1; 変数pbに を代入

13 2.論理演算のプログラム sample-84-logic.c 前半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } PORTB &= ~pb; 変数pbのNOT値 とPORTBの初期値とのAND演算 AND

14 2.論理演算のプログラム sample-84-logic.c 前半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } PORTA &= ~(pb >> 8); 変数pbの8ビット右シフトのNOT値 値と,PORTAの初期値とのAND演算 AND PORTA PORTB よって,1回目のループでの PORTA, PORTBの値は

15 2.論理演算のプログラム sample-84-logic.c 前半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } pb<<=1; 変数pbの値を左に1ビットシフト

16 2.論理演算のプログラム sample-84-logic.c 前半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } PORTB &= ~pb; 変数pbのNOT値 とPORTBの値とのAND演算 AND

17 2.論理演算のプログラム sample-84-logic.c 前半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } PORTA &= ~(pb >> 8); 変数pbの8ビット右シフトのNOT値 値と,PORTAの初期値とのAND演算 AND PORTA PORTB よって,2回目のループでの PORTA, PORTBの値は

18 2.論理演算のプログラム sample-84-logic.c 前半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* * and & , or | , not ~ * shift left << , shift right >> */ /* on from low bit*/ PORTB = 0xff; PORTA = 0x1f; pb = 1; for (i=0; i<13 ; i++) { PORTB &= ~pb; PORTA &= ~(pb >> 8); timer_wait(INTERVAL); pb <<= 1; } 以上を繰り返すと, PORTA PORTB 1回目 2回目 3回目 12回目 13回目

19 2.論理演算のプログラム sample-84-logic.c 後半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* off from high bit */ pb = 0x1000; for (i=0; i<13 ; i++) { PORTB |= pb; PORTA |= pb >> 8; timer_wait(INTERVAL); pb >>= 1; } pb = 0x1000; 変数pbに を代入

20 2.論理演算のプログラム sample-84-logic.c 後半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* off from high bit */ pb = 0x1000; for (i=0; i<13 ; i++) { PORTB |= pb; PORTA |= pb>>8 ; timer_wait(INTERVAL); pb >>= 1; } PORTB |= pb; 変数pbの値 とPORTBの値とのOR演算 OR

21 2.論理演算のプログラム sample-84-logic.c 後半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* off from high bit */ pb = 0x1000; for (i=0; i<13 ; i++) { PORTB |= pb; PORTA |= pb>>8 ; timer_wait(INTERVAL); pb >>= 1; } PORTA |= pb>>8; 変数pbの値の8ビット右シフトした値 とPORTAの値との OR演算 OR PORTA PORTB よって,1回目のループでの PORTA, PORTBの値は

22 2.論理演算のプログラム sample-84-logic.c 後半 論理積(AND), 論理和(NOT)を用いたプログラム例
for(;;) { /* off from high bit */ pb = 0x1000; for (i=0; i<13 ; i++) { PORTB |= pb; PORTA |= pb>>8 ; timer_wait(INTERVAL); pb >>= 1; } 以上を繰り返すと, PORTA PORTB 1回目 2回目 3回目 12回目 13回目

23 午前の目次 論理演算 論理演算のプログラム解説 テーブル処理のプログラム解説 演習

24 2.論理演算のプログラム 重要 sample-84-table.c tableを用いたプログラム例
static unsigned char tbl[] = { /* Capital: OFF , small: ON */ /* PA PB */ 0x1f, 0xff, /* G GGGG RRRR RRRR */ 0x0a, 0xaa, /* g GgGg RrRr RrRr */ 0x15, 0x55, /* G gGgG rRrR rRrR */ 0x1f, 0x00, /* G GGGG rrrr rrrr */ 0x00, 0xff, /* g gggg RRRR RRRR */ 0x00, 0x00, /* g gggg rrrr rrrr */ }; for (;;) { for(i=0;i<sizeof(tbl);i+=2) { PORTA = tbl[i]; PORTB = tbl[i+1]; #define INTERVAL 0x2000 timer_wait(INTERVAL); }

25 2.論理演算のプログラム 重要 sample-84-table.c tableを用いたプログラム例 配列スタート PORTA PORTB
2つ進む for(i=0;i<sizeof(tbl);i+=2) { PORTA = tbl[i]; PORTB = tbl[i+1]; #define INTERVAL 0x2000 timer_wait(INTERVAL); }

26 午前の目次 論理演算 論理演算のプログラム解説 テーブル処理のプログラム解説 演習

27 午前の部 終わり

28

29 本日の内容 午前 9:20-10:10 論理演算(NOT, AND, OR)
10:20-11:10 プログラム説明(論理演算,テーブル処理) 11:20-12:10 演習 午後 13:20-14:10 モータを用いる回路の説明           (ドライブ能力,入力ポートについて) 14:20-15:10 回路作成 15:20-16:10 (プログラム作成(条件文),説明) 16:20-17:00 試験

30 午後の目次 ドライブ能力について 回路作成 プログラム解説(入力) 演習

31 午後の目次 ドライブ能力について 回路作成 プログラム解説(入力) 演習

32 モータを接続した回路図 重要 5V: 信号の電源 3V: モータの電源 信号の電源ライン モータの電源ライン M アースライン

33 モータを接続した回路 重要 LED:  10mA程度 モータ: 300mA程度 ここの電流は? M トランジスタは大丈夫?

34 トランジスタ特性 2SC1815 LED:  10mA程度 モータ: 300mA程度

35 FET特性 2SK2231 LED:  10mA程度 モータ: 300mA程度

36 PICの出力特性 16F84A (はき出し)

37 PICの出力特性 16F84A (吸い込み)

38 トランジスタとFET ベース,エミッタ,コレクタ ゲート,ソース,ドレイン

39 モータを接続した回路図(Tr) M

40 モータを接続した回路(FET) 重要 M M

41 午後の目次 ドライブ能力について 回路作成 プログラム解説(入力) 演習

42 FET

43 午後の目次 ドライブ能力について 回路作成 プログラム解説(入力) 演習

44 3.入力を含んだプログラム 1ビット(RA0)を入力に用いたプログラム例 sample-84-motor.c
TRISA = 0x00; /* 4-0 output */ PORTA = 0xff; TRISB = 0x01; /* 7-1 output, 0 input input/interrupt */ PORTB = 0xfe; 入力

45 3.入力を含んだプログラム 1ビット(RA0)を入力に用いたプログラム例 sample-84-motor.c
#define INTERVAL 6000 #define NO_ACTION 400 for(;;) { RA0 = 1; /* motor ON */ timer_wait(INTERVAL); RA0 = 0; /* motor OFF */ button_wait(); timer_wait(NO_ACTION); } 一定時間駆動 スイッチONで駆動 スイッチOFFでストップ

46 午後の目次 ドライブ能力について 回路作成 プログラム解説(入力) 演習

47 午後の部 終わり


Download ppt "2009年8月18日,新潟大学 「情報」と「ものづくり」 の実践教育3 下保敏和,佐藤亮一."

Similar presentations


Ads by Google