AVRのATmega168を使用し16ビットタイマを使用して正確に1秒毎に点滅するプログラムを作りたいと思っています。ATmega168の周波数は20MHzで環境はWinAVRを使っています。TCNT1やTCCR1Aを使うのだろうというのはわかったんですが、どこにどう組み込めばいいのかがわかりませんのでそこらへんを教えてほしいです。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>AVRマイコン活用ブックというのを見ているのですけど、うまくいきません。

というかいきなりTCNT1とか TIFRとかTCCR1Aとか出てきて何のことかと思ってしまいます。

説明が悪い本ならほかの本も検討してみるべきでしょう。

>ATmega168の周波数は20MHzで
これは間違いないですか?
外部クロックで20MHz供給される回路が付いているんですね?
「わかるマイコン電子工作AVRマイコン活用ブック」の特製マイコンボード(LED Game for AVR)だと20Mhzでは有りません。マイコンボード名を明かして貰えると問題がないか判断できますが。

>調べてたらTCNT1は16ビットタイマで数え終わるとオーバーフローしてFFFF から0000に戻るということやTCCR1Bはプリスケーラ値を決める。プリスケーラ値は分周で8と64と256と1024の間隔で分周が出来る、 TCCR1B=2なら8ずつ分周するのですかね。0っだたら分周せず、1だったらクロックのまま、3だったら64ずつといった感じですか、というか TCNT1は勝手に数え始めているんですか?

クロックを供給したら(TCCR1B=2)数え始めます。
分周の1/1024とタイマの1/65536で最大クロック8Mhzなら=8000000/1024/65536で最大約8秒まで。クロック20Mhzなら最大約3秒まで数えられますね。
    • good
    • 0
この回答へのお礼

とうとう出来ました。16bitTimerも動かせて、1秒計ることができました。プログラムは
#include <avr/io.h>
#include <stdio.h>
int main(void)
{
TCCR1A = 0;
TCCR1B = 3;
DDRC = 0xff;
DDRB = 0x00;
while(1)
{
while(TCNT1 < 16000);
TCNT1 = 0;
PORTC ^= 0x01;
}
}
です。1秒ごとに点滅するプログラムです。
今回協力いただいて本当にありがとうございました。

お礼日時:2009/05/17 14:19

動きましたか。

良かったですね。
ただ、この方法だと2つ、3つと複数のRCサーボ制御は困難です。
PWMとか割り込みを覚えてくださいね。
    • good
    • 0
この回答へのお礼

とりあえず一個動かすことが目標だったんで今は成功の余韻に浸っております(笑)
また制御が出来ませんという日が来るかもしれませんがそのときはどうかよろしくお願いします。

お礼日時:2009/05/18 01:40

書籍を紹介したはずですが、購入されましたか?


>TCNT1やTCCR1Aを使うのだろうというのはわかったんですが、どこにどう組み込めばいいのかがわかりませんのでそこらへんを教えてほしいです。
例が載っていたはずですが、それを読まれての質問でしょうか?

>16 bit timerで1秒を計る
たぶん直接1秒毎の割り込みは無理だと思います。それ以下のタイミング(たとえば10ms)で割り込みを発生させて1秒分カウントさせるしかないでしょう。

所で、5/12の「スイッチでサーボ制御」#6のソース提示はしてもらえるんでしょうか?
    • good
    • 0
この回答へのお礼

AVRマイコン活用ブックというのを見ているのですけど、うまくいきません。というかいきなりTCNT1とかTIFRとかTCCR1Aとか出てきて何のことかと思ってしまいます。調べてたらTCNT1は16ビットタイマで数え終わるとオーバーフローしてFFFFから0000に戻るということやTCCR1Bはプリスケーラ値を決める。プリスケーラ値は分周で8と64と256と1024の間隔で分周が出来る、TCCR1B=2なら8ずつ分周するのですかね。0っだたら分周せず、1だったらクロックのまま、3だったら64ずつといった感じですか、というかTCNT1は勝手に数え始めているんですか?

お礼日時:2009/05/16 13:41

組み込まれていればタイマーではなくリアルタイムクロック(RTC)を使うのが普通ですが、ATMega168ではRTCはオプションのようなのでそれはさておき。



1秒分のクロックを計測した時点で割り込みが発生するようにして割り込みハンドラで明滅を実施する、というのが基本方針になります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qタイマー式壁スイッチの交換について

