投稿者
 メール
  題名
  内容 入力補助動画検索画像・ファイル<IMG><OBJECT>タグが利用可能です。(詳細)
    
  ファイル1
  ファイル2
  ファイル3
アップロード可能な形式(各1MB以内):
画像(gif,png,jpg,bmp) 音楽(mmf,mld) 動画(amc,3gp,3g2)

 URL
[ ケータイで使う ] [ BBSティッカー ] [ 書込み通知 ] [ teacup.>アマチュア無線 ] [ 検索 ]

[PR]     銀座 インプラント
teacup. ] [ 無料掲示板 ] [ プレミアム掲示板 ] [ teacup.コミュニティ ] [ ブログ ] [ チャット ]

全251件の内、新着の記事から10件ずつ表示します。 1  2  3  4  5  6  7  8  9  10  |  《前のページ |  次のページ》 

Re: I2C通信について

 投稿者:EDO  投稿日:2009年 9月14日(月)16時18分58秒
返信・引用
  > No.170[元記事へ]

nekosanさんへのお返事です。

> Tako21さんへのお返事です。
>
> > PIC16F877AとdsPIC30F4013を用いてI2C通信をしたいと考えております。
> > PIC16F877A(マスター)、dsPIC30F4013(スレーブ)
> > SDAとSCLラインにはデジタルオシロをつないで波形を見ることは出来ます。
> > 877Aから4013Fにアドレス及びデータを送ったのですが、F4013側では入力バッファに
> > データは入らないし、当然割り込みも働きません。
> > 877Aからはクロックとシリアルデータは出ています。ACKは帰りません(当然ですが・・・)
> > F4013側ではI2CSTATレジスタのビット3(START),4(STOP)は動いているのが確認できます。
> > スレーブの割り込み許可は入れてあります。
> > 877AとEEP-ROMの通信はうまくいきます。その回路にI2Cバスを接続して
> > アドレスを振ったのですがデータを受け付けず困っています。
> > どなたか良い知恵を持った方がいらっしゃいましたら、お助けください。
> > よろしくお願い致します。
>
> EEPROMが上手くアクセスできているということは、
> 物理配線は上手く行っていると思われるので、
> これだけだとなんとも判断つきかねますね。ひとまず
> 思いついたところから3つほど挙げさせていただきます。
>
> 1点目はこの間私が失敗したばかりの件で、アドレス設定
> の際の1ビットずれがないかどうかのこと。
>
> スレーブアドレス7ビットのさらに下位1ビットに
> 読み/書きビットが付きますが、この7ビットの位置を
> 間違えて指定してないでしょうか?
> アセンブラならあまり間違えることもないと思うのですが、
> 何らかの高級言語コンパイラだと、ちゃんと言語仕様確認
> しないと私みたいに原因不明で頭抱えることになるので…
>
> つまりアドレスの7ビットを右詰で指定するのか、左詰で
> 指定するのか。言語仕様に合っているかご確認ください。
>
> 2点目は、CPUのクロック回路のディバイダ設定。
> シリアル通信はクロック速度が影響しているので、
> クロック設定が間違えていると通信速度が送受信側で
> 一致せず、データ到着を認識できない…とか。
>
> I2Cはクロック信号があるとはいえ、各マイコンに
> よって正常に送受信できる速度範囲には限度があり、
> そこからはみ出ていればクロック信号自体が
> 上手く認識できていないかもしれません。
>
> 特に今回は16F877の送り出しが速くて、dsPIC側のクロック
> が分周されていたら取りこぼしが起る可能性があるかと
> 思います。
> I2Cクロックのディバイダも同様です。
>
> 3点目はアドレッシング幅のこと。dsPICは使ったこと
> ないので詳しくわかりませんが、比較的新しいチップ
> ですから10ビットアドレスモードにも対応している
> ことでしょう。(未調査)
>
> で、送り出しが7ビット、受信側が10ビットなら
> 正しいデータとして認識できないかと思われます。
> dsPIC側の初期設定を再度ご確認ください。
>
>
>
> あとは、start/stopビットが動いているとのこと
> ですので、調査の一環としてインタラプトドリブン
> ではなくバッファステータスビットをポーリングに
> 変えて見たら動かないでしょうか?
>
> dsPICは使ったことがないのでそのくらいしか
> 思いつかないのですが…
 

Re: Arduinoの使い方

 投稿者:nekosan  投稿日:2009年 9月13日(日)03時33分50秒
返信・引用
  > No.221[元記事へ]

sionさんへのお返事です。

> 初めまして。電子工作初心者です。
> 現在Arduinoを使っていて、Arduino同士を連結させて同時に実行させたいです。
> Arduino同士の連結は出来ないのでしょうか?
> 調べてみているのですが、なかなか良い方法が見つかりません。
> 何か良い方法はないでしょうか?


sionさん、こんにちは。

”同時に実行”というのがどんなイメージなのか
によって盛り込む要件や制約事項などが変わってくる
と思うので、ある程度イメージが見えないとなんとも
いえないかなぁといった感じです。

色々公開されているたくさんの作品でもマイコン同士
を接続して同期させた動きをしているものがあり
ますが、そういったモノはそれぞれが色々なアイデアを
盛り込んで緻密に作り上げたんだろうなぁと思います。
一般公式は無いと思います。


イメージ的に、1個1個のマイコン(今回ならarduino)
を一人一人の人に例えて考えると…

(1)どこか一つのマイコンを親玉にする

  →親玉から各子分に合図を送り、子分は合図が
   届いたらそれに相当する動作をする

(2)親分子分を作らず、同等の扱いで通信しあう

  →一人一人に名前をつけるように”通番”を
   振っておいて、宛先の番号に向けて合図を
   送り、送られる方は自分宛ての番号が呼ばれ
   たら合図に相当する動作を行う

のような方法が思いつきます。(他にもたくさん
あると思います)


また、その合図を送る通信の方法ですが、シリアル
通信を使う方法、I2Cを使う方法、I/Oピンの
HIGH/LOWで送る方法などなど色々あるかと
思います。

どの様な仕上がりを求めているのかによって
使える方法も限られてくるでしょうし、さらには
arduinoの場合シリアルはPCとの接続に使って
いるので、これをarduino同士の通信にも使う
となると少々厄介です。

また、先ほどの(1)(2)などの方式によっては
使える通信方法、使えない通信方法もでてくると
思います。


まずは”同時に実行”という意味について整理して、
arduino同士でどの様な会話(通信)を行えば
機能の要件を満たせるのかを整理してみるのは
いかがでしょう?

arduino1個1個を一人一人の人と仮定してみて、
それぞれがどんな通信を送り出し、またそれぞれ
がどんな通信を受信できればうまく機能する
のかを、arduinoの立場になったつもりで想像して
みると解りやすいかと思います。
 

Arduinoの使い方

 投稿者:sion  投稿日:2009年 9月12日(土)02時41分24秒
返信・引用
  初めまして。電子工作初心者です。
現在Arduinoを使っていて、Arduino同士を連結させて同時に実行させたいです。
Arduino同士の連結は出来ないのでしょうか?
調べてみているのですが、なかなか良い方法が見つかりません。
何か良い方法はないでしょうか?
 

Re: PICのWDTの使い方

 投稿者:nekosan  投稿日:2009年 9月 4日(金)00時19分39秒
返信・引用
  > No.214[元記事へ]

PIC初心者さんへのお返事です。

> PICの初心者です。CCS-Cでウォッチドックタイマーを使いたいのですが、使い方が良くわかりません。実際に実験したのですが、リセットがかからないのです(restart_wdt();をはずした状態実験しました)。プログラムは#fusesでWDT設定して、SETUP_COUNTERS(RTCC_INTERNAL,WDT_1152MS);を設定して、restart_wdt();でクリアーすればいいのではと思っているのですが何か足らないのでしょうか?ウオッチドックの概念は他のCPUでも使ったことがあるのでわかっています。restart_wdt();は200msおきにかけています。
> restart_wdt();しなければリセットがかかるはずだと思うのですがかかりません。nekosanさん、又は詳しい方使い方を教えてください。本にC言語でのプログラム例もないのでよくわからないんです。

ウォッチドッグタイマーは使う要件が今まで無かったので
詳しいことは正直良く知りません。概要だけです。
また、うちに現存しているCCS−Cの英文マニュアル
(リングファイル)は凄く古く、また一緒に買った
Nigel Gardner氏のCCS−C入門の本にも
後閑さんの本にもサンプルらしいものは見当たりませんねぇ。


お使いのチップが何かが良く判りませんが、#fuses wdt
としているのであれば多分PCM版あたりでしょうか?

ウォッチドッグタイマーのセッティング関数は
マニュアルによるとsetup_wdt()のようです。
また、引数も幾つかの中から選ぶようになって
いるようで、好き勝手な時間を設定出来るようには
なっていないように見えます…


あとウォッチドッグタイマーが動かない原因として
思いつくのはタイマーのクロック源が内部配線の
切り替え上、WDTまで上手く届いていない設定に
なっているかもしれません。

mplabのシミュレータがCCS−Cの
ウォッチドッグタイマーにどの程度対応対応
出来ているのか判りませんが、シミュレータで
実行してみて、その結果設定された各SFRの
設定値を眺めてみて、その設定内容とデータシート
を見比べてみて妥当かどうか確認する手もあるかと
思います。WDTEビット、PSAビットとか。



あと、#use delayとの兼ね合いも相性があるかも
しれません。

とりあえず思いつくのはそのあたりですが…。
 

Re: R3 各ピン入力を読み取るには

 投稿者:nekosan  投稿日:2009年 9月 3日(木)23時34分9秒
返信・引用
  > No.218[元記事へ]

GTRさんへのお返事です。

> 有難うございます。
> 受信機の1chコネクタをPOA0 2chを POA1 3chをPOA2・・・・
> 接続すると 1chのコネクタからの信号が出て2chのコネクタかたの信号が出て
> 3chから・・・・と5ch分が繰り返し順にて出ているということでしょうか
> それが高速に出されているので みな常に同時出ていると感じるのでしょうか
>
> 読み取った データで 新たなるRCサーボ用を制御する PWM信号にしなくては
> なりません。 その点がいまいち わからず・・・・お手上げです
> 良いサンプルプログラム ありませんか 教えてください。


現物が手元にあるわけじゃないので良く判りませんが、
5チャンネルのサーボ用PWM信号を読み取るのであれば、
まず1チャンネル目のパルス幅を読見込んで、次に
2チャンネル目のパルス幅を読み込む、つまり
時分割して順々に読み込むとしても、全チャンネルを
読み終わるまでの時間はそれほど大きくないのでは
ないでしょうか?

各チャンネルとも少なくとも20ミリ秒毎にパルスが届く
わけだから、5チャンネル分を順々に読み出していっても
最大で要する時間は20ミリ秒×5=100ミリ秒…
つまり0.1秒。

平均ならその半分程度で済むかもしれません。
もしkugaさんのおっしゃるようにパルスが順々に
出力されるという信号規格があるならば、
順々に読み込んでも5チャンネル全部読むのに
数m秒からせいぜい数十m秒程度で済むはずです。


この0.1秒の遅れがクリティカルになるのであれば
別ですが、許容できるのであればそれほどシビアに
考える必要は無いのでは?と思うのですが…。

それよりも内蔵タイマーのリソースが足りるのかどうか
の方が切実な気がします。


PWM信号を入力してからそれを一旦加工し、
さらにPWM信号として出力するという処理ならば、
入出力両方ともタイマー機能を扱う必要が生じる
からです。

PWMのパルスの幅を検知するなら一般的には
タイマーをキャプチャー機能として使うので、
それが最大5チャンネル分必要。
そしてPWMでサーボ用信号を出力するのにも
やはり5チャンネル分必要です。


これら全部をmega128の内蔵しているタイマー
で行うとしたらそもそもマイコンの選択に無理が
ありそうです。計10個のタイマーが必要となります。

なので1個のタイマーで複数のチャンネルを重畳して
処理させる必要があるでしょうし、そうなると
かなり込み入ったプログラムになるかと思います。

ちなみにPWM出力の例としては、arduinoの
サーボモーター用ライブラリが参考になるかも
しれません。

入力側はもっともっと厄介でしょう。外付けの
回路も必要になるかもしれません。


今回はどうやら新しいモノを生み出そうとしている
ようなので、そもそもこれらの条件をすべて奇麗に
満たすようなサンプルプログラムというのはどこにも
無いのではないでしょうか?


そしてまた、たくさんの課題が未解決な状態で混沌
としているようです。

(1)マイコン内蔵ペリフェラルの使い方について
   …例えばタイマーユニットなど
(2)サーボ制御用の信号フォーマットについて
   …入力される信号の正体、出力すべき信号の
    正体が不明確(外部仕様が未確定)
(3)やりたい内容をプログラムのロジックに
   落としこんでいくスキルについて
(4)これらを統合していく解決力について


(1)〜(3)の問題が未解決のまま、いきなり
(4)を行おうとしているように見えてしまいます。
物理的に不可能では?


まずは(1)〜(3)の各課題について一つ一つ
足場を固めるところから手をつけてみるのは
いかがでしょうか?
 

Re: R3 各ピン入力を読み取るには

 投稿者:GTR  投稿日:2009年 9月 3日(木)20時24分41秒
返信・引用
  > No.217[元記事へ]

kugaさんへのお返事です。

> GTRさんへのお返事です。
>
> > > パルスは同時に出るのではなく、順次出ているはずです。
> > ありましたが 高速で順番に信号が出ていということなんでしょうか
>
> ラジコンのPWMは周期が20ms程度 Hパルス幅が 1〜2mSだと思います。
> このパスルはの出るタイミングは5CH同時ではなくすれていると
> いうことです。
> 5CH分をオシロスコープやロジアナに表示したイメージをしてもらうと
> 各CHのパルスは重なりません。
>
> 図示しないとうまく説明できません。
> 2CHでいいのでオシロスコープで観測して見るのが一番いいです。
有難うございます。
受信機の1chコネクタをPOA0 2chを POA1 3chをPOA2・・・・
接続すると 1chのコネクタからの信号が出て2chのコネクタかたの信号が出て
3chから・・・・と5ch分が繰り返し順にて出ているということでしょうか
それが高速に出されているので みな常に同時出ていると感じるのでしょうか

読み取った データで 新たなるRCサーボ用を制御する PWM信号にしなくては
なりません。 その点がいまいち わからず・・・・お手上げです
良いサンプルプログラム ありませんか 教えてください。
 

Re: R3 各ピン入力を読み取るには

 投稿者:kuga  投稿日:2009年 9月 3日(木)15時03分11秒
返信・引用
  > No.216[元記事へ]

GTRさんへのお返事です。

> > パルスは同時に出るのではなく、順次出ているはずです。
> ありましたが 高速で順番に信号が出ていということなんでしょうか

ラジコンのPWMは周期が20ms程度 Hパルス幅が 1〜2mSだと思います。
このパスルはの出るタイミングは5CH同時ではなくすれていると
いうことです。
5CH分をオシロスコープやロジアナに表示したイメージをしてもらうと
各CHのパルスは重なりません。

図示しないとうまく説明できません。
2CHでいいのでオシロスコープで観測して見るのが一番いいです。
 

Re: R3 各ピン入力を読み取るには

 投稿者:GTR  投稿日:2009年 9月 2日(水)22時02分55秒
返信・引用
  > No.213[元記事へ]

kugaさんへのお返事です。

> GTRさんへのお返事です。
>
> GTRさん始めまして。
>
> 5chのサーボPWMのパルス幅を測定すると言うことですね。
> ひとつの受信機から出ているサーボ信号なら
> パルスは同時に出るのではなく、順次出ているはずです。
> このパルスの出力順に合わせて、パルス幅計測ルーチンを
> 5個並べれば問題ないと思います。
>
> mes_5ch() {
>   CH1_mes();
>   CH2_mes();
>   CH3_mes();
>   CH4_mes();
>   CH5_mes();
> }
>
> 受信機kから出ている信号を観測してどんな順番で出力されて
> いるかの確認をし、順番をそれに合わせる必要はあります。
> CHx_mes();は L->H->L とハルスがlowに戻ったら
> 計測完了としてすぐreturnしている必要があります。
>
> 参考にしたプログラムはキャプチャー機能を利用している
> かも知れません、その場合キャプチャーに利用できるpinは
> 制限があるので5CHには対応できません。

有難うございます。
教えていただけませんか
RC プロポの受信機は 1chごとにコネクターでサーボに接続しています。
サーボの動作は 1度に5ch分同時に動かすこともあります。
最低でも2〜3chは同時に動かしています。
常にニュウトラルPWM信号は すべてのchに出ていますが
> パルスは同時に出るのではなく、順次出ているはずです。
ありましたが 高速で順番に信号が出ていということなんでしょうか
キャプチャー機能自体 いまだ理解できていません。
本当に 初心者がプログラムを組むので いろいろと つまらない事を
お聞きするかもしれませんが おゆるしください。
 

Re: R3 各ピン入力を読み取るには

 投稿者:GTR  投稿日:2009年 9月 2日(水)21時28分16秒
返信・引用
  > No.212[元記事へ]

nekosanさんへのお返事です。

> GTRさんへのお返事です。
>
> > 有難うございます。
> > 5chで 遠隔操縦できる ロボットを制作するのですが
> > 家にあります ラジコンの送受信機を使うため 受信機側から出てくる
> > 信号は直接 RCサーボを動かせる RCサーボ用PWM信号です。
> > それを AVRチップに入力 1つの操作で 3つ〜4つのサーボを動かす事になり
> > 動作パターンによって サーボの数が変わります。
> >
> > 使う言語は C言語でプログラムを製作中です。 本当に初心者でして
> > いろいろな サンプルプログラムから 1ch分のRCサーボ用PWM信号を読み取る
> > プログラムは 見つけたのですが それを5ch分いかに読み取るかです。
> > 入力ポートのすべてのピンを 順に高速でスキャンすれば 読める
> > と 教わったんですが プログラムが組めず悩んでます。
> > 有難うございました
>
>
> 「RCサーボ用の信号」という言葉が指しているのが、
> ↓このような
> http://nekosan0.bake-neko.net/library_servo.html
> いわゆる一般的なサーボモーター駆動用の信号なのか、
> それともプロポ側と周辺機器の間でi/fを取り交わす
> ようなメーカー固有の仕様の信号なのか、その辺りが
> 良く見えないのですが、もし、1チャンネル分でも読み取る
> サンプルプログラムがあるのなら、可能な範囲で
> プログラムコードを公開してみる手はあるかもしれません。
>
> 私はラジコン関係は全然経験がないのでそのプログラムの
> 意味が理解可能かどうか判りませんが、そちら方面が得意な
> 方が手を貸してくれるかも知れませんので。
>
>
> ちなみに、パルスのバンド幅をセンシングするのであれば、
> AD変換器や普通のデジタル入力ピンを使うのではなく、
> 普通は内蔵タイマーユニットが持っている「キャプチャー機能」
> を使うのが一番楽で正確なのでは、と言う気がしますが…
> サンプルプログラムは本当にAD変換を使っているのでしょうか?

ありがとうございます。
サンプル プログラムですから いろいろと理解しているところで
チップに書き込んで 動作はしました。
これから 分析ですよ 私に解るか・・・・がんばります。
 

PICのWDTの使い方

 投稿者:PIC初心者  投稿日:2009年 9月 2日(水)17時37分8秒
返信・引用
  PICの初心者です。CCS-Cでウォッチドックタイマーを使いたいのですが、使い方が良くわかりません。実際に実験したのですが、リセットがかからないのです(restart_wdt();をはずした状態実験しました)。プログラムは#fusesでWDT設定して、SETUP_COUNTERS(RTCC_INTERNAL,WDT_1152MS);を設定して、restart_wdt();でクリアーすればいいのではと思っているのですが何か足らないのでしょうか?ウオッチドックの概念は他のCPUでも使ったことがあるのでわかっています。restart_wdt();は200msおきにかけています。
restart_wdt();しなければリセットがかかるはずだと思うのですがかかりません。nekosanさん、又は詳しい方使い方を教えてください。本にC言語でのプログラム例もないのでよくわからないんです。
 

以上は、新着順31番目から40番目までの記事です。 1  2  3  4  5  6  7  8  9  10  |  《前のページ |  次のページ》 
/26 


[PR]