PIC専用のスレ Part 57
■ このスレッドは過去ログ倉庫に格納されています
______
/Microchip ./|
/ ( ゚∀゚) / | アセンブラのアの字もわからない
|~ ̄ ̄ ̄ ̄ ̄| /. 超初心者からHEXが読めてしまう
|/Z./Z./Z./Z_|/ || 鬼プロフェッショナルの為のスッドレ(#゚Д゚)だ!モ゙ルァ
||. ||. ||. ||
大人気のPICマイコンのスレ
なんといっても情報が豊富だし、開発環境も多いし、パッケージも豊富
使いやすくて、しかも安い。やっぱりPICだよね
例の如く基本リンクだ
http://www.microchip.com/ マイクロチップ本社(Microchip Technology Inc. )
http://www.microchip.co.jp/ マイクロチップ テクノロジー ジャパン 株式会社
http://www.microchip.com/maps/microcontroller.aspx Microchip Advanced Part Selector (Maps)
またーりやっておくんなまし
種類が多くてワカランって奴は上記パーツセレクタで、機能から最適製品を絞り込め!
教えて君はとりあえずGoogle( http://www.google.co.jp/ ) くらい使おう
テンプレ内の秋月小売価格も在庫が捌ければ、次の仕入れからは昨今の為替相場変動にならって
適宜価格改定されてます。ここの表記価格とは違うかもしれないのでそのつもりで
回答者する人の注意
. 最初に回答したい気持ちは分かるけど、質問者の内容を、落ち着いてよく読もう。
質問者する人の注意
. あなたの周囲しか通じない変な省略語は使わずに、なるべく詳しく説明してね
前スレ:
PIC専用のスレ Part 56
https://rio2016.5ch.net/test/read.cgi/denki/1501476623/ リモコンデータの受信解析ソフトって、
単なるリモコンの受信処理部分のこと?
それとも受信回路や送信機の評価用の解析? 状態遷移処理って何?
逆に状態が遷移しない処理があるのか? PLCのラダーのような
状態変移で動かすプログラミング
FAやプラントではそういう書き方しないとメンテナンスが面倒 PCの値しか状態を持たないプログラムが存在すると? 状態を示す変数を用いる処理が状態遷移処理だとしたら
ほぼ全ての処理がそうじゃないか? >>493
何のリモコンのどのボタンを押したかを解析する処理。
NEC, AEHA, SONY フォーマットMAX6バイトに対応。
受信モジュールは月並な 38kHz 3pinタイプ。
リモコンで遠隔操作ができるようになっただけでなく、
8pin PIC でも入力ボタンが一気に増えた気がする
のがうれしい。
>>495
説明が悪かったかな。状態ごとに変数値を決めて
その値に基づいて処理を行うやりかた。
ひとつのことにかかりきりでよければ、プログラム
の流れそのもので、すなわち、状態を表す変数なし
でも処理ができるので、それと区別をしたつもり。 >>502
フォーマットの識別はリーダーパルスの長さで判別? 状態遷移の状態を、状態と日本語で書くから知らないやつはわからない
stateと書けばいいんだよ パルスの受信は割り込みで
解析は割り込みの外だろ?
「状態遷移処理」とCPU占有の関係がいまいちわからん
CPUを占有してよくて
「状態遷移処理」じゃない処理にすれば
解析が簡単なのか? >>502
他のマイコンだと、状態遷移テーブルをポインタ関数テーブルに対応させてアドレスジャンプさせるんだけど
8ビットPICだとどうやるの?
アセンブラでもスマートだが、unixのcで、select文と組み合わせてスマートに実現しているのをみたときは
K&Rはこれがやりたかったのかと感動した。ネットワークと内部込みで。 質問です。
16F1705にてUSARTにて通信テストを行っているのですがうまくいきません。
何でもいいので受信すれば、1回LEDが点滅するようにしたいですがうまくいきません。
↓メイン部分でどこか間違いなどありますでしょうか?
// メインの処理
void main()
{
/** 各ピン設定 **/
ANSELA = 0b00000000 ; // AN0-AN3は使用しない全てデジタルI/Oとする
ANSELC = 0b00000000 ; // 全てデジタルI/Oとする
TRISA = 0b00000000 ; // ピン(RA)は全て出力に割当てる(RA3は入力専用)
TRISC = 0b00100000 ; // RC5(rx)だけ入力その他のピンは出力に割当てる
PORTA = 0b00000000 ; // RA出力ピンの初期化(全てLOWにする)
PORTC = 0b00000000 ; // RC出力ピンの初期化(全てLOWにする)
//UART用設定
RC4PPS = 0b10100 ; // 出力(C4へTXを割当てる)
RXPPS = 0b10101 ; // 入力(RC5を割当てる:デフォルト)
TXSTA = 0b00100100 ; // 送信情報設定:非同期モード 8ビットデータ・ノンパリティ
RCSTA = 0b10010000 ; // 受信情報設定
//UART用設定 データシートP340参照
SYNC = 0;
BRGH = 0;
BRG16 = 1;
SPBRG = 25 ; // ボーレートを9600(高速モード)に設定
RCIF = 0 ; // USART割込み受信フラグの初期化
RCIE = 1 ; // USART割込み受信を有効にする
PEIE = 1 ; // 周辺装置割込みを有効にする
GIE = 0 ; // 全割込み処理を許可しない
Flag = 0 ; // データ受信フラグのリセット
/*************** メインループ ********************/
while(1)
{
//PIC電源確認LED点灯
LATCbits.LATC0 = 1;
__delay_ms(500) ;
LATCbits.LATC0 = 0;
__delay_ms(500); // 500ms遅延する
while(1)
{
// USARTからデータが送られてきたら処理する
LATCbits.LATC0 = 1; // LED点灯
if(RCIF==1)
{
RXBUFF=RCREG; // 受信データの取り出し
LATCbits.LATC0 = 0; // LED点灯
__delay_ms(500); // 500ms遅延する
}
}
}
} >>509を見てよくわかりました
こういうプログラムが
「状態遷移処理」がないプログラムですね >>510
スマホからですみません
状態遷移処理がないとはどういう意味ですかね?
お手数をおかけしてしまって申し訳ないです >>511
あっ、いやっ...
気にしないでくださいすいません 受信データ列は正しいビットレートで正しいレベルで入力しているのは確認してあるんかいな。 >>513
受信データのビットレートは9600bps(PICは4Mhz外部クロック)で入力の電圧も問題ないと思います。
ただ、PIC(特にPPSの設定)と通信用のモジュール(※)が今回初めて使用する物なので、
基本的な記述に問題がないか確認したく書き込みました。
初心者のため意図と違う返信になっていたらごめんなさい
※通信モジュール
ttp://akizukidenshi.com/catalog/g/gK-07378/ 初期化のところは見てないのだけど(ここが問題かも)
while(1)のループが入れ子になっていて、breakもないし、外のwhile(1)は要らんよね?
どっち?
LATCbits.LATC0 = 1; // LED点灯
LATCbits.LATC0 = 0; // LED点灯
ビットレートが合っているかどうかは、初期化が終わったあとに、何か文字を送信して
オシロで見るか、PCで受信して確認すると良いと思う。 >>515
返信ありがとうございます。
》while(1)のループが入れ子になっていて、breakもないし、外のwhile(1)は要らんよね?
そのとおりです。削除します。
》どっち?
LATCbits.LATC0 = 1; // LED点灯
LATCbits.LATC0 = 0; // LED消灯
が正しいです。
》ビットレートが合っているかどうかは、初期化が終わったあとに、何か文字を送信して
》オシロで見るか、PCで受信して確認すると良いと思う。
オシロが手元にないので、PCに受信する方向で確認してみます!!
》初期化のところは見てないのだけど(ここが問題かも)
そこが問題かもしれないです・・・引き続き調査して見ます。 >>516
連投すみません
PIC側から文字を送信したところ、無事にpc側にて受信できました。
恐らく受信部分の問題だと思われます
引き続き調査してみます。 >>518
なるほど!!目からうろこでした
PICは正常に動作しました!(LEDは消灯しました)
ということはモジュールとPIC間かPCの送信の問題ですね 48MHzで動いてるPIC18から12MHzのクロックって出力されてましたっけ?
HSモードじゃだめかな
外付けセンサーで12MHzが欲しいんだけどなんかPIC用とセンサー用で12MHzを
2つ実装するのが馬鹿みたいな気がして >>519
とりあえず問題の切り分けはできましたありがとうございます
結局のところPIC側ではなくて、モジュールの問題かもしれません
送信はうまく行くのですが、受信をすると電源が落ちてリセットしてしまうことがわかりました。
理由はこれから調査しますが、不良品の可能性もあるのかな? >>521
質問する前にモジュールのデータシートは読んだ?
いや、俺は読んでないけど。 >>523
モジュールのデータシー読み込めてないです(泣)
英語ばっかで、つなぎ方などを見ただけで
一度読み込んで見ます
ありがとうございますm(_ _)m まずは
PC <===> PIC
PC <===> モジュール
で動作確認
PIC <===> モジュール
はその後で >>525
了解しました
とりあえずpcとPICの通信を完全にします
色々ありがとうございます あまりのレスの多さに感動です
>>503
随分インプリメント依存の所への質問ですね。
今回は、約 125μs ごとに赤外線パルスの有無を
チェックし、1ms以上パルスが続けばリーダーと
判断。その後、パルスが止まってから次のパルス
が始まるまでが 1ms以上なら NEC か AEHA、1ms
未満なら SONY と判定するロジックにしました。
2ms 以上パルスが来なければ終わりと判断。
>>504
とりあえず受け取った bit 数と MAX 6 バイトを
丸ごとレジスタに保存。この内容を後で適宜判断
します。
>>505
PIC には、そもそも STATUS というレジスタがあ
るのでそう書くのを躊躇いました。
>>507
以前は割り込みの無い PIC (12F510) を使ってい
たもので、そのくせというかなごりで、TMR0 の
とあるビットを監視してタイミングをとる形で、
全てポーリング処理で作りました。
> CPUを占有してよくて…解析が簡単なのか?
私はそう思っています。マルチタスクは CPU占有
ではありませんが、ひとつのことに専念している
ようにプログラムを書けるので簡単に作れる気が
するのではないでしょうか。
>>508
8 bit PIC の常套手段かと思いますが、プログラ
ムカウンターに対して状態変数を加算することで
複数のアドレスに一発で分岐できます。その分岐
先には、一般的に GOTO を並べておきます。
addwf pcl,f で検索するとワラワラ見つかります。 >>528
せっかくのキャプチャー割り込みを使わないで
ポーリングでやってるのか
メインループの他の処理によってサンプリングタイミングがずれるし
1000命令かかる処理が他に有れば完全に取りこぼすわけだ
125usと言えばPIC16ではトップレベルで応答性が要求される処理
これで割り込みを使わないで何に割り込みを使うの?
アセンブラの前にもうちょっと基本的なことを学んだ方が良い気がする 割り込み機能の全くない 12F510 が 50円だった頃
20個買ったやつがまだ結構余ってるんですよ。
今回は割り込み機能のある 12F1501 をハンダ付け
してしまってから間違いに気が付いたのですが、ま、
いいかとそのまま 12F1501 でプログラムを作成。
余ってる 12F510 にもダウングレ−ド移植をしやす
いようにとポーリングでやったんですよ。
全ての処理はイベント処理的に 125μs 以内に終わ
るようにコーディングしてます。割り込みを使えな
いわけではなくて、割り込みを使わないで作ったと
いうだけのことです。 超小規模なプログラミングでも
ホビーと業務レベルとの差は大きいな
アセンブラってところがまた泣かせる 業務用のは保守性と再利用性最重要視してるから
冗長過ぎて眠くなる
趣味のは各個人の技巧やら独自記法満載で
読んでえ辛くなる >>528
>8 bit PIC の常套手段かと思いますが、プログラ
>ムカウンターに対して状態変数を加算することで
>複数のアドレスに一発で分岐できます。その分岐
>先には、一般的に GOTO を並べておきます。
通常のCPUならそうなんですが、PICのレジスタバンクまたいでアドレスジャンプやGOTOして
かつ、ちゃんと帰ってこれるのかなと思って。 赤外線リモコン受光信号にちょくちょく
ちょっかいを出してくるヤツが居る。
何か?と思ったら、Win10 にしてあるも、
ちょっと古いノートPCが、近くに相手が
居ないか定期的に赤外線で声掛けをして
いるようなのだ。
これを使えば PC-PIC 間で赤外線通信が
できるじゃん、と思って技術資料を探そ
うとググってみても中々みつからない。
参考になりそうなサイトをご存知の方、
とりあえずヒントだけでも教えていただ
けませんでしょうか。 >>534
プログラムアドレスの下位バイトが 0xff から次の 0x00 にまたがないようにコーディングする必要があります。 早速ありがとうございます。でも IrDA のプロトコルスタックを
PIC 側に自作する根性は湧きません。PC側をもっと低水準で
Lチカしたくなります。 >>533
>>543
8bitで保守性と再利用性が最重要視?
知らない癖に語るなよ恥ずかしい >>547
え?御社には開発基準が存在せず、ドキュメント管理の効率化もやっていない、
と言っているようなものですよそれ… >>526
とりあえず通信は完了しました!
色々皆さんありがとうございました!
助かりました >>549
理由も書かずに揚げ足とって煽るやつが一番トンチンカンw >>547
横からごめん、東芝の4ビットでも保守性と再利用性は最重要視されてます。@車両関連メーカー
速度とか機能は仕様の問題だよね。そんなの仕様を満足してればまったく重要視されません。
あとはコストとのバーターだけど、コストの話になると保守と再利用できないと、いまどきのメーカとしてはダメなんだよね。
そこらは営業と調達ががんばるだけ。 仕様
信頼性
コスト
開発期間/納期
これらよりも
コードの保守性や再利用性を重視するアホなメーカーがあるのね >>553
お前ほんとにわかってないんだな。
仕様と保守を同一に語るメーカーがあると思ってるのか?
違いがわからないのかな >>554
特注の単品しかやった事が無いんだと思います。 最重要視
この言葉の意味がわからないのか自分で書いてて
他のいろんな事を犠牲にしてでも保守性や再利用性を確保する
っていう意味だぞ
なにも犠牲にせずに単に
保守性や再利用性を考えたコード
っていう感じで使ったのなら
当然だろうね
保守性や再利用性を考えないコードなどあり得ない 一部上場電機メーカーで量産品をたくさん作ってるよ
他部署や顧客に
「保守性や再利用性を最重要視して開発しました」
なんて言ったら笑われるよ普通 一人でコツコツ趣味でやっていて、この仕事できると勘違いしちゃっ子なんだろうね。
能力はありそうだけど、職場じゃいらない子ちゃんだなぁ…自営でもなさればよいかと
能力ありそうだからなんとかなるよ どれに重点置くかは業界によっても違うだろ。
統一解無いと満足しない人なの? ここでの書き込みで能力がありそうなさそうなんてわかるわけがない。
>>561
俺もそう思う。
何を重要視するかどうかは業界によっても変わるし、製品によっても変わる。
自分が思っているものと違うものを、アホだ、わかってない、あり得ないなんて言うのは
「見聞が狭い」
ということを公言しているようなものだと思う。 >>562
>自分が思っているものと違うものを、アホだ、わかってない、あり得ないなんて言う「見聞が狭い」ひと
典型的な一緒に仕事したくないタイプだな 経験則的に、人当たりの良い yes マンでプログラミングが上手い人は殆ど見かけない気がする。
まあ、細かいことはいいんだよ、っていう人は、人をまとめる仕事に回されるんだろうな。 即ち重箱の隅をつつきまくるような繊細さと
攻撃的な性格を持ち合わせたプログラマーが優秀であると どの業界でもイエスマンで仕事が出来る人なんていない プログラマ限定の話しでは無いが、
チームを組んで仕事してると、トラブルで行き詰まったときに、
思いもよらないような斬新な、目からウロコのアイデアを出してくる人がいる。
逆に、話を聴くのは時間のムダ、って人もいるが、
そういう人が受注先のエライさんだと、無視するわけにもいかず、
一通りご高説を拝聴して、実際にダメなところをやって見せないとけないのがツライ I/Oが多いの探していて、
PIC18F45K20が18のくせに安すぎる(秋月\180)のだが
何か理由があるのでしょう蟹 ●良品で普及してるから安い
●糞で売れないから安い 他の類似のPIC18に比べると周辺機能が少なくなっている。
それで構わなければお買い得。 >>508
関数ポインタは8bitでも当然使える。 相対ジャンプの距離をインデックスにしておいて飛び先で
関数アドレスロードしてそこへジャンプする
定石だね 保守性や再利用性、最悪だな
まともなコンパイラならswitch caseで自動でやるよ
テーブル、二分検索、if else 方式を臨機応変に切り替える そだねー
マイクロチップのコンパイラは頭良くないからね >>576
そういえば
1個のswitchで
連続部分はテーブルで、不連続部分は二分検索
みたいなハイブリッド処理をコンパイラがやってて
感心した覚えがある 下の方は機械に任せて、
機械が出来ない上の方を人間が考えれば良いよ
>>528みたいに基本設計がダメなものは
コンパイラが進化してもどうにもならない >>537
あなたのような方を天才ハッカーと崇拝します。
>>544
とりあえず、ここまでたどりついたけど、ここで足踏み。次の一歩へのヒントをいただけると嬉しい。
https://technet.microsoft.com/en-us/library/cc961385.aspx >>508
ステートマシンですね。
関数ポインタは、定石ですね。
代替で、switch case
を使うしかないかな?
アセンブラの展開見ると、コンパイラによってオーバヘッドが余計にでたり、
分岐ごとのオーバヘッド差が出たりして、レイテンシに問題が出る場合には注意が必要。
PICでは、cc5xを愛用していますが、
cc5xでは、skip goto という、プログラムカウンタにオフセットを増分するやり方が簡潔で、
可搬性に欠けますが、非力なマイコンなので目をつむっています。
優秀な、gccがpic用にあればいいんだけど.... >>582
自分でデバイスドライバ書く前提なら
IrDAのプロトコルをサポートしなくてもいいんじゃね >>584
自分は長いものには巻かれろ、派
スタンダードに合わせておいた方が後々何かと楽 >>583
数クロックの差で動作に影響を与えちゃうような作り自体が問題
そんな作りじゃ割り込みなんか使えない
とは思わないのかな?
PICユーザーは >>586
>PICユーザーは
一部のPICユーザーは、だね >>586
GPSDOの位相比較と制御をPICでやってるけど1クロックもずれない。
むしろPeripheral Interface Controllerとして本来の使い方かも知れない。 >>584
自作アプリで FIR Driver もしくは TrSIR.sys を
直接叩けば良さそうなんだけど、その叩きかたが
判らんとです。 >>588
内容がずれてると思うのだが
少なくとも>>586とは 数クロックの差で動作に影響を与えちゃうような
ソフトを作るべきではないという見解も、作った
ものが1クロックもずれないので、これぞ P.I.C.
と思った書き込みも、夫々理解できるのですが、
自作アプリからミニポートドライバをこうやって
叩くんだとコメントができる人は居ませんか? >>588
何Hzのクロックが何に対してずれないって? ■ このスレッドは過去ログ倉庫に格納されています