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

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

A 回答 (2件)

まず、言語環境を正確に毎回書いてください。


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
    • good
    • 0
この回答へのお礼

回答ありがとうございました、勉強してみます。

お礼日時:2009/05/14 12:42

神様でもないとこの質問だけで完全な回答を出すのは無理でしょうが、おそらくなんらかのマイコンのSFR定義じゃないですか。


TCNTで検索するとH8が出てくるんでその辺ぽいような気はしますが。
    • good
    • 0
この回答へのお礼

回答ありがとうございました

お礼日時:2009/05/14 12:43

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

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

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

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

QAVRのUSART接続で困っています。

AVRのUSART接続で困っています。
AVR初心者です。Atiny2313に送受モニタ用のLED2個と秋月のFT232Rシリアル-USB変換モジュールのみを接続した簡単な回路を組み、双方のTXD,RXD同士を交差接続し、PCとUSART経由でデータ転送をする実験をしています。変換モジュールの電源はUSBバスから、AVR側の電源は安定化電源またはモジュール経由でUSBバスから供給しました。データの送受信自体は何の問題もないのですが、わからないことがありご教示下さい。

1)変換モジュールのTXD,RXDをAVR側のRXD,TXDに接続しただけで、AVRに電源が供給されてしまい、わざわざ別電源を供給しなくともAVRが勝手に動いてしまいます。各部の電圧は正規に電源を供給した時よりも0.5V程度低めにでますが、AVR自体の動作はUSARTを使う使わないにかかわらず(例えばLEDポートの初期化のみでも)正常です。AVR側の配線とソフトは何度もチェックして間違いないと確信しています。こんなものなのでしょうか?

2)USART初期化ルーチンで教科書どおり下記の様に書きました。デバッガで追跡すると最初はUBRRHにゼロが入るのですが、なぜか6行目を実行するとUCSRCの内容と同じものがUBRRHにも入ってしまいます。
ldi r16, 0
out UBRRH, r16
ldi r16, 0x19;bau rate 2400 at 1MHz
out UBRRL, r16
ldi r16, 0b00000110;async, no parity
out UCSRC, r16;1 stop bit data 8bit

いろいろ検討したところ、UCSRCのMSBを1(ldi r16, 0b10000110)としてやるとUBRRHにははいらないことがわかりました。ATMELのマニュアルではこのビットはリザーブなおでさわるなとありそれ以上の説明はありません。何かおかしなことをやっているのでしょうか? この簡単な6行だけのプログラムですら1)、2)の問題が起きます。一体何が悪いのか切り分けができず困っています、アドバイスをお願いします。

AVRのUSART接続で困っています。
AVR初心者です。Atiny2313に送受モニタ用のLED2個と秋月のFT232Rシリアル-USB変換モジュールのみを接続した簡単な回路を組み、双方のTXD,RXD同士を交差接続し、PCとUSART経由でデータ転送をする実験をしています。変換モジュールの電源はUSBバスから、AVR側の電源は安定化電源またはモジュール経由でUSBバスから供給しました。データの送受信自体は何の問題もないのですが、わからないことがありご教示下さい。

1)変換モジュールのTXD,RXDをAVR側のRXD,TXDに接続しただけで、AV...続きを読む

Aベストアンサー

>接続しただけで、AVRに電源が供給されてしまい

AVRマイコンに、予定の電源供給元([電源1]とします)からの
供給がない時でも、AVRマイコンの信号入力端子に"High"レベルの信号入力があると
それが電源端子の電圧も引き上げようとします。
電源1 がメカスイッチなどで切り離されてる、AVRマイコン部分の消費電力がごく少ない、と
顕著です。

これは、信号端子の内部に保護回路として電源端子に向かってダイオードが入っている為です。
>0.5V程度低めにでますが、
はダイオードの順方向電圧降下分、低くなる、という事です。


電源投入順序によってはうまく初期化がされない事も起こり得るし、
基本的に半導体部品に「電源供給なしで信号端子に電圧がかかる状態」はまずいです。
(先の保護回路により、すぐ壊れることはないでしょうけど)
電源供給元と供給先が複数ある場合は
・一方で他方をON/OFFコントロールする
・電源OFF部分にに高い電圧を与えないように
 「電源ON部分の出力はLowかハイインピーダンスにする」
のようなコントロールが要ります。

この点ではなるべく電源は1つの方がいいです。

>2)USART初期化ルーチン
の方は知識がないのでわかりません。

>接続しただけで、AVRに電源が供給されてしまい

AVRマイコンに、予定の電源供給元([電源1]とします)からの
供給がない時でも、AVRマイコンの信号入力端子に"High"レベルの信号入力があると
それが電源端子の電圧も引き上げようとします。
電源1 がメカスイッチなどで切り離されてる、AVRマイコン部分の消費電力がごく少ない、と
顕著です。

これは、信号端子の内部に保護回路として電源端子に向かってダイオードが入っている為です。
>0.5V程度低めにでますが、
はダイオードの順方向電圧降下分、低くなる...続きを読む

Qあるプログラム実行中に別のプログラムを起動したい

とあるC言語で出来たa.outというプログラム実行中に、b.outというプログラムを実行するプログラム「c.c」を作成したいのですが、どのようにプログラミングすればよいでしょうか?
a.outは無限ループするような十分に実行時間の長いプログラムです。
ちなみに、c.cはシェルスクリプト「c.sh」でも構いません。

Aベストアンサー

fork()してexec()する。
またはsystem()で&つきでb.outを起動。
詳しくは下記URLを参照。
http://www.ncad.co.jp/~komata/c-kouza3.htm

QAVR Studio 5へ移行可能?

今まで、ATmega88のC言語プログラムをAVR Studio4.18 + WINAVRで書いていたのですが、AVR Studio5が登場してきて、今まで作ったC言語のファイルをそのまま移行してコンパイルすることは可能なのでしょうか?


どうぞ、ご教授頂きますよう、お願いいたします。

Aベストアンサー

基本的には、そのまま移行できます。

ただし、(これは、AVR Studio のバージョンの問題というより、WinAVRの方のバージョンの問題ですが)、
WinAVR(AVR toolchain)側のgccのバージョンが変わることにより、最適化の傾向が変わる場合もありますので、
・volatileの使い方をミスっているなど「たまたま動いていたプログラム」が、違うバージョンのgccでは動かなくなる、
・出力コードサイズがメモリ容量ぎりぎりだったりすると、つがうバージョンのgccではメモリが収まらなくなる、
といったことになる可能性は否定できません。

Qドロネー三角形分割のプログラムを作成中なのですが、参考プログラムが読めなく困っています。

ドロネー三角形分割のプログラムを作成中なのですが、参考プログラムが読めなく困っています。
ソースコードは以下の様になります。
--------------------------------------------------
bool incircle(point a, point b, point c, point p) {
a -= p; b -= p; c -= p;
return norm(a) * cross(b, c)
+ norm(b) * cross(c, a)
+ norm(c) * cross(a, b) >= 0; // < : inside, = cocircular, > outside
}
#define SET_TRIANGLE(i, j, r) \
E[i].insert(j); em[i][j] = r; \
E[j].insert(r); em[j][r] = i; \
E[r].insert(i); em[r][i] = j; \
S.push(pair<int,int>(i, j));
#define REMOVE_EDGE(i, j) \
E[i].erase(j); em[i][j] = -1; \
E[j].erase(i); em[j][i] = -1;
#define DECOMPOSE_ON(i,j,k,r) { \
int m = em[j][i]; REMOVE_EDGE(j,i); \
SET_TRIANGLE(i,m,r); SET_TRIANGLE(m,j,r); \
SET_TRIANGLE(j,k,r); SET_TRIANGLE(k,i,r); }
#define DECOMPOSE_IN(i,j,k,r) { \
SET_TRIANGLE(i,j,r); SET_TRIANGLE(j,k,r); \
SET_TRIANGLE(k,i,r); }
#define FLIP_EDGE(i,j) { \
int k = em[j][i]; REMOVE_EDGE(i,j); \
SET_TRIANGLE(i,k,r); SET_TRIANGLE(k,j,r); }
#define IS_LEGAL(i, j) \
(em[i][j] < 0 || em[j][i] < 0 || \
!incircle(P[i],P[j],P[em[i][j]],P[em[j][i]]))
double Delaunay(vector<point> P) {
const int n = P.size();
P.push_back( point(-inf,-inf) );
P.push_back( point(+inf,-inf) );
P.push_back( point( 0 ,+inf) );
int em[n+3][n+3]; memset(em, -1, sizeof(em));
set<int> E[n+3];
stack< pair<int,int> > S;
SET_TRIANGLE(n+0, n+1, n+2);
for (int r = 0; r < n; ++r) {
int i = n, j = n+1, k;
while (1) {
k = em[i][j];
if (ccw(P[i], P[em[i][j]], P[r]) == +1) j = k;
else if (ccw(P[j], P[em[i][j]], P[r]) == -1) i = k;
else break;
}
if (ccw(P[i], P[j], P[r]) != +1) { DECOMPOSE_ON(i,j,k,r); }
else if (ccw(P[j], P[k], P[r]) != +1) { DECOMPOSE_ON(j,k,i,r); }
else if (ccw(P[k], P[i], P[r]) != +1) { DECOMPOSE_ON(k,i,j,r); }
else { DECOMPOSE_IN(i,j,k,r); }
while (!S.empty()) {
int u = S.top().first, v = S.top().second; S.pop();
if (!IS_LEGAL(u, v)) FLIP_EDGE(u, v);
}
}
double minarg = 1e5;
for (int a = 0; a < n; ++a) {
for (set<int>::iterator itr = E[a].begin(); itr != E[a].end(); ++itr) {
int b = *itr, c = em[a][b];
if (b < n && c < n) {
point p = P[a] - P[b], q = P[c] - P[b];
minarg = min(minarg, acos(dot(p,q)/abs(p)/abs(q)));
}
}
}
return minarg;
}

--------------------------------------------------
http://www.prefield.com/algorithm/geometry/delaunay.htmlのサイト様のものなんですが、私自身c++プログラム初心者なので、わからず困っています。。概要でも結構ですのでどなたか回答してくださる方いらっしゃれば回答よろしくお願いします。

ドロネー三角形分割のプログラムを作成中なのですが、参考プログラムが読めなく困っています。
ソースコードは以下の様になります。
--------------------------------------------------
bool incircle(point a, point b, point c, point p) {
a -= p; b -= p; c -= p;
return norm(a) * cross(b, c)
+ norm(b) * cross(c, a)
+ norm(c) * cross(a, b) >= 0; // < : inside, = cocircular, > outside
}
#define SET_TRIANGLE(i, j, r) \
E[i].insert(j); em[i][j] = r; \
E[j]....続きを読む

Aベストアンサー

 具体的にどの部分が解らないのかを明示していただかないと、これだけでは、何がわからないのかが解らないと思いますよ。

 あくまで想像ですが、
  set<int> E[n+3]; や stack< pair<int,int> > S;
の部分が解らないのであれば、STLを調べてみてください。
C++ STL でぐぐれば沢山ヒットします。

QAVR回路製作

D社のDBR-5FYSという5KVAの発動発電機を入手しました。
回転界磁巻線が黒く焼けています。
AVR回路の故障によるものと思われます。
巻線は巻き替えが可能ですが、
AVR回路は、部品入手不可能でした。
半導体を使っているのでしょう金属の箱に樹脂でモールドしてあり、
修理も出来そうにありません。
多少大形になっても外付けすれば良いのでAVR回路を自作
あるいは他の発電機の部品の流用をしたいと考えています。

余談ですが、その昔はどんな方法で電圧調整をしていたのでしょうか。
古い自動車の充電装置の様にリレー接点を使用したものもあったのでしょうか。

Aベストアンサー

発電機、AVRの概略説明は下記が参考になると思われます。
http://nippon.zaidan.info/seikabutsu/2002/00395/mokuji.htm
平成14年度 初級講習用指導書(電気機器編)
2・1・5 自動電圧調整器

AVRを購入されるのでしたら次はいかがでしょうか
http://www.seikosha-mfg.co.jp/scl/sclin.html
精工社の実験実習機器

(いずれもインターネットからサーチしたものです。その他にも色々あるようです) 

Q画像を扱うプログラムを書くのに役立つ入門書・webページ

GCCで画像(とりあえずbmp)を扱うプログラムを書こうと思うのですが、
これまで全く画像を扱った経験がありません。

役に立ちそうな分かりやすい入門書・参考書
あるいはwebページなどがありましたら教えてください。

Aベストアンサー

こんばんは。
「画像を扱う」との意味が今一不明のため、一般的な範囲での情報です。

Netpbm: おそらく最も多種な画像フォーマットを扱うソフトです。その中で BMP を扱っている部分のソースが参考になるのではないでしょうか?

ImageMagick: これも多種の画像を扱うソフトです。Netpbm が基本的にコマンドベースで(本質的に画像データを扱う事に専念)あることに対して、これは X 上の GUI も備えています。

GD: C 上から line や circle 等の図形や文字を描画するためのライブラリです。但し、出力は PNG や JPEG です。

主な物を述べましたが、上記ソフト名をキーにネット上を検索されると色々な情報が見つかると思います。

QAVRマイコン ビルドエラー

AVRマイコンを
#include <avr/io.h>

int main(void)
{
DDRD =0b11111111;
PORTD=0b11111111;
}
で、ビルドしようとしているのですが、
../test3.c:0: error: MCU `atmega88p' supported for assembler only
と、その後に
../test3.c:5: error: `DDRD' undeclared (first use in this function)
等と、エラーが出てビルド出来ません。

どうすればいいのでしょうか?
回答お願いします。

Aベストアンサー

> ../test3.c:0: error: MCU `atmega88p' supported for assembler only

このメッセージからすると「CコンパイラがATmega88p をサポートしていない」というエラーに見受けられます。

私の手元の環境(AVR Studio 4.18/WinAVR 20100110)では、質問者さんの挙げられたコードは、「Device:atmega88p」で作成したプロジェクトで問題無くコンパイルできましたので、
質問者さんの使われているWinAVR のバージョンが古いということはないでしょうか。

QVBとかC#とかC++とか

Visual Studio2010でシステムを作るのですが、
VBやC#やC++などありますが、どれがどのようなのに向いているのですか?

VBは簡易ですが、処理などは遅いのでしょうか?
フォームをつくってデータベースとデータのやりとり(文字情報のみ)を
するシステムはどの言語が向いてますか?
一度に使用する人数は数十人いて、レスポンス重視です。
教えてください、お願いします。

Aベストアンサー

データベースと連携するならば、僕だったらVC#一択です。
C# 3.0以降はLINQというDB連携機能が言語仕様自体に組み込まれているし、インテリセンスなどのIDEの支援が最も手厚いのがVC#です。

VB.NETは機能的にはVC#とほぼ同等で、速度もほぼVC#と同等のものが出せますが、文法が美しくないので僕はあまり好きではありません。仕事でもなければ使いたくないです。

VC++は生産性・機能性の点でVC#に及ばないです。.NET用に拡張されたC++/CLIはVC++ 2010でのインテリセンスが機能しないのでお勧めしません。

実行速度面においては、たとえC#でも、.NETの癖を知った上で気をつけて実装すれば大抵の場合そうそう困ることはないです(スループットが重要な産業系の画像処理、CGレンダリング処理、あるいはゲームなどのリアルタイム系でなければ)。
ただし、従来のネイティブ コードの資産を流用しやすく、細かい制御がしやすいのはVC++です。

QAVR SPI mkiiの修理窓口

Atmelのマイコンを使ってプログラミングなどをしております。現在持っているAVR SPI mkiiという書き込み機を使っているのですが、ここ最近これをPCとUSBで接続しても認識しなくなりマイコンに書き込みができなくなってしまいました。


このAVR SPI mkiiは5年くらい前に秋葉原で購入したものです。この書き込み機の修理依頼などをATMELの窓口などご存じの方いらっしゃいませんでしょうか?

どうぞ、ご教授の程よろしくお願い致します。

Aベストアンサー

AVR SPI mkiiじゃなくて、AVR ISP mkIIですよね?
だとしたら、修理窓口なんて日本国内には無いっぽいので、修理するよりも同じ製品を買い直した方が良いかと。
英語力に自信があるのなら製造元に連絡して修理を依頼することも可能だと思いますが、送料と修理費用を考えればどう考えても新品を買った方が安いですしね。
新品を買う場合は下記などからどうぞ。


http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=7DBK-S7LE

Qc言語のプログラミングの問題で初項を1、公比2とした等比数列を表示するプログラムで for(i=1;

c言語のプログラミングの問題で初項を1、公比2とした等比数列を表示するプログラムで
for(i=1;i<10000;i_)
下線部に何をいれたらいいのですか?
表示する値が100000以上のあたいになる直前で表示を終えるようにしてます

Aベストアンサー

そこにくるのは、ループが回る直前に加わる指示なので、i++、あるいはi=i+1
を入力すれば大丈夫でしょう(*´-`)


人気Q&Aランキング

おすすめ情報