Cです。
「ダイナミック点灯」とはめちゃくちゃ早い速度で、
点灯する物を切り替える事によって、複数の物が点灯しているように見せること。
下の写真は3桁表示されているように見えるが、実際には
同時に表示されているのは1桁で人間どもには、確認できない速さで
切り替わって表示されている。
何でこんな事をするのかというと、
1個ずつちゃんと表示してたらマイコンの足がいくらあっても足りないから。
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>
unsigned char cnt=0;
unsigned char seg[10] = {0b00111111, 0b00000110,
0b01011011, 0b01001111,
0b01100110, 0b01101101,
0b01111101, 0b00100111,
0b01111111, 0b01101111};
ISR ( TIMER0_COMPA_vect ){
static unsigned char sel=0;
unsigned char dig1, dig10, dig100;
static unsigned char i;
dig1 = seg[cnt % 10];
dig10 = seg[(cnt / 10) % 10];
dig100 = seg[(cnt / 100) % 10];
switch(sel){
case 0: PORTB = 0b00000001;
PORTD = dig1;
break;
case 1: PORTB = 0b00000010;
PORTD = dig10;
break;
case 2: PORTB = 0b00000100;
PORTD = dig100;
break;
}
sel++;
if(sel == 3){ sel = 0; }
i++;
if(i == 200){ cnt++; i = 0; }
}
int main(void) {
DDRB = 0b11101111; //PB4のみ入力
DDRD = 0b11111111; //すべて出力
PORTB = 0b00010000; //
PORTD = 0b00000000; //D初期化
TCCR0A = 0b00000010; //CTC
TCCR0B = 0b00000101; //約1kHz
OCR0A = 5; //5msで割り込む
TIMSK0 = 0b00000010; //COMPA割り込み
sei(); //全体割り込み許可
while(1) {
}
return 0;
}
2012年7月14日土曜日
AVR PORTDチェック関数
Cです。
PORTDの出力チェックを実施する。
PD0~7にLEDでもつないでおこう。
#include<util/delay.h>
void PORTD_test(char w_cnt){
char i;
for(i = 0; i < w_cnt; i++){
PORTD = 0b00000001;
_delay_ms(200);
PORTD = 0b00000010;
_delay_ms(200);
PORTD = 0b00000100;
_delay_ms(200);
PORTD = 0b00001000;
_delay_ms(200);
PORTD = 0b00010000;
_delay_ms(200);
PORTD = 0b00100000;
_delay_ms(200);
PORTD = 0b01000000;
_delay_ms(200);
PORTD = 0b10000000;
_delay_ms(200);
}
}
int main(void) {
DDRD = 0b11111111; //すべて出力
PORTD = 0b00000000; //D初期化
while(1) {
PORTD_test(1);
}
return 0;
}
PORTDの出力チェックを実施する。
PD0~7にLEDでもつないでおこう。
#include<util/delay.h>
void PORTD_test(char w_cnt){
char i;
for(i = 0; i < w_cnt; i++){
PORTD = 0b00000001;
_delay_ms(200);
PORTD = 0b00000010;
_delay_ms(200);
PORTD = 0b00000100;
_delay_ms(200);
PORTD = 0b00001000;
_delay_ms(200);
PORTD = 0b00010000;
_delay_ms(200);
PORTD = 0b00100000;
_delay_ms(200);
PORTD = 0b01000000;
_delay_ms(200);
PORTD = 0b10000000;
_delay_ms(200);
}
}
int main(void) {
DDRD = 0b11111111; //すべて出力
PORTD = 0b00000000; //D初期化
while(1) {
PORTD_test(1);
}
return 0;
}
2012年6月2日土曜日
ローカル DNSサーバ
Cです。
今日はDNSサーバの設定を書いておこう。
Debianだけど考え方とか設定内容はRHEL(CentOS)も一緒だ。
■フォワードオンリー設定
自分には問い合わせの回答を持たずに、別のDNSサーバに丸投げする設定。
別のDNSサーバから頂戴した回答は一定時間キャッシュとして保持する。
/etc/bind/named.conf.options <-これはdebian独特だけどnamed.confから読み込んでるだけ。
version "aho"; <-bindのバージョンをばれないように設定しとこう
max-cache-size 10M; <-キャッシュ保存容量
max-cache-ttl 604800; <-キャッシュ保持時間(1週間はちょっと長い?
max-ncache-ttl 10800; <-ネガティブキャッシュ保持期間
recursive-clients 10; <-再起問い合わせを受け付けるクライアント数
allow-query { 192.168.24.0/24; 127.0.0.1; }; <-クエリを受け付けるIP
forward only; <-フォワードしかしないよ
forwarders { 8.8.8.8; }; <-丸投げ先
■ローカルDNSサーバ
ローカルネットワークでの名前解決に使うための設定。
/etc/bind/named.conf.local
zone "localdomain.local" IN {
type master;
file "/etc/bind/localdomain.local/localdomain.local.zone";
};
zone "24.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/lcaldomain.local/lcaldomain.local.rev";
};
/etc/bind/localdomain.local/localdomain.net.zone <-正引き用
$TTL 604800
@ IN SOA hostname.localdomain.local root.localdomain.local. (
20120604 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 192.168.24.70
gw IN A 192.168.24.1
hostname IN A 192.168.24.70
/etc/bind/localdomain.local/localdomain.net.rev <-逆引き用
$TTL 604800
@ IN SOA hostname.localdomain.local root.localdomain.local. (
20120604 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
IN PTR hostname.
IN A 255.255.255.0
70 IN PTR hostname.
1 IN PTR gw.
クライアント側、サーバ側ともに/etc/resovl.confの設定をしておこう。
今日はDNSサーバの設定を書いておこう。
Debianだけど考え方とか設定内容はRHEL(CentOS)も一緒だ。
■フォワードオンリー設定
自分には問い合わせの回答を持たずに、別のDNSサーバに丸投げする設定。
別のDNSサーバから頂戴した回答は一定時間キャッシュとして保持する。
/etc/bind/named.conf.options <-これはdebian独特だけどnamed.confから読み込んでるだけ。
version "aho"; <-bindのバージョンをばれないように設定しとこう
max-cache-size 10M; <-キャッシュ保存容量
max-cache-ttl 604800; <-キャッシュ保持時間(1週間はちょっと長い?
max-ncache-ttl 10800; <-ネガティブキャッシュ保持期間
recursive-clients 10; <-再起問い合わせを受け付けるクライアント数
allow-query { 192.168.24.0/24; 127.0.0.1; }; <-クエリを受け付けるIP
forward only; <-フォワードしかしないよ
forwarders { 8.8.8.8; }; <-丸投げ先
■ローカルDNSサーバ
ローカルネットワークでの名前解決に使うための設定。
/etc/bind/named.conf.local
zone "localdomain.local" IN {
type master;
file "/etc/bind/localdomain.local/localdomain.local.zone";
};
zone "24.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/lcaldomain.local/lcaldomain.local.rev";
};
/etc/bind/localdomain.local/localdomain.net.zone <-正引き用
$TTL 604800
@ IN SOA hostname.localdomain.local root.localdomain.local. (
20120604 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 192.168.24.70
gw IN A 192.168.24.1
hostname IN A 192.168.24.70
/etc/bind/localdomain.local/localdomain.net.rev <-逆引き用
$TTL 604800
@ IN SOA hostname.localdomain.local root.localdomain.local. (
20120604 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
IN PTR hostname.
IN A 255.255.255.0
70 IN PTR hostname.
1 IN PTR gw.
クライアント側、サーバ側ともに/etc/resovl.confの設定をしておこう。
2012年5月21日月曜日
ライントレーサー
Cです。
電子工作をまったくの0から初めて、ようやくこれくらいのものが作れるようになった。
時間かかりすぎだけど、まあいい。
電子工作をまったくの0から初めて、ようやくこれくらいのものが作れるようになった。
時間かかりすぎだけど、まあいい。
これは「ライントレーサー」といわれる物で、電子工作の入門にはぴったりだ。
フォトトランジスタで地面のラインからの光の反射量によって電圧が変わり、
それを論理回路NOTに入れて、その出力をモータードライバへ送りモータを制御する。
今はマイコンでいろいろ片付けちゃうとおもうけど、
基礎から解りたい場合はマイコン無しではじめるほうが良い。
いろいろと再利用を考えてモジュール化しようとしたら線が大変なことになった。
回路用の5V電源はもちろん、センサー部分、各ICは取り外せるように作った。
次は、論理回路をたくさん使って何かやってみよう。
登録:
投稿 (Atom)