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

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

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

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

ICD2でデバックできない。

 投稿者:naga64  投稿日:2009年 7月 3日(金)21時32分18秒
返信・引用
  ICD2を使ってデバックしたいのですが、「ICDWarn0020: Invalid target device id (expected=0x89, read=0x83)」というエラーが出てデバックモードに入れません。プログラムはCCS−Cでしています。ちなみにプログラムモードだと正常にプログラムできます。何が悪いのでしょうか?ICD2で16F877Aと16F819はデバックしたことがあるのですが、同じようにしてなぜ出来ないのでしょうか?教えてください。  

Re: I2C通信について

 投稿者:nekosan  投稿日:2009年 6月27日(土)00時44分58秒
返信・引用
  > No.171[元記事へ]

Tako21さんへのお返事です。

> ご指摘の通りアドレスに重点を置きマニュアルに目を通しながら
> 実験をすると、アドレスデータのACKは出てきました。
> さて、データ受信に向かってがんばります。
> ありがとうございました。

動きましたか…。よかったです。
データの送受信のハードルはもっと低そうですから、
あとは時間と体力でしょうかね。


そうそう。以前AVRのボード2台を使って実験を
する際に、頭の中を整理しようと思って書き出した
図を以前ブログの日記に載せてました。
http://brown.ap.teacup.com/nekosan0/256.html

AVR用の図なのでそのままではPICの役には
立たないのですが…

解説本の類を眺めると、PIC用もAVR用も
マスター側処理とスレーブ側処理でページが別々に
書かれているので、一緒に動かす場合の全体の
流れがわかりにくかったため、1枚の画にまとめた
ものです。


簡単に図の解説をしますと、真中のレモン色の矢印が
I2Cのバスで、その上下の青っぽい箱がそれぞれ
AVRマイコンです。AVRマイコンはユーザソフトが
自分で処理する部分と、内蔵ハードウェアが勝手に動作
してくれるところで切り分けてあります。左から右に
時間が経過していくと見てください。

I2Cバス上に現れる「S」がスタートコンディション、
「SLA+W」はスレーブアドレス+書き込みモード、
「A」はACK、「DATA」は1バイトデータ、
「P」はストップコンディションです。

上のバスマスタから下のスレーブに1バイトを送る
時の流れをマンガにしてみたのですが、2バイト以上
送る時には色の濃い部分を繰り返すことになります。
PICも大体処理方法は似た感じかと思われます。

($08とか$18などはAVRの内蔵ペリフェラル
 が返すステータスなので気にしないで下さい)

丸数字の部分でそれぞれソフトウェア上でデータを
セットしたり、返ってきたステータスを確認したり
といった何らかの処理をすることになります。

今回はdsPICがスレーブ側ということなので、
下半分の部分がもしかしたら応用できるかも…と
考えました。

もしお役に立てば…。
 

Re: I2C通信について

 投稿者:Tako21  投稿日:2009年 6月26日(金)10時39分39秒
返信・引用
  > No.170[元記事へ]

nekosanさんへのお返事です。

ご指摘の通りアドレスに重点を置きマニュアルに目を通しながら
実験をすると、アドレスデータのACKは出てきました。
さて、データ受信に向かってがんばります。
ありがとうございました。

> あとは、start/stopビットが動いているとのこと
> ですので、調査の一環としてインタラプトドリブン
> ではなくバッファステータスビットをポーリングに
> 変えて見たら動かないでしょうか?
>
> dsPICは使ったことがないのでそのくらいしか
> 思いつかないのですが…
 

Re: I2C通信について

 投稿者:nekosan  投稿日:2009年 6月23日(火)23時16分8秒
返信・引用
  > No.169[元記事へ]

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は使ったことがないのでそのくらいしか
思いつかないのですが…
 

I2C通信について

 投稿者:Tako21  投稿日:2009年 6月23日(火)17時29分22秒