タイマー式壁スイッチを交換したいのですが
今迄のスイッチの配線は上穴左右に配線されていたのですが
交換するタイマー式スイッチ(Panasonic:WN5293)の交換は左穴上下しか配線穴がないのですがここに配線でいいのでしょうか?

Aベストアンサー

そのタイマーの機能を考えてみてください。
タイマー(時計機能)は電気を使っていませんよね。 ゼンマイで動いているだけでしょ。
だから、その器具は単なるスイッチと考えてOKですよ。

電線を短絡でもしない限り、事故は起こりませんし、短絡していれば家のブレーカーがすぐに動作して、家中停電してしまいます。
その器具に2つの配線穴があれば、そこに電線を突っ込めばOKでしょう。
絶縁電線を裸にすべき長さなどは器具に表示してあったり、説明書に書いてあったりでしょう。

よく器具を観察してください。

QATmega168で20msの周期のパルスを出したい

ATmega168で GWServo S03T 2BBMG と書かれているサーボモータをとにかく動かしたいのですが、そもそも20msを出す計算方法がわかりません。というか GWServo S03T 2BBMG は20msで動かすものなのですか?1.6msとか色々あるかあらごちゃごちゃです。とりあえず、パルスをだして見たいのですが、そのプログラムを教えていただけないでしょうか?お願いします。

Aベストアンサー

混乱しているみたいですが、そもそもATmega168は何Mhzで動いていますか?
それで、タイマの使い方が分からないんでしょうか?
>サーボの話は別質問で。

Q浴室の換気扇が動かない タイマースイッチ

タイマースイッチで動かすタイプの浴室用換気扇が動かなくなりました。

タイマースイッチをひねると、ジーという音がします。

本体が壊れているのか、スイッチが壊れているのか、

どうすればわかるのでしょうか?

よろしくお願いします。

※テスターは持っています。

---タイマースイッチの型番-----------------------------------

ational WN 5292 タイマスイッチ(2線式浴室換気スイッチ)
(120分・連続ON付)(10A)

Aベストアンサー

No1です 訂正


誤 コンセントの白側とスイッチの白が接触すると短絡状態になりますので危険です。

訂正              ↓

  コンセントの白側とスイッチの黒が接触すると短絡状態になりますので危険です。

スイッチの2線は 電圧側(プラス側)を単に入り切りしているだけですから、

短絡させると云うのは スイッチボックスの2芯の黒と白を接触させると云う意味です。

QC言語について質問です。 C言語のビット演算で10進数の1を左に1ビットずつずらしていって32ビット

C言語について質問です。


C言語のビット演算で10進数の1を左に1ビットずつずらしていって32ビットで表示するプログラムを書いてるんですが…最後の値が負になってしまいます。
変数の型はunsigned にしているんですが。どうしてでしょうか?

Aベストアンサー

おそらく、printf() しょ書式指定子が、 %ud ではなくて、 %d になっているためです。

ちなみに、左シフトの場合、signed でも unsigned でも、操作自体は変わりません。
(右シフトは符号の扱いがある)

それを、表示するときに、符合付きと見なすか符号無しと見なすかです。

Qスイッチプレートのサイズのことです

部屋のスイッチについている樹脂のスイッチプレート・・・・スイッチカバー?・・・を痛めたので買ってきたのですが、サイズがあいません

たてよこ ビスの位置はぴったりなのですが厚さが 既設より2ミリ近く厚い/高いのです とりつけたらスイッチが2ミリくらい沈んだようになります 既設7ミリ 購入8.8ミリ

ホームセンターで調べてもらったら8.8ミリが基準らしい
築12年の我が家はスイッチプレートはみんな7ミリ

質問です
8.8ミリのスイッチプレートをつけても、スイッチが沈まずに同じ高さにするにはどうすればいいのでしょうか

Aベストアンサー

それで、スイッチとプレートは、厚み以外の形は合うのですか。
合わないでしょう。

7ミリのは「フルカラー」シリーズ、
8.8ミリのは「コスモ」シリーズで、互換性はありません。
(注) メーカーによって呼び名は違う。

コスモシリーズもできて数年は経ちますが、築 12年ならフルカラーシリーズで間違いないでしょう。
税別定価で 1枚 110円ですから、買い直したほうが早いですよ。

Qオーディオデータの22050hzから44100hzへの変換

教えてください
手始めに簡単なオーディオデータのサンプルレートコンバータを作成しています
16bit整数モノラル22050hzから16bit整数モノラル44100hzです。
処理は現在のフレームと次のフレームの合計を2で割って
出た値を現在のフレームと次のフレームの間に挿入しています

大体以下のようにしています


short int currentFrame;
short int nextFrame;
short int insertFrame;

long long int average;

short int chunk[2];

//オーディオファイルからの読込みは省略しています

average = ( currentFrame + nextFrame ) / 2;
insertFrame = (short int)average;

chunk[0] = currentFrame;
chunk[1] = insertFrame;

//後処理も省略しています

挿入するデータの計算は平均値であっているでしょうか?

教えてください
手始めに簡単なオーディオデータのサンプルレートコンバータを作成しています
16bit整数モノラル22050hzから16bit整数モノラル44100hzです。
処理は現在のフレームと次のフレームの合計を2で割って
出た値を現在のフレームと次のフレームの間に挿入しています

大体以下のようにしています


short int currentFrame;
short int nextFrame;
short int insertFrame;

long long int average;

short int chunk[2];

//オーディオファイルからの読込みは省略しています

average...続きを読む

Aベストアンサー

基本方針というか正当派の手法としては ANo.2 のやり方でいいと思いますが、
「サンプル変換」と「フィルタ処理」を個別にやるのは無駄が多いので、
両方を同時にやってしまう「lanczos」ってアルゴリズムがあります。

lanczos は画像の解像度変換で有名ですが、「サンプリング変換」という点では画像も音声も処理は同じです。音声での利用については
http://blog.jyoken.net/?eid=773796
が参考になるかもしれません。
lanczosの実際の処理方法自体は、ANo.1 で挙げられている3次スプラインとはパラメータが違うだけでほとんど同じなのですが、
そのパラメータの意味に理論的裏付けがある分高品質です。

たとえば、2次のlanczosだと、
lanczos2(-1.5)=lanczos2(1.5)=-0.063684352
lanczos2(-0.5)=lanczos2(0.5)= 0.573159168
になるので、前後4サンプルから
average=( -0.063684352 * previousFrame + 0.573159168 * currentFrame + 0.573159168 * nextFrame + -0.063684352 * nextnextFrame) / 1.018949632
という式で補間結果が求まります。

基本方針というか正当派の手法としては ANo.2 のやり方でいいと思いますが、
「サンプル変換」と「フィルタ処理」を個別にやるのは無駄が多いので、
両方を同時にやってしまう「lanczos」ってアルゴリズムがあります。

lanczos は画像の解像度変換で有名ですが、「サンプリング変換」という点では画像も音声も処理は同じです。音声での利用については
http://blog.jyoken.net/?eid=773796
が参考になるかもしれません。
lanczosの実際の処理方法自体は、ANo.1 で挙げられている3次スプラインとはパラメー...続きを読む

Q壁のスイッチにタイマーをつける方法

壁のスイッチ(室内の照明用)を取り外して、外したスイッチの部分ををコンセント形状の
ものと入れ替えて、そのコンセントにコンセントタイマーを取り付けて、(コンセントにさすタイプです)
ある時間がきたら、勝手にスイッチON,あるいはスイッチOFFにすることは
できますか?

Aベストアンサー

他の回答と重複しますが、締め切られないところをみるともしかして納得されてないのかなと思い、書かせていただきます。m(..)m

照明のスイッチにタイマー機能を持たせたいわけですよね。
これを電気屋さんにお願いしてください。
http://item.rakuten.co.jp/e-connect/wtp5331wkp/?force-site=pc
今のスイッチとの入れ替えになります。

ぱっと見ためは、パネルタイプのスイッチです。パナソニックの"コスモ21"シリーズの面構えです。
ですが、このスイッチ表面が蓋になっていて磁石で留まっているだけなので指先で開かせられます。
開けると中がデジタルタイマーになっていて、現在時刻、ON時間、OFF時間それぞれを分単位でセットできます。
一旦セットしましたら、毎日同じ動作を繰り返します。
セットした時間を無視して強制的にON,OFFしても構いません。
タイマーは解除されません。

この商品には、見た目の違いでで2種類あります。
現在がシングルスイッチなのか、ダブルスイッチなのかによって使い分けます。
商品全体が1つのタイマーとして構築されているものと、高さ全体の3分の2ぐらいがタイマースイッチで残りの部分に他のスイッチを同居させられるように"空き地"になっているもの、この2種類があります。



質問者様が想定された、コンセント向けのタイマーがどうして不可なのか、理屈はお分かりいただけましたでしょうか。
コンセントというのは、片方プラス、もう一方マイナスですので、短絡させるとショーとしますね。
触ると感電します。

照明のスイッチ、あっちとこっちを接続しても爆発しないのはなぜでしょう?
下の方も書かれたように、照明スイッチはプラスの回路を途中で切ったりつないだりしているのです。
マイナスの回路は、照明器具から天井裏・壁の中を別ルートで辿ってブレーカーボックスまで戻ってゆくのです。
コンセントと照明のスイッチというのは根本的に別物なのです。(^_^)

他の回答と重複しますが、締め切られないところをみるともしかして納得されてないのかなと思い、書かせていただきます。m(..)m

照明のスイッチにタイマー機能を持たせたいわけですよね。
これを電気屋さんにお願いしてください。
http://item.rakuten.co.jp/e-connect/wtp5331wkp/?force-site=pc
今のスイッチとの入れ替えになります。

ぱっと見ためは、パネルタイプのスイッチです。パナソニックの"コスモ21"シリーズの面構えです。
ですが、このスイッチ表面が蓋になっていて磁石で留まっているだけなので指先...続きを読む

QTCNTとTIFRの意味

TCNT1とかTIFR1がプログラムの中に書いてあるのですがこれはどういう意味なのですか?

Aベストアンサー

まず、言語環境を正確に毎回書いてください。
AVRマイコンの型番とコンパイラの種類は必ず書きましょう。

それはタイマ制御(TCNT1)と割り込み制御(TIFR1)用のレジスタです。
制御レジスタはメモリ空間にマッピングされていてC言語からはポインタの仕組みを使って参照/書き換えできます。
制御レジスタの詳細はデータシートに書いてありますが、私が日本語版のデータシートを紹介したのですが、その様子ではデータシートが理解できていないと思われます。データシートが理解できない場合は、書籍を購入して勉強しましょう。

「試しながら学ぶAVR入門」
http://www.cqpub.co.jp/hanbai/books/46/46041.htm
「AVRマイコン・リファレンス・ブック」
http://www.cqpub.co.jp/hanbai/books/37/37301.htm

Qスイッチプレートのネジ

壁を塗り替えたさい、スイッチプレートのネジをなくしてしまいました。
ネジのみ購入しようと、何店かおおきなショップをまわったのですが、スイッチプレートとセットでは売っているのですが、ネジのみ売っていませんでした。
純正でなくても、使えるものがあればと、店員さんにも探してもらいましたが、ネジの長さがとても短く、いいものが見つかりませんでした。
メーカーなどに問い合わせるしかないでしょうか?
スイッチプレートは、よく見かけるナショナルのステンレス(?)のものです。

Aベストアンサー

 他のスイッチのを外して、これと同じのをくれ
と何軒かのホームセンターを巡ってください、それかネジ専門店に行くかですねぇ。

大阪だったらコーナンのProショップに行けば大概のネジが手に入りますし、日本橋に専門店があります。

ネットなら
http://www3.elisasp.net/takayamashop/

値段(送料とか買いに行く手間とかetc.)を考えたらもう一個スイッチプレートを購入してネジだけ取るの一番安上がりかも?(^^;

Q高分解能タイマとは何か?

高分解能タイマとは何か?
はじめまして。
timeDebCapsやQueryPerformanceCounterで知ることになる高分解能タイマなんですが
それが何なのか判り兼ねている状態なので説明が欲しくて質問いたしました。
周波数を測定する機能で、それはCPUに依存する?ということでしょうか?
1ms毎に測定するということですが何を測定してるのかあまりよく分からないでいます。
ここのところを詳しく教えていただければ有難く思います。

Aベストアンサー

timeDebCapsが何かよく分かりませんが、基本的にWindowsの話ですよね。
GetTickCountのような基本的なタイマ機能では1ミリ秒単位でも数十ミリ秒程度の精度しかない時間しか計れませんし、より精度の高いtimeGetTimeでも最大で1ミリ秒の精度しか持ちません。

QueryPerformanceCounterは1ミリ秒より細かい時間の経過を計るための機能です。これで得られる値はある周波数での時間カウントですが、この周波数はマシン依存で周波数はQueryPerformanceFrequencyで得られます。カウントの絶対値には意味がなく、差分を取ることで間の経過時間を知ることができるだけです。現状で数マイクロ秒程度の精度はあると思います。

Pentium以降のIA32系CPUではタイムスタンプカウンタがあるので、これを利用していることが推測されますが、マルチCPUや可変クロックに対応するための補正が入っていると思われます。最近だとチップセットの高精度タイマを利用しているかもしれません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング