初めてのPIC 0x0f
■ このスレッドは過去ログ倉庫に格納されています
PICをさわるのは今日が初めて、という超初心者のためのスレです。 (O>――<O) PIC選び、PICを使った回路は、誰でも最初は不安なものです。 / (・) (・) ヽ 恥ずかしがらずに何でも聞いてください。速攻で教えてくれますよ。 ○ /▼\ ○ 質問のしかたは、初心者質問スレの発言1を見てくださいね。 |(ヽ二フ ) | /  ̄ ̄ ̄ ヽ f ヽ / | PIC関係のスレは、レベルに合わせて以下のスレもありますので、活用しましょう。 ヽ \ / ノ ・PIC専用のスレ | \_ )(_/ ! 本家本元のPICスレです。口の悪い人もいますが、楽しくやってるみたい。 | | ここの話がわかるようになれば、あなたはもう一人前のPICerです。 | | ・マイコンソフト 悩み事相談室 | | ̄ ̄| | マイコンソフトやツールの質問は、こちらでどうぞ。的確な回答があります。 (_ノ ヽ_) 質問する時のコツ ・性格の悪い回答者はスルーしよう(相手すると逆効果) ・素人玄人などと 上から目線の回答者は、無視してください。相手してはいけません。 ・そこそこ良い回答が出るまでしばらく再発言しないのもあり(良回答は後に出やすい) ・回答者のアドバイスで後日解決したら、結果報告しよう(とても喜ばれる) ・回答者は、僕たち初心者に優しくしてください。あなたも通ってきた道のはずです。 必要なソフトなど(基本無料) 統合開発環境 MPLAB X ttp://www.microchip.com/mplab/mplab-x-ide コンパイラ (XC8 XC16 XC32) ttp://www.microchip.com/mplab/compilers (高機能版は有料) コード生成プラグイン (MCC) ttp://www.microchip.com/mplab/mplab-code-configurator マイクロチップ ライブラリ (MLA) ttp://www.microchip.com/mplab/microchip-libraries-for-applications 必要なハードなど 初心者はPIC16F1、PIC18F1以降の型番で始めると無理なく始められます。 プログラムの書き込みには書き込み器が必要です。持っていない場合はPICkit3(中華クローンでもまず大丈夫)を使いましょう。 PIC一覧、スペック検索 ttp://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1005 さ、質問どうぞ〜っ 0x0e 2018/02/13〜 ttps://rio2016.5ch.net/test/read.cgi/denki/1518524799/ 0x0d 2017/10/25〜 ttp://rio2016.5ch.net/test/read.cgi/denki/1508935254/ 0X0C 2017/07/27〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1501157324/ 0x0B 2017/05/08〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1494235320/ 0x0A 2017/01/04〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1483498857/ 0x09 2016/09/07〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1473238791/ 0x08 2016/04/30〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1461994030/ 0x07 2016/02/05〜 ttp://wc2014.2ch.net/test/read.cgi/denki/1454648249/ 0x06 2015/07/18〜 ttp://wc2014.2ch.net/test/read.cgi/denki/1437151298/ 0x05 2015/04/07〜 ttp://wc2014.2ch.net/test/read.cgi/denki/1428391368 0x04 2015/01/02〜 ttp://wc2014.2ch.net/test/read.cgi/denki/1420205108 )((())()))((())))(()()()))())))(()))((((((())(((((())))(()(()(()())())))((() )))()()))((()(()(())())(()))()((())())(())))))()(()))())(()))(()((((((((()(( )((((()()))(())()((()(()(((()(()))())()))(()((()))))(()))((((()))))))()))((( )()))(((()())))())()(((()))((()))(((((((()(())()()())(()())))(()(()))()))()( )())((((()(())())((()(())())))(()()))()(()))())((()((()()))(((())(())))()(() ()()((((())())())()))(()((()()))))()(()()()())((((())())()(()()(())()())()() )()(()((())()()(((((()))(()))))(()(()))())))()()((())()(()))()()()()((()))(( )()(()(()))()))(((()))()()()())))((())())())))))))(()))(((()()(()((()((((((( )((()()))(()))))())()())(()()((()))())()))(()()))(((()((())())((()((((())()( (())))()()))(()()(()))(())())))())))()())(((()()()((()()((()(())()()))(((((( ())))())))(()((((()(()()()()()()(()()(())))(()))))((((()))((((()())))()())(( ()))())(())))(((()(((((()()))())()((())(()(((()()(())(((())()()))((()))))))) )()()()(()()(())((((((((())((((()))()(())())))(((()))))))())()(()()(()())))) ())()(())))(())()()(((()()))))()()()((()))(())()(())())(())))))((((()((()((( )()))()())(()(()))()(())())()(()((()))()())()(()))((()((()))()())()((())(((( (())(()())))))((())()((((()))))())(()(()()()(()))((()))((()()()((()()))()(() ))((((((((())))(((()))(())))))))()))()(())))(((()((()())()(()()((())((())))( )))()))))())()((())(()(()())((()((((())))))())))())(()))((((())()())(((((((( ())())(()())())))))()()(()(()())(()))))(()()))((())()((((()((((()(((()))(()) ())()()(()())()())(((()))))(((())))(((()))())(()))(())((())(((((())()(()))() )()()(())()((()))(((((()))))))()((()))))()()((()))((((()())()()()()()))((()( ())()(())(())()))((()((()((((((())(()()))()())(())))((()((())((()())))))())) )())()(((()))())(()()()))((())((())(())))(())((((((()())()()())((()(()())))) ()((()()()())())(((()()())()((()))()((())()(()(())())))()))()()))()(()()((() ((((((((()(()()()()())))(()())))(())()()()()())()()))())()))()(()(((()(()))) ))((()(()))()((()(()())()())())))())(()()())())()(((()))()())((()()())()(((( (())())(()()(())())((((()))(()()))()())()())))()(()())(()(()(((()()))(())()( ()()()())))(())((((()(())(()(())(()(()()((()())((()()()))(()((())))())))))() (()()()((()))(()())()(()))))((()()()()()))()(((())())()(()())(((((())(())))) ()()((()(((((()(()(()()(((()))()(()())))())((()))()(((()()))))()))(()))()))) ()))))((()())((())))(((())()))((()))))))()(()(())))(((()()(()((()(()())()((( ())()()(())))()(()))()))()()))(()))(())((()()())))))((()())((((()(((())((((( ))((()(()()))()(((()))))())))()(()())))((()()(()))(((()(()()()(((())((())))( (()))(()())((((()))(())(((())))))(()(())))()))))(()(())(()(()())()(()(()()(( ())()())(()()()((()))((()(())()())((()()()))())((((()(()()))()(()(((())))))) )))()(()(()()()))()()())(((()))(()(())))()())))()((()(((((()()()((()(()()))) ))(()()(((()))())()(())()(()())))(((()))()())((((()()(()()))()(((()))()))()( ()())(((()(()((()(())))()))()()))))()(()()())()))))())()(((()()())((()()(((( (()())(()))())))()()(()()(()())((()(()()((()()))((()((((()))(()(())))()()))) (((()())))()(())(((())))(((()(()))(())(()())(((()))))()()((())()))())(())()( (())(())()(()())())))(())(())()(()(())()(()(()(((((()))))(()()())()(()))()() ()()))()())(()()(())((())(())()))())))())(()((()())))(()()()(()(((((()(()))( )))()(()))))))()((()(()()))((())))(((((()()())()(())(((()()(()(((()))))())(( )()()))((()()(()))())))())()((())))()(()()())))(((())(())((((()))(())((()((( ))(((()()(((((()())()()((((())()())))())((()((()())((()))))(()))))))(((()))) )((())))((())(()()((((()(())(()()))(((()(())))))))(((())))(((())((()(()))))) ()((())))()(())((())()()()))(()((()(()()()()()))())((()(()))(()(()))()))(()( ()((())(()()())((())(()(()())))(())())(((())())(()))))()(())))()()())()((((( (()))))(()()))()(((())(()((((()))))))))))))())((()(()(())(()((()(((()))(()(( )()()))((((()(())())((())))()()(())())(()())()(())()))(((()()()(())(()))(()( PIC32MM 8ビット16ビット置き換えをねらったコンパクトなコア 安い、省電力 microAptiv 25MHz PIC32MX 設計が古くてエラッタも多い、これだけはお勧め出来ない、後継待ち M4K 120MHz PIC32MK ミドルクラス32ビットPIC、なぜかI2Cが無い microAptiv 120MHz PIC32MZ EF PICコア最強、DSP命令や倍精度浮動小数点命令搭載 M-Class 252MHz PIC32MZ DA グラフィック、32MB RAM microAptiv 200MHz PIC10/12/16/18 8bit ほぼ全ての製品にDIP版がある コアの性能は他の8bitと比べても極端に低いので ちょっとでも重い処理をするならPIC以外を選ぼう 4クロックで1命令サイクルなので、 クロックを1/4にしたのが処理性能の目安 コアやペリフェラルは非常に単純なので 自力で全てやってみたい初心者には良い ただし命令は特殊なのでアセンブラの学習には向かない PIC24 / dsPIC 16bit Microchipは32bitに力を入れていてラインナップはいまいち 処理性能は8bit PICよりはずっと上だが 他社の16bitよりは劣る エラッタも多い コスパが非常に悪く、 特殊用途以外では今新規で選ぶ価値は無い PICは他メーカーの同規模のMCUに比べて非常にエラッタ(バグ)が多いので注意 機能が使い物にならないものやスペックの性能が出ないものも多く存在する メーカーが把握しつつも公開されてないなかったりする 本当にPICが適切か良く考えてから選びましょう 主な競合MCU 8bit AVR / STM8 16bit RL78 / MSP430 32bit STM32 / LPC / Kinetis / RX 開発ツール PICへよソフトの書き込みやデバッガでのデバッグには以下が必要です PICkit4 : 安価なデバッガ / ライター 8bitならこれで十分 ICD4 : 高速高性能デバッガ / ライター 16bit / 32bit PICのソフト開発にはこちらがオススメ ファン気質を排除して客観性をキープしたいのだと思う。 ファンと、ファン気質を排除した中立的議論をしようとすると、ニュートラルはアンチ的発言が増えざるを得なくて、 結果的にアンチとみなされることはある。 でも、CPUは純粋な論理的判断の元で選ばれるわけでもないのでニュートラルであることが正しいとは限らない。 一方で、全く白紙のビギナーも対象のこのスレなら、入門前に悪い面も知っておくことも必要かもね。 そうか? 正当に公平に客観的に評価しているな、と俺は少し感心したが。 PIC信者は「アバタも笑くぼ」「贔屓の引き倒し」みたいな、>>8 のようなアホばかりだと思っていた。 >>10 たとえば>>5 の「他社製品との比較」の話は繰り返し書かれてますが、 客観性を示すだけの何かが提示されたことはありません。 仕事で実験なんかのお試しはPIC搭載のユニバーサル基板を好んで使うよ。 秋月で安くて入手容易。 最終版はRXになるけど、色んなデバイスを使うとアイデアも豊かになるよ。 あ、しまった。 https://rio2016.5ch.net/test/read.cgi/denki/1517669525/869 みたいなことを書く人が、 >そうか? 正当に公平に客観的に評価しているな、と俺は少し感心したが。 なんてことを書いても、まともなはずはないな。 >>13 違うものを使うことで、「〜とはこういうものだ」という概念が固まってしまうことを避けられて良い、 と、俺も思う。 >>13 私も色々なCPUを使う事には賛成だな。 「広く浅く」にならないように気を付ける必要があるけど。 私自身は今はあまりPICを使わないけど、昔使ったPIC専用のラッピング配線ユニバーサル基板を 再利用できるように残してある。 ところで、私は始めてのCPUには、まず最初にUARTを使用するモニタプログラム(デバッガ)を アセンブラで作ってみる。 1週間ほど掛かってしまうが、そのCPUの割込みやレジスタ、メモリ構成、命令などの アーキテクチャをよ〜く理解できる。 趣味ならではだな 仕事でそんな事して遊んでられない CPUだけじゃなくてビルド環境にも依存する セクションの指定方法とか スタートアップコードとか 割り込みベクタの作り方とか 割り込みハンドラの作り方とか >>17 そだねー、プロにとって時は金なりだからね。 でも、開発環境のデバッガがブラックボックスではなくなる、 (デバッガの訳の分らない不思議な動作や、手の出せないデバッガのバグが無くなる) というメリットを考えると、プロでも検討してみる価値があるのでは、とも思います。 >>18 6、7種類かな。一番古いのは16ビットコード、16ビットデータの某社のXXXXXXで 一番新しいのはAVRで、AVR用デバッガは現在も成長中。 これからビデオに撮り貯めた世界卓球女子の美誠パンチを見るから、 これで。 あ、間違えた、 撮り貯めた → 録り貯めた だね。 >>22 プロには、なるべく責任を他人に分担させる(押し付けるとも言う)と言う考え方と、 なるべく自分で取れる責任範囲を広くすることで利益や責任をとりやすくすると言う考え方の二種類がある。 一方しか出来ない人は、生き残れないかもしれない。 付加価値作ってなんぼだからな 他にできないことができるということが強みになる お鉢が回ってくるのも大変だけどなw >>17 仕事は仕事、遊びは遊びの時間にするんですよ。 その遊びが仕事にも役に立つことが多かったりして。 >>22 製品の開発はブラックボックスばかりだよ コンパイラが吐くコードを検証したり ライブラリの動作を全て検証したり ネジを開発したり 金型を自分で削ったり 電子パーツを自分で作ったり こんなことをしてたら製品なんて出来ない だから信頼関係は重要 どこかみたいにエラッタを隠蔽するような会社の部品は仕事では絶対に使いたくない >>28 エラッタを一切公開していない会社ってことなんだろうけれど、そんなところってあるのかな。 でも、>>27 のような極論って不毛だよな。 製品作りの過程で、 ・コンパイラが吐くコードを検証することもあるし ・ライブラリの動作を全てでないにせよ検証することもあるし ・ネジや金物部品を開発することはわりとあるし ・プログラマブルな部品なんて昔の人から見ればICを自分で作るようなものだし。 俺の経験の範囲では「金型を自分で削った」製品はないな。 でも「最終製品を作っている人はすべて金型を自分で削ることはない」ってことは ないだろう。 一方で、企画に特化した会社の人なら、 「俺の会社だと、自分でコーディングなんてしていたら製品なんてできないよなあ。 回路図? ハンダ付け? それは工場がすることでしょ?」 なんて常識に浸かってるだろうし。 自分の経験や知ってる範囲の情報で「なんたらはこういうものだ」なんて断定するのは 恥ずべき行為。 >>27 は極論でもなんでもない ごく普通の製品開発 >>27 スポットで一個二個買うだけの奴に信頼関係なんか築きようがない。 picのエラッタは公開してるだろ。 治す努力はわからんけど。 治してもリビジョンチェックして、回避コードと分けるのも面倒なんで、常に回避コードかな。 >>31 たしかに「極論」は言葉として不適切だったかもしれない。 二つの極を想定してその端っこの印象を与える場合がある。でも極論には「極端な論」の意味もある。 コーヒーにどれだけ砂糖を入れるのが旨いか、という話において、 全く入れない、山ほど入れる、前者の意味での極論。 だけど、 「コーヒー自体の濃さ、量に関わらず、2.4グラムの砂糖。これが普通であり、これ以外は旨いと感じるべきではない」 なんて話が出てくれば、これは後者の意味での極論。 開発請負もやるけど、最終製品を出してるわりと大きい会社の人が技術のことには無関心なこともある。 その分、彼らはユーザーのことを回路やプログラムを弄ってる俺たちよりもよく知っているし、 もっと喜ばれるものを考えることに意識を集めている。彼らはコーディングもしないし、もちろんはんだ付けもしない。 彼らにとって製品の開発とはそういうことだし、それは、俺が基板の製造や部品の実装を外部にお願いしていることと、 たいした変わりはない。 そうかと思うと、同じ会社の別の部門で、全然やり方が違うこともある。 …なんてことを経験している人は少なくなかろうと思う。 さまざまなレベルで「〜をやっていたら製品なんて出来ない」の普通があって、>>27 の言ってることはそのレベルの ごく一部にすぎない。2.4グラムの砂糖みたいなもの。 >>32 >スポットで一個二個買うだけの奴に信頼関係なんか築きようがない。 メーカーとユーザーの信頼関係は、友人関係と違って対称ではないし。 クルマを買うとき、「トヨタ(あるいは他のメーカー)は信頼できそう」という漠然とした気持ちとか、 メーカーがユーザーにそのように思ってもらえるようにするために行動することも、ひとつの形。 >>33 公開してないのがたくさんあるわけだが 隠蔽じゃないとすれば 管理ができてない 製品評価が出来てない ってこと >>31 日本のスマホ開発とアップルのiphone開発は 両極端(ブラックボックス組合せと、全開発)の近くにいる。 アップル相手で無くても、 低価格のチップをモーレツな勢いで設計し、 多様な製品を作り出すどっかの国と競争できる気がしない。 >>34 何が言いたいかよくんかりません 主張を分かりやすく書いてくださいな >>36 じゃんじゃん情報提供してやれば良いやん。 >>36 >公開してないのがたくさんあるわけだが そのことに問題があるのだとして、他のメーカーのものを選択する、という話だと思うが、 他のメーカーと比較の上で話をしてくれないと意味がない。 ↑ID:A/CaZZ4F でも、この2行なら理解できますか? ブラックボックスは少ない方がいいに決っている。 そういえば、昔、韓国がアメリカから購入したジェット戦闘機の飛行管制装置か 火器管制装置だったかのブラックボックスを無理に開けたはいいが閉められなくなって、 アメリカからメチャ怒られた、という事件があったナ。 日本はブラックボックスに出入りするデータを調べて、中身を解明したそうな。 エラッタの多いCPUと少ないCPUのどちらを選ぶか? 選択権が自分にある時に、エラッタの多いCPUを選ぶ人はM傾向がある、 というのが私の持論だけど、 もしかしたら、あえて試練、苦難の道を選ぶ、という崇高な人なのかもしれないな、 なんて思ったりしちゃったりしてw 冗談はともかく、連休も半ばを過ぎました、 英気を養って、趣味、仕事のどちらさんも プログラミングや回路設計を楽しみましょう。 チップの「エラッタ」には少なくとも次の二つの意味がある (1)実際のチップのバグ、問題 (2)そのことを記した情報 >>42 が言ってる 「エラッタの多いCPUと少ないCPU」はどちらを指してのことだろね。 いずれにしても、多い少ないは、相対的な量を指す言葉であるから何かと比較する必要がある。 多いか少ないかは別にして、(2)を抜きにした非公開情報も含めた(1)については、使ってみないとわからない。 ところが、簡単に顕在化するものとは限らないから、使ってみて大丈夫だから問題なし、とは言い切れない。 そういう意味ではネットに書き込むような開発者が多いチップほど情報が共有できそう。 崇高かどうかは別にして、ユーザーが少なく、メーカーから(2)のエラッタ情報が少ないものは、伏魔殿の 可能性もある。それゆえに、新しいチップについてはメーカーも開発者を増やすことに熱心になるね。 エラッタが多くても、エラッタが正式発表されてなくても、ユーザーが多くて情報が沢山出回って、不具合で困る事が無ければいいのだ。 医療用や自動車や航空機じゃなければ。 なんにせよ初めてスレで何スレも使って延々とする話じゃないんだわ PIC専用スレに行ってくれ。エラッタ君があの世に行くでもいいけど。 PIC32MX340Fを使用してUARTの割り込みをしたいのですが、 反応しません なにか設定ミスでしょうか? 因みにputsUART1などで文字列送信は、ちゃんとPCで受信できておりますので ボーレートなどは間違っていないみたいです void __ISR(32, ipl4) U1RX_interrupt(void) { LED=1;//LED割り込み時、LED点灯 IFS0bits.U1RXIF = 0; //mU1RXClearIntFlag() } //UARTの設定 void Uart_ini(void) { // Create a UART TX/RX Pin SYSKEY = 0xAA996655; // Write Key1 to SYSKEY SYSKEY = 0x556699AA; // Write Key2 to SYSKEY //IO Port Initial-------------------- //----------------------------------- TRISF = 0x0004; // U1TX:RF3 U1RX:RF2 LED:RF0 //UART1 Initial ---------------------- //----------------------------------- //Mode Setting U1MODE = 0x00000000; //Clear U1MODEbits.UARTEN = 1; //15_UART_Enable U1MODEbits.RTSMD = 1; //11_FlowMode U1MODEbits.BRGH = 0; //3_StandardSpeed*16 U1MODEbits.PDSEL = 0b00; //8Bit None Parity U1MODEbits.STSEL = 0; //Stop Bit = 1 U1MODEbits.ON = 1; U1BRG = (unsigned int)(5000000/Baud)-1; //Baud Rate 9,600bps //Enable Setting U1STA = 0x00000000; // ALL STA Clear U1STAbits.UTXEN = 1; //TX_enable U1STAbits.URXEN = 1; //RX_enable U1STAbits.URXISEL = 0B00; //1ByteReceive_Interrupt //Interrupt Setting IEC0bits.U1RXIE = 1; //U1RX_Interrupt_Enable IPC6bits.U1IP = 0B110; //Set priority Priority_2 IPC6bits.U1IS = 0B00; //Set sub priority INTCONbits.MVEC = 1; //Multi Vector Mode /* Enable interrupts. */ asm volatile("ei"); } >>45 要約すると「犠牲を払って未知の情報を手に入れた」だよね。 実際、昔は飛行機の開発段階で多くのテストパイロットが犠牲になっている。 でも、この事とPICエラッタとの関係性が分らないな。 「PICの性能向上のために、エラッタの犠牲になるユーザーが発生するのは仕方が無い」とか? ま、どうでもいいんだけどさ。返事は要らない。 >>46 初心者にはエラッタは大事な話だと思うナ。 つまづいてPICがイヤになるかもしれないんだよ。 >>48 エラッタについて「根拠を示して他社製品と比較」をしないのはなぜ? >>47 なんか色々と順番がめちゃくちゃ 割り込み優先順位もバラバラ それが原因かどうかは知らんけど pic18なんですが、floatを24bitから32bitに切り替えてビルドするにはでこでしていするのでしょうか? また、printfで%fも32bitのライブラリがあってリンクされるのでしょうか? 皆さんこんにちは。お世話になっております。前スレ746です。 https://rio2016.5ch.net/test/read.cgi/denki/1518524799/746 前スレ976さんにいただいたアドバイスに従い勉強してみたところ、 https://rio2016.5ch.net/test/read.cgi/denki/1518524799/976 UART通信+TeraTermを使ったデバッグが私にも出来るようになりました! それで、USB通信の試験をしていた秋月18F2550マイコンボードにFT232RLUSBシリアル変換モジュールを組み足して、 UART通信の出力させてみたところ、……文字化けしてしまいました 気を取り直して、秋月18F2550マイコンボード+FT232RLだけの最小構成で組み直して、 クロック周波数48MHz SPBRG 311 と設定した場合、文字化け 々 20MHz 々 129 と設定した場合、UART通信成功 しました TXSTAbits.BRGH:1 高速の場合 SPBRG = クロック周波数 ÷ 16 ÷ 通信速度(9600bps) - 1 で求められるはずなんですけど、 48MHzで計算して出た311の値を入れても上手く行かないみたいでお手上げです 宜しければまたご助言いただけないでしょうか? クロック設定 48MHz、SPBRG 311 = 結果:UART通信 文字化け #pragma config PLLDIV = 5 // PLL Prescaler Selection bits (Divide by 5 (20 MHz oscillator input)) #pragma config CPUDIV = OSC1_PLL2 // System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2]) #pragma config USBDIV = 2 // USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1)(USB clock source comes from the 96 MHz PLL divided by 2) #pragma config FOSC = HSPLL_HS // Oscillator Selection bits (HS oscillator, PLL enabled (HSPLL)) SPBRG = 311; クロック設定 外付け振動子 20MHz、 SPBRG 129 = 結果:UART通信成功 #pragma config FOSC = HS SPBRG = 129; >>52 俺詳しくないからあてずっぽだけど、 spbrgって何ビットレジスタなんだ? 256以上の値入れても良いのか? >>52 SPBRG設定値が255を超えてるから、BRG16を1にしないとダメだよ 設定してるっけど書き洩らしてるだけだったらごめんよ >>55 xc8 1.45とMPLAB X IDE 4.05です。 >>56 ならproject propertiesのXC8 linkerの Option categories:Memory modelにある Size of Floatかな >>57 ありがとう! これで積算回数増やしても大丈夫になった。 >>52 低速(BRGH:0)にして SPBRG = ((48MHz / 9600bps) / 64) - 1 SPBRG = 77 でもいいんじゃない >>52 です。質問してすぐに的確で素晴らしいご回答をいただいていたのに すぐにお返事できなくてすみませんでした! >>53 さん ありがとうございます! ご指摘のように、SPBRG は 8bitレジスタでした! 恥ずかしながら、8ビット長の値までしか入らないなんて、 全然頭にありませんでした! >>54 さん 正解まで導く的確なアドバイスをありがとうございます! おかげさまでBAUDCONbits.BRG16 の存在と意味を初めて知りました! ご助言に従い計算してみたところ、 BRGH:1高速、BRG16:1の場合、 通信クロック制御値 = クロック周波数 ÷ 4 ÷ 通信速度(9600) -1 = 1249 1249 = 0b100 1110 0001 SPBRGH = 0b100; SPBR = 0b11100001; となり、 その値でプログラミングしてみたところ、TeraTermとのUART通信に成功しました! 感激です!! >>59 さん ご助言ありがとうございます! BRG16がわからないなら、BRGHを低速にしちゃえばいいじゃない 逆転の発想が素晴らしいです その設定でも試したところ、通信が上手く行きました! おかげさまでとても勉強になりました >>59 低速モードの方が、1クロック当たりのサンプリング回数が16回になるから、エラーに強いしな。 どんなエラーに強くなるんだろう。 俺の想像 → ビットレートの誤差(エラー)ぐらいかな? それ以外に特別なことをしてるのだっけ。 うーん割り込みが発生しない PIC32MX220Fでは動作したのですが・・ レジスタ設定が悪いのでしょうか? IOポート設定の後に、シリアル割り込み↓を設定 //Interrupt Setting IEC0bits.U1RXIE = 1; //U1RX_Interrupt_Enable IPC6bits.U1IP = 0B110; //Set priority Priority_2 IPC6bits.U1IS = 0B00; //Set sub priority INTCONbits.MVEC = 1; //Multi Vector Mode ---- ↓割り込み関数は下記 void __ISR(_UART_1_VECTOR, ipl2)U1RXHndeler(void) { //Receive Command Buffer Input cRevBuf[iRevCnt] = getcUART1(); LED=1; IFS0bits.U1RXIF = 0; //mU1RXClearIntFlag() } すみません自己解決しました。 ■修正箇所 ・RTSMDを0にすべきでした U1MODEbits.RTSMD = 0; //11_FlowMode ・優先2になってませんでした。 IPC6bits.U1IP = 0B010; //Set priority Priority_2 >>62 波形歪みに対して少し強くなるということくらい。 この場合の波形歪みとはデューティー50%で送信したのが受信側では40%で受かる とか60%で受かるという意味。 調歩同期ではビットの中心をサンプリングするのが基本だけど、サンプリング クロックが低いとセンターからのバラツキが大きくなる分波形歪みに弱くなる。 しかしサンプリングクロックを低く選択すると分周カウンタの値を大きくできる のでボーレートのエラーを少なくできるという利点がある。 ボーレートを高くする場合はサンプリングクロックが低くなる組み合わせを選択 した方が総合的に有利になる場合が多い。 調歩同期サンプリングって3か所とって多数決判定じゃなかった? ソフトUARTは知らんけど >>68 PICのUARTって、単にbitの真ん中で刻むんじゃなかった? 16回取って多数決はやってないかと。 ボーレート設定値は、単に源振からの分周値。 だいたい元の質問で9600ってんのにどんな過酷な線路想定してんのよw >>70 PIC24FとかPIC32のUARTリファレンスマニュアルには 3回サンプリングの多数決と書いてあるねぇ 8bitのはしらんけど http://ww1.microchip.com/downloads/en/DeviceDoc/39632e.pdf >20.1.2 SAMPLING >The data on the RX pin is sampled three times by a >majority detect circuit to determine if a high or a low >level is present at the RX pin. >>74 このスレって、理由を書かず難癖だけ書き込むのが多い気がする。 ルネサス当たりの石だとUART入力とかにいろいろ対策回路が入っているな ノイズ対策etc ピックのポートリードとポートライトについて質問さしてください ポートAのうち、0,1,4,7を出力にして使いたいと思っています 使わされているのはXC8です たとえば PORTAbits.RA0 = 1; PORTAbits.RA1 = 0; PORTAbits.RA4 = 0; PORTAbits.RA7 = 1; このようにコードを書いた場合、RA0とRA7は同時に1にならず若干の時間差が あると思うのですが、4つのポートを真に同時に変化さしたい場合はどうすれば いいんでしょうか? 出力として使わされてないRA2-3, RA5-6は変化さしたくないのですが、 PORTA = 0b10000001 ; と書いてしまっても大丈夫なんでしょうか? >>79 > 出力として使わされてないRA2-3, RA5-6は変化さしたくないのですが、 > PORTA = 0b10000001 ; > と書いてしまっても大丈夫なんでしょうか? 日本語の解釈が判然としないが 出力に設定されているが、変化させることを許されていないと言う意味ならば、あなたの書いたコードは、まずい。 もう少し解釈が分かりやすい日本語を書いてもらえないかな? >>81 このコードが最適化で同時になったらさすがに怖いと思う。 >PORTAbits.RA0 = 1; >PORTAbits.RA1 = 0; >PORTAbits.RA4 = 0; >PORTAbits.RA7 = 1; >>82 >ポートAのうち、0,1,4,7を出力にして使いたいと思っています ということなので、それ以外のビットは出力ポートではないと解釈できないだろか。 >>84 書き方が「使わされている」とか、他人の設定の下で作らされていると言う雰囲気なんだよね。 他のポートを出力にしないなら、何も気にする必要はないのだけど、そう読み取れないんだ。 確かに他人のコードを邪魔しないように変更したいんだけどどうしたらいい的な雰囲気は取れるな。 一貫して使わされてる、変化さしたくない、大丈夫でしょうか、とか一歩引いてるよね。 まあここで聞いても結論というか、保証にはならんが。 なんか不安になる書き方よなw 怪しいから 1回PORTAを読んで bit 0,1,4,7を変更してから LATA出力した方がいいかな って思ったもん 79です。すみません >>82 他のポートは入力に設定しています。トリス設定が TRISA = 0b01101100; とされているという意味でかきました >>88 だったら、 あなたの書いたコードでok ところで、 >出力として使わされてないRA2-3, RA5-6は変化さしたくないのですが この文章は、何が変化することを心配して書いたの? トリスで入力に設定しているポートに対してラットで値を書き込んだ場合、 次にそのポートをポートで値を読み込んだら先ほどラットで書いた値に 変化するんじゃないかな?と思って心配してかきました トリスで入力に設定しているポートについては、ラットで値を設定しても 完全に無視されると言う認識でよろしいでしょうか? TRISをトリス設定って云うのはじめて聞いたな まぁまんまだけどなんか深セン >>90 それは大丈夫。 入力はピンの値をそのまま読む。 だから困ることもある。 出力時に値を読み込むと、違う値が読めることがあるんじゃなかったかな。 特にキャパシタがぶら下打てたりすると。 続けてポートリードのほうの質問をさしてください 以下のようなコードを書いてみしたのですが a += PORTAbits.RA0; b += PORTAbits.RA1; c += PORTAbits.RA2; d += PORTAbits.RA3; x1 += PORTAbits.RA4; x2 += PORTAbits.RA5; x3 += PORTAbits.RA6; x4 += PORTAbits.RA7; これって 1・PORTAの値を読む 2・0ビット目の値を得る 3・変数aに加算する 4・PORTAの値を読む 5・1ビット目の値を得る 6・変数bに加算する : : と言う感じで無駄にポートAの値をよんでるのでは?ないかというきがしています 最初に data = PORTA; としてまずポートAの値を読んだあとに a += (data & 0b00000001 ? 0 : 1); b += (data & 0b00000010 ? 0 : 1); みたいな感じで処理したほうが効率的に処理させられるんでしょうか? 勿論そうだが if (data & 0b00000010 ) b ++; の方が効率良いと思う >>93 コンパイラの出力するコード次第だけど、 PICの場合、アセンブラレベルで見ると、 dataに移さずPORTAで直接処理しても、 実行速度は変わらないんじゃない。 だから、細かい効率を考えるなら、 if (PORTAbits.RA0) a++ が一番速そう。 個人的には、dataに移す方がプログラムのお行儀的に良いと思うし、 アセンブラで書かないなら、違いは分からないだろうな。 ところで、無駄にポートAの値を読むと、何が悪いと思ってるのかな? ♯お行儀はよくないのだけど。 ま、慣れた人が同時に変化させたいなんて案件なら ポートA全部出力にまとめる 入力は他のポートにする だろうね。 >>93 PORTAbitsは周辺制御に使う特殊レジスタですので コンパイラの最適化を行わないような設定になっています なので>>93 のような処理になるはずです 以下のような項目に問題があるなら最適化の方法は色々とあります 同時性、処理速度、コードサイズ これらの問題がないならそのまま気にしないのが良いでしょう >>79 PORTAの2356が出力設定になっていないのであれば問題ないですが 将来的にこれらを使う可能性を考えると 極限までコードサイズや実行速度を求めるのでなければ 2356の出力を保持するコードが良いとおもいます >>81 >>97 の理由でなりません >>79 LATAが存在するPICならLATAで制御するべきですね ---- PICのポート出力は3種類のチップが存在する 1. PORTAで制御 2. LATAで制御 3. LATA, LATCLR, LATSET, LATINVで制御 (32bitのみ) 3. だと以下のような万能なコードが作れるが 1. 2. だとそのようなコードは作れない LATAINV = (LATA ^ val) & mask; ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.4.7 2024/03/31 Walang Kapalit ★ | Donguri System Team 5ちゃんねる