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/ >>611 フッフッフ、もしかしたら「イヤよイヤよも好きのうち」? とフト思ったりしちゃったりしてw ま、PICだろうとAVRだろうとCPU界が繁栄すればOK、という事で宜しく >>612 まあ君みたいに炊飯器や電気ポットの中身を気にしてるのは世の中のごく少数だよ >>596 デフォルトは変数のアドレスは固定で、再帰呼び出し不可。 >>616 CCSCでベースライン・ミッドレンジの話? デフォルトはってことは変数をスタックに置くこともできるのか 8bitのPICでスタック? ミッドレンジ以前で使えるのか XC8 global options -> Statck options -> Stack type: Compiled / Reentrant / Hybrid fsr1 を使ってるっぽいけど、それ以上は追うつもり無いんで "どれで使えるのか / 使い物になるのか" 等に付いては、自分で確認しろや >>619 XC8でベース・ミッドで(普通の、Compiledでない)スタックが使えないのは知っている 5.8.1.3 REENTRANT AND NONREENTRANT SPECIFIERS Functions encoded for baseline and mid-range devices always use the non-reentrant model and the compiled stack. >>617 再帰呼び出し可にすると、ソフト的にスタック作ってそこにローカル変数を入れる。 >>621 ふむ、XC8ではPIC18とEnhancedミッドレンジでしかやってないやつを CCSではベースラインとミッドレンジでもやるってことかな CCS Cのリファレンス見たら When compared to a more traditional C compiler, PCB, PCM, and PCH have some limitations. As an example of the limitations, function recursion is not allowed. って書いてあるぞ リニア・アドレスの拡張が無いヤツ、にまで無理に対応したとしても パフォーマンスが残念な結果になるのは見えてるからな >>625 表で呼ばれる関数を実行中に割り込みでその関数が呼ばれることもある。 memcpyとかな 再入も再帰もスタック無しでできないのは変わりなくね? >>626 割り込みの中で、何十バイトものメモリー転送する事有る? 転送量の多い組み合わせだと、割り込みとDMAの組み合わせは普通にあるな なんにしてもcの標準関数は普通使わないだろ たまに、全部タイマー割り込みの中で書いてる奴を見かけるがw 設計思想次第 ほとんどの処理をISRでなんてこともある dsPICなんかでは特に 初心者はISRは出来るだけ軽くと思っておいた方が良いのは確か Cの標準関数は普通使わない? それはどうかな 関数と意識しなくても中身が関数だったりする場合もあるし 除算とか >>631 レアケースと一般論を一緒にして比較とか書いてる時点でコミュ障 プログラムの実行時間をキチンと把握していれば、<割込み内で全て処理する>を避ける必要は無いと思う。 割込み内で処理できるのに、<フラグを立ててバックグランドでポーリングして・・・>なんてかったるい。 処理時間が厳しいプログラムなら、プログラム完成後に各処理の実行時間が設計通りになっているかどうか、 オシロなどで実測して確認すればいい。 >>633 そうなんだけど、その”プログラムの実行時間をキチンと把握”するのが、それ程簡単じゃないことが 問題なんだよね。 その裏付けを取る手間を掛けたくないから、出来るだけ<フラグを立ててバックグランドでポーリングして・・・> になっている。 トラブルを避けるためには、ますリスクを避けることが第一になっている。 実験環境で”xx時間の検証でも問題ありません”は何の説得力もない。 裏付けも何も 割り込み周期(周期だよね?)の間に単位の処理が終わらなきゃ ポーリングもへったくれもありませんがな リスクとか何とかの話は意味不明だな オシロが無ければ安いロジアナ(ebayでパチモンなら数100円で買える)でもいい 処理単位の開始でport=H,終わりでport=Lとして(トグルでもいい) その間隔を測ることは基本 割り込み使わなければテスト的にルーチンをループさせてもいい 自分が何やってるのか意図したとおりになっているか順次把握することが大事 全ての割込みが一定周期で起きるわけじゃない。 どんな最悪条件でも”絶対に”問題ありませんと言い切るのが簡単なレベルとそうじゃいレベルの境界を 見いだせるかどうか。 少なくともその境界に対して十二分なマージンがありますというデータを示すことが できるならいいけど、単にごく単純なケースだけを想定して話しているじゃないの。 最悪条件の見極めはそんなに単純じゃないよ。 わすか数分程度のオシロで観察しましたでは、説得力の欠片すらないレベルの話に聞こえる。 よく分からんな。万能の回答なんて無い 詳細な前提条件不明だからある程度推定して一般論的に 例えばこういうときはこうすればいいよー としか言えない 当て推量の回答でもそこから何か汲み取れるかどうかは 質問者本人次第だな まあ、こんな場所だから全く外していることもあるし 嘘もあるかもしれない 眉に唾して読むことw そうだね。 お互いに一般論の前提で話しているが、その前提が見事にズレているのは間違いない。 では質問を変えてみよう。 ・あなたは、自身のプログラムで使用しているすべての割込み処理の最大処理時間をちゃんと計測してますか? ・それらの割込み処理が重複する可能性は全くありませんか? ・3つ以上の割込みが最悪条件で重複しても十二分な余裕のある割込み処理時間以内に収まっていますか? せめてこのくらいの質問にすべてyesと言えるだけの裏付けは欲しい所。 あまりしつこくやっていると他の人の迷惑になるので、これで最後にします。 >>632 >>630 が悪のように書いてるから反論しただけですよ 話の流れを読まないコミュ障ですか? >>639 優先度上位は当然確認するよな 割り込み禁止期間と全ての割り込みが重なってもまだ余裕があることを 下の方は余裕がありすぎるから省くことが多いだろうけど まあそもそも このスレはまともに割り込みを使えない人も多いけど >>635 自分が作るプログラムの実行時間も知らなくて、どうやってプログラムを設計するんだろ? 実行時間を知らないからリスクになっているのに。 それに「裏付けを取る手間を掛けたくない」には少し驚いた。 信頼性アップの為に「可能な裏付けは取る」が技術者には必要だと思うけど、 ウーム、世の中には色々な人がいるもんだな。 なんか色々と現実を知らない感がただよう 実行時間を測る必要がある処理もあれば 全く測る必要の無い処理もある >>639 普通に全部Yesだろ? お前やってないのか 割り込み処理が重複する可能性が全くありません がYes? 普通に多重割り込み使うだろ >>648 おまえ、8BitPIC使ったことないだろ? 思った以上に反発されているので、少しだけ言葉足らずな部分の補足を。 過去に失敗したケースでは、最悪条件と思っていたケースが実は最悪ではなかったことがある。 結果として、割込み処理の時間が足りないケースで思わぬ不具合になった。 当然、すべてを簡単に管理できる単純なケースなら、割込み処理の中でデータの転送なり 何なり好きにやればいい。この点は全く同意。 ただ、そんなことをして得られるメリットは殆どない上に、管理が面倒な割込み処理側にわざわざ 処理を持ち込むことで、不測の事態に対するリスクを増やしている。 ”最悪条件を確認している”と主張している人が何人かいるが、その条件が本当に最悪条件かどうか は慎重に調べた方が良い。 いろんなケースがあるだろうから、それ以上は言えないが最悪条件の検証がそんなに簡単なら、 世の中のバグはもっと少なくなっている。 そんな考慮は最初からするの わからないなら実測して確認するの どうせ うまくいかん→ふってみろ うまくいかん→叩いてみろ うまくいかん→電源入れ治してみろ 大抵これで治って放置 そんなんで良ければどうぞ >>649 8bitで割り込みが重複の意味不明 割り込みは1個しかない 複数の要因で割り込みがかかるのはごく普通 で「割り込みが重複」の意味は? ギリギリで使うこと自体が稀 マージンがたっぷりあることが明らかなら測定などしない >>655 それはあなたの事情やポリシー、あるいは結果論では? 違います 世の中を知らないというのは恐ろしい 必要なテストは行う 不要なテストは行わない 当たり前ですね >>657 の考え方なら、デバッグは要らないことになる。 >>659 必要か不要かを決めるのは何なんでしょうか。 データシートに書かれていることに従って設計していればテストは不要? まさかね。 ここで議論になってるテストは、製造段階の出荷検査ではなく、開発段階のものという前提はOK? 応答時間の保証が必要な用途がある。ならテストする。各処理の時間を測っておく。 別に時間保証なんて要らない用途もある。応答すればOK。余裕あれば範囲くらい測っとくか。 べき論に固まってるのキモい。 >>660 不要だよ データシートと仕様書に従って設計されているかどうかを確認するのがテストだ 上流工程の経験やソフトウェア設計技法の教育まともに受けてないのバレバレだからもうやめとけ どうせ現場叩き上げで覚えましたの20世紀の爺か低学歴の派遣だろ >>662 QCの概念が無い会社にしか入ったことないんだな。 海外メーカーだとそういうとこも有るけど。 単に自分が何やってるか判ってないんじゃないの 時々そういうの居るよ >>660 そんな単純な話ではありません ソフトの検証技術について勉強してください ソフトの外注先なんかこんな感じだな 仕様書通り作ればそれでいい まぁそれしかやりようが無いから それ以上どうしようもないのはわかるが 発注元としては、そもそもその仕様書に間違いが無いかどうかを確認せないかん 実物で確認は必須 >>668 仕様が間違っていたので修正して下さいと言うことなら修正しますけど 別途料金を頂きますよ >>650 その必要性がないのに、「フラグを立て、ポーリングでバックグランド処理」は プログラムの効率を下げるだけだよ。 (サイズが大きくなって遅くなり、構造が複雑になる) なんで「割込み処置は管理が面倒」なんだろ。 私にはそんな事を主張する君の脳味噌の管理の方が面倒に思える。 とにかくもっと経験を積み、勉強される事を希望します。 >>653 PIC16はベクタが一つしかないだけで、割り要因は多数ある。 「割り込みが重複」の定義を聞いてるんだから 素直に答えれば良いのに 複数の割り込み割り込み要因が同時に発生 であれば普通に起こりうること 複数の割り込みを扱えない初心者は初めてスレに行けば >>666 >>660 はそもそもそんな単純な話じゃないでしょ?って問いかけです。 あなたは少しあわてんぼうさんですね。 CPUのエラッタが気になる人なら、いくら自分が完璧でもちゃんと動作するかどうかは 特に開発段階なら不安になって調べまくるものなんじゃないのですか? >670 他人にレスするのはいいが、自分の意見と異なるからといってすぐに”上から目線の”憎まれ口を書くのは良くないな。 あなたがどれほどの経験を持っているか知ったことではないが、割込み処理の周辺がバグの発生要因になり易い のは少ししか経験のないものでも否定はしない。 いくら匿名掲示板とはいえ、他人を罵倒するような書き込みは褒めたものじゃない。 不愉快ならレスしなければいい。レスされた方もあなたのようなレスは望んでいないよ。 >>676 >>660 >必要か不要かを決めるのは何なんでしょうか。 >データシートに書かれていることに従って設計していればテストは不要? まさかね。 >>666 >そんな単純な話ではありません このやりとりの>>660 が質問に見えると? メモリーが1ギガくらいあるPICを100円でだしてほしい ううん とうじ たかおにできゃっきゃあそんでた きゃーきゃーか 「(NAND)Flashメモリーが1GB」なら現在の技術でも不可能でもないかも (売れないから採算が取れず不可能とも言える) ログ溜め込むのにmicroSDやシリアルEEPROM使ってるけど 1チップなら配線も楽だし、さらにコンパクトに出来るな・・・ PIC32MX340FでPortB IOをLogicに設定にしようと ANSELB = 0x0000;としてビルドしたのですが、 "ANSELB" undeclaredとエラーが出ます。 因みに、PIC32MX220Fのときは、このようなエラーは 出ませんでした。 原因を教えて下さい。 コンパイラはXC32 ver1.40 です >691 ここに書き込む前にデータシートを読むようにしないとダメだよ。 PIC32MX340FのADピン機能の設定はAD1PCFG。 ひょっとしたら間違ったデータシートを見ているかもしれないから、 データシートの名前はPIC32MX3XX/4XX Family Data Sheet。 PICは種類が多いから、自分が使おうとしているデバイスのデータシートは 必ずダウンロードしていつでも見られるようにしておくといいよ。 質問させてください PICのtimer1機能を使って外部パルスの数をカウントしようとしているのですがうまくいきません。 ・使用PIC:16F1705 ・使用コンパイラ:XC8(V1.44) ・外部パルス:100us(high)200us(Low)の繰り返し波形 プログラムの目的としては、外部パルスを検知したらC0PINをhighへ変更 以下プログラム箇所抜粋 //各ピン設定(要調整) ANSELA = 0b00000000 ; // AN0-AN3は使用しない全てデジタルI/Oとする ANSELC = 0b00000000 ; // 全てデジタルI/Oとする TRISA = 0b00001100 ; // A2ピンへ外部パルス入力(RA3は入力専用) TRISC = 0b00000000 ; // すべてのピンは出力に割当てる PORTA = 0b00000000 ; // RA出力ピンの初期化(全てLOWにする) PORTC = 0b00000000 ; // RC出力ピンの初期化(全てLOWにする) //タイマー設定 T1CKIPPS = 0b00010; T1CON = 0b10000001 ; // 外部クロック設定 TMR1IF = 0 ; // タイマー1割込フラグを0にする TMR1IE = 1 ; // タイマー1割り込みを許可する PEIE = 1 ; // 周辺装置割込みを有効にする GIE = 1 ; // 全割込み処理を許可する //割り込み関数 void interrupt Intertime( void ) { // タイマー1の割込み発生か? if (TMR1IF == 1) { LATCbits.LATC0 = 1; __delay_ms(500); TMR1IF = 0 ; // タイマー1割込フラグをリセット(再カウントアップ開始) count++; //highになった回数をカウント } } >>695 スマホからですみません 割り込み後にledを0.5秒光らせようと思って入れた待機用の関数です >>698 レスありがとうございます。 想定する動作としては 1.電源ON(外部パルスは常に発生) 2.A2PINに外部パルス入力 3.C0PIN(LED)がHigh 4.0.5秒待機 5.変数count(long型)に+1 ※2.〜5.を繰り返し このような動作をイメージしています。 「4.0.5秒待機」については、削除しても問題ないです。 現状としては、外部パルスをA2PINへ入力しようとしているのですが うまく入力できてない状態です。 初心者のため、稚拙な箇所あるとおもいますが、ご指摘よろしくお願いいたします。 300us周期の外部パルスを全て取りこぼしなくカウントする必要があるか? >>703 》300us周期の外部パルスを全て取りこぼしなくカウントする必要があるか? 100usのhighの立ち上がり回数を数えたいです。 》LEDを消さなくていいの? とりあえず割り込みの確認をしたいので、今は消さなくて大丈夫です。 》うまく入力出来てない状態の説明 オシロにて入力ピンの電圧を確認すると、想定通り(100us(high)200us(Low))が確認できますが プログラム的には、入力として認識できていないという状態です。 》想定するLEDの状態、現状のLEDの状態 想定:LEDが点灯する 現状:LEDが点灯しない 下記の設定が初めてなので、》693の記述であっているかわかりません。 もしわかる方がいれば、教えていただけるとうれしいです。 ・PPSにて「T1CKI」をA2ピンへ設定 ・「T1CON」を外部クロック >>704 タイマー設定のコードはどのように作った? Intertimeがどういう条件で呼ばれることを想定してる? Intertimeががどういう条件で呼ばれるか知っている? デバッガを使った事がある? タイマーの動きを理解しようか タイマーのクロックを使ってタイマーの機能でカウントしたいのか パルスの度に割り込みをかけてISRでカウンタをインクリメントしてカウントしたいのか どちら? >>707 》タイマー設定のコードはどのように作った? このサイト(ttp://www.geocities.jp/zattouka/GarageHouse/micon/MPLAB/16F1705/memo.htm)を参考につくりました。 下のような考えでつくりました。 @ T1CONレジスターの設定を行う A TMR1カウントアップレジスターの初期化 B TMR1IFの割込みフラグを初期化 C 割込み機能を許可 void interrupt 割込み関数名( void ) { if (TMR1IF == 1) { // タイマー1の割込み発生か? TMR1H = ???? ; // タイマー1(TMR1)の再ど初期化 TMR1L = ???? ; // (65536までカウントアップさせるならこの2行は必要ない) TMR1IF = 0 ; // タイマー1割込フラグをリセット(再カウントアップ開始) } } 》Intertimeがどういう条件で呼ばれることを想定してる? 今回の場合だと、A2ピンがHighになると呼ばれると想定してます。 》Intertimeががどういう条件で呼ばれるか知っている? ごめんなさい、勉強不足で知らないです。 》デバッガを使った事がある? ないです。 >>708 》タイマーの動きを理解しようか 了解しました。 》タイマーのクロックを使ってタイマーの機能でカウントしたいのか 》パルスの度に割り込みをかけてISRでカウンタをインクリメントしてカウントしたいのか 》どちら? 後者です。タイマのクロック機能は今回使う気はなく、割り込みをかけてカウンタを1づつあげたいです。 >>710 結局 パルスの立ち上がりエッヂでカウントするだけなら、タイマーを使う必要もなくて 状態変化割り込み(IOC)だけでやったほうが 簡単だね ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる