Download presentation
Presentation is loading. Please wait.
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
午前の部 終わり
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
午後の部 終わり
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.