返信・引用
  PIC16F877AとdsPIC30F4013を用いてI2C通信をしたいと考えております。
PIC16F877A(マスター)、dsPIC30F4013(スレーブ)
SDAとSCLラインにはデジタルオシロをつないで波形を見ることは出来ます。
877Aから4013Fにアドレス及びデータを送ったのですが、F4013側では入力バッファに
データは入らないし、当然割り込みも働きません。
877Aからはクロックとシリアルデータは出ています。ACKは帰りません(当然ですが・・・)
F4013側ではI2CSTATレジスタのビット3(START),4(STOP)は動いているのが確認できます。
スレーブの割り込み許可は入れてあります。
877AとEEP-ROMの通信はうまくいきます。その回路にI2Cバスを接続して
アドレスを振ったのですがデータを受け付けず困っています。
どなたか良い知恵を持った方がいらっしゃいましたら、お助けください。
よろしくお願い致します。
 

Re: MCLRピンの使い方について

 投稿者:nekosan  投稿日:2009年 6月18日(木)20時51分31秒
返信・引用
  > No.166[元記事へ]

naga64さんへのお返事です。

> 初心者の質問で恐縮なのですが、PIC16F628Aを使って製作するのですが、ポートRA5使ってLED等を駆動しますが、このRA5のピンはリセットに関係する /MCLRピンと兼用になっています。リセット端子として考えると?電源にプルアップ等しなければいけないと思いますが、ポートRA5として使う時でも電源にプルアップしなければいけないのでしょうか?通常電源にプルアップ又は直接電源に接続するのが正解ですか?それとも、プルアップは書き込み時のみ必要ですか?でもプルアップしなくてリセットはかかるのでしょうか?詳しく教えてください。


まず結論から。

628のRA5はI/Oピンモードに変更しても
入力モードにしかなりません。

データシートの35ページ、TABLE 5-1: PORTA FUNCTIONS
をご覧ください。
LEDを駆動とのことですが、多分出力(LEDを点灯)
という用途だと思うので、その用途には使えません。

どうしてもRA5ピンでなければだめなのでしょうか?


あと、簡単なように見えてマイコンのリセット回路周りは
結構頻繁にトラブルを起こす原因になっています。

仮に制御レジスタの設定は今回の628用のケース
だけに特化して
  「どうすればいいか」
の結論だけ知っても、多分応用が一切利かないと
思われます。

さらにはリセットに限った話ではなく、マイコンの
I/Oピンは一般にたくさんの機能を重畳させて
あり、都度制御レジスタを切り替えて使用する必要が
あります。
特にPICはAVR以上にI/Oピンの切り替え設定が
複雑なので、単純に制御レジスタの設定方法を628の
1パターンだけ知っても多分全く応用が利かないと
思います。

面倒でも、データシートに書かれている内部回路を
紐解いていって、制御レジスタの情報がどういう風に
入出力ピンに影響しているのか、どこをどんな風に
設定すればいいか…
  「こうすればいいはず」
を都度都度突き詰めていかないと、いざ思い通りに
動かなかった時に、原因究明も対策も打ち様がない
かと思われます。


実はPICを触り始めた頃にまさにその辺りで
私自身がとーーーーーーっても悩んだ経験があります。

で、いきなり英文データシート読んでもチンプンカンプン
だったので、日本語と挿絵で判りやすく解説されている
後閑さんの本を一通り読み下し、マイコンの中身が
どうなっているのかとかを理解し、それに関する
専門単語の意味などを覚えました。


後閑さんや山根さんの本にはその辺りの内部回路の
読み解き方とか制御方法とかのイロハが平易に
書かれているので、これらの本で一度読み解けば
英文データシートも特に難しいものではありません。
(文法なんて中学生レベルですしね)

逆にいうと、後閑さんや山根さんの本はデータシートの
解読本といった感じなので、一旦理解してしまえば、
PICだろうがAVRだろうが、あとは単にバリエーション
の話なのでいくらでも応用は利きます。

プルアップってなんなのか、とか、プルアップが
必要なのか必要ではないのかとか、そもそも
リセットって内部ではどのように働いているのか、
とか、その手の話が理解できれば自信を持って
判断できるようになるかと思います。


文章を拝読するに、リセット関係について勘違いを
されているような気がするのですが、
設定間違えると、エラーメッセージなど出ずに
マイコンから煙がでたりしちゃいますしね…。


あと、リセットをひとたびI/Oピンに変えてしまうと、
元に戻す時等に厄介なので(再度プログラムの書き換えを
する時など)、よほど必要に迫られない限りはリセット
端子として残しておいた方が良いかと思います。


始められてからまだ間もないのだと思いますが、
まさにこの辺りがソフトウェアだけの開発と
大きく違うところで、一つの大きな壁だと思うので、
是非頑張って乗り越えいっていただければ、と。


(知ったようなことを書いてますが、そもそも私自身
 が新しい情報に触れるたびに勉強不足を思い知る
 毎日といった感じなので、
   「えらそうなことを…」
 という程度で読み流していただければ…)
 

Re: リングバッファについて

 投稿者:nekosan  投稿日:2009年 6月18日(木)19時34分25秒
返信・引用
  > No.165[元記事へ]

naga64さんへのお返事です。

> PIC16F628Aを使用して、シリアル通信のソフトを作りたいのですが、頻繁にデータ受信するにはリングバッファを入れないと取りこぼすのではないかと思うのですが、リングバッファを作った経験がありません。どのように作ればいいのでしょうか?また、リングバッファを使った例とか詳しく書いてる物がありましたら教えてください。多分、ポインタを使う必要があるのではと思っています。参考プログラムとかあれば非常にありがたいです。言語はCCS−Cで作ります。以上回答頂けると嬉しいです。


リングバッファとポインタの関係が良く解らないのですが、
どなたかが「ポインタが必要」とお話されていたので
しょうか?
一般に、リングバッファはポインタが使えない言語系でも
組めますし、Cのようなポインタが使える言語系でも
ポインタを使う必要は特にないかと思います。

あと、リングバッファ自体も取りこぼしを防ぐ免罪符には
ならないので、ストックとフロー、そして処理時間の計算
を精緻に行って、本当にバッファが必要なのかどうか、
バッファを設けることで本当に充分なのか、といったことを
事前に計算しておいたほうがよろしいかと言う気がします。


リングバッファの処理自体はとても簡単だと思います。

ただマイコンでは登載しているSRAM容量が小さいため、
SRAM容量の許す範囲で適当な大きさのバッファを
用意して、書き込みをする位置と読み出しをする位置、
(あと必要に応じてバッファに詰め込み済みのデータ数)
を変数として用意しておけばよろしいかと。


例えば、100バイトのchar型のバッファを確保すること
を考えます。
そのためには、char型で要素数が100個の配列を定義します。
そして、書き込み位置と読み出し位置をともに0番目
(int型変数で値を0)とでもしておいて、あと
データ数(これもint型)も初期値として0と置いておきます。

データを1バイト受信するたびに、書き込み位置に相当する
配列の要素に受信データを代入し、書き込み位置を1増やし、
同時にデータ数も1増やします。
(この時書き込み位置が100に届いたら0に戻します)

読み出しの際には、まずデータ数を参照して0より大きいか
確かめて、0より大きい場合は到着済みデータがあるという
ことなので1バイトだけ読み出しを行います。
読み出し位置が指す配列の要素を1バイト取り出せばOK。
そして読み出し位置を1増やし、データ数も1減らします。
(読み出し位置が100に届いたら0に戻します)

こんな感じで上手く動くかと。



ただ、リングバッファとUARTをどのように組み合わ
せるかと言う部分がちょっと気になります。
普通であれば、受信についてはUART受信割り込みを
使ってデータが届くたびに受信処理を行い、読み出しに
ついてはメインルーチン側(など)で適宜データ数を
参照し、0より大きいかどうかを確認すればよいかと
思います。

そうすると、一般には割り込み制御が必要になります。
割り込み処理についてはとりあえず詳説しないので、
参考書などをご参照ください。


バリエーションは色々あるかと思いますが、だいたい
このような感じになるかと思います。
 

MCLRピンの使い方について

 投稿者:naga64  投稿日:2009年 6月18日(木)13時12分48秒
返信・引用
  初心者の質問で恐縮なのですが、PIC16F628Aを使って製作するのですが、ポートRA5使ってLED等を駆動しますが、このRA5のピンはリセットに関係する /MCLRピンと兼用になっています。リセット端子として考えると?電源にプルアップ等しなければいけないと思いますが、ポートRA5として使う時でも電源にプルアップしなければいけないのでしょうか?通常電源にプルアップ又は直接電源に接続するのが正解ですか?それとも、プルアップは書き込み時のみ必要ですか?でもプルアップしなくてリセットはかかるのでしょうか?詳しく教えてください。  

リングバッファについて

 投稿者:naga64  投稿日:2009年 6月18日(木)09時21分14秒
返信・引用
  PIC16F628Aを使用して、シリアル通信のソフトを作りたいのですが、頻繁にデータ受信するにはリングバッファを入れないと取りこぼすのではないかと思うのですが、リングバッファを作った経験がありません。どのように作ればいいのでしょうか?また、リングバッファを使った例とか詳しく書いてる物がありましたら教えてください。多分、ポインタを使う必要があるのではと思っています。参考プログラムとかあれば非常にありがたいです。言語はCCS−Cで作ります。以上回答頂けると嬉しいです。  

Re: PIC タイマー割り込みについて

 投稿者:nekosan  投稿日:2009年 6月11日(木)20時15分24秒
返信・引用
  > No.163[元記事へ]

timerさんへのお返事です。
> 解決しました!!
> CCPをしようして、コンペアマッチでタイマーのクリアをかけたところ、
> きっちり100usのタイマーがつくれました!!
> やっぱり、誤差だったんですね〜。
> PICのまだまだ使いこなしていないので、タイマーはいつもTMR0を使うのが標準だと思ってました。

良かったです。解決して何よりです。

> AVRマイコンというものの存在をココにきて始めて知りました!
> PICよりも良いものだとか・・・。やっとPICになれ始めたとこだったのに。。。
> ちょっといじってみようかな〜。
> でもCコンパイラとかってあるんですか?

AVR用のgccが公開されていて、これが自由に利用できます。
しかもコマンドラインを一切使わず、AVRのIDE環境
(AVRstudio)上でプログラムソースの編集〜コンパイル
〜シミュレーション〜チップへの書き込みの一連の作業がすべて
出来てしまうので、PICのCCS−Cや純正Cコンパイラ等と
同じ感覚で使えます。しかも無料ですしね。

新たにAVR用の書き込み機が必要になりますが、最近は秋月とかで
安く出回ってきてますから…

あと、hexファイルをチップに書き込む操作がコマンドライン
でも構わなければ、自作の書き込み機が1000円程度で作れると思います。
(検索してみてください。回路図とか色々ヒットすると思います)

私もマイコンで遊ぶようになってからずっとPICばかり使って
きましたが、ここ2〜3年AVRを使うようになってからは
AVRの方が楽なのでついAVRばかり…

日本語文献とか製作例とかを探すとやはりPICの方が
圧倒的に多いし、メーカーが公開しているサンプルコードや
PC側のドライバなど、チップ単体では評価できないスペックも
色々あるので、一概にAVRがいいという気はありません。

そのときそのとき、使いたい方を選んで使えばいいのでは?
ご興味が湧いたらお試しを!
 

以上は、新着順81番目から90番目までの記事です。 5  6  7  8  9  10  11  12  13  14  |  《前のページ |  次のページ》 
/26 


[PR]