PIC専用のスレ Part 59 エラッタの話題も歓迎
文字と数値は本来別物
符号付きとか気にする時点で既に危険な領域に足を踏み入れている
8bitの数値にはint8_tやuint8_tを使って
charは文字用(数値じゃない)と考えるのがイマドキの基本では シリアル通信のバッファは8ビットで考えたい。
文字列関数はcharで扱いたい。
そんなジレンマを抱えているのでは。
パソコンアプリの場合だと、通信そのものは8ビット単位なのに、
文字列の内部表現は基本が16ビットということもあるけれど、
マイコンだと通信単位も文字列も8ビットであることが多いと思う。 だから文字を数値(整数)と思わなければ
そんなジレンマ存在しないよね、と
シリアル通信のバッファは8ビットで考えたい。
数学関数はfloatで扱いたい。
そこに何のジレンマもないように ありがとうございます。
strcpyとかの文字列関数を記述したら、warningだかerrorになってしまい、
それて゜質問しました。
char, unsigtned char, signed charが全部別物とは、参りました。
自分自身の取り決めみたいですね。
LCD表示器とか、2ch目のprintfのようなところで、XC8でstring関数が使いたいだけなのですが、
unsigned char count = 0;
signed char temp = -20;
char moji[11] = "PIC18F1234" と、このように決めてやっさて行きたいと思います。
printf( #1, "Hello" );
printf( #2, "GoodBy" ); のように、出力先が決められるコンパイラだといいのですか。 ジレンマを抱えてはいけない、という結論に導かねばならないってことはないしね。
charをfloatで譬えるのはかまわないが、たとえはたとえでしかない。
ANK文字だけを扱う環境下なら、実質的に「通信で使うバッファ内のデータ列」≒「文字列」ということもあるだろう。
必要に応じてキャストするだけでもいいのでは。 いや、キャストするななんて言ってないし
floatだってキャストするだろ?
文字列の場合だけ「キャストする『だけ』」みたいな
特別視をする必要がないと言っている
間違った解釈をしているから訂正したのであって
主義主張の正しさについて議論する気はない たとえば、シリアル通信で送られてきた文字データ列を、内部の文字列を前提としたポインタにキャストして成立するのって、
ANK文字をはじめとして、シリアル通信で扱う文字と、内部の文字の文字コードが同じであるという特殊な場合に限られています。
そのばあいだけに使えるので、部分集合なケースであると思います。
floatのバッファのポインタに、整数として意味を持つ整数配列のポインタをキャストするのはしたことがありません。 floatの例は整数からの変換じゃないのでは?
floatが整数でないようにcharも整数ではないと思え
ってのが>>310の話なので。 string系の関数を使うという文脈なのでバッファのポインタの話だと認識していました。
その上で「floatだってキャストするだろ?」とあるように「する」と書かれているので、そうなのか、と思った次第です。
floatのキャストの話はポインタの話からは外れています、ということでしたらそれでいいです。
短文メッセージのやりとりなので、文脈の解釈が明示的に行われないことはやむをえません。
値の話になりますが、文字取得の関数では、戻り値は文字ですが、int型の場合があります。
その場合は、int型変数で受けて、あとからchar型変数に代入することになります。
わりかし機械に近い部分のプログラムができるC言語だし、整数と文字は意識して行き来するのではないかと思います。 センサの時系列データとかfloatだってC++でいうところのreinterpret_cast使うよ
そして使える条件があるのもANK文字と何ら変わらない
自分がやったことないからといって想像で書かれてないことを捏造するのは良くない 変数とポインタのキャストは違う、後者は記憶領域を無理矢理指定するからな。
あとキャストしてもどうにもならないのがビッグとリトルのエンディアンだな。 charは数値じゃないの?
PICのXC8で、
x = 'A' + 1とかよくやるんだけど。
これは文字を数値とみなしているとは言わないのか?
なんかWindowsのC#ですら同じ演算をしたことある・・・
int data = str[i] - 'A' + 10みたいな
やり方間違ってるのか? 究極的には合理的に期待通りの動作をするのなら、間違いではないのでは。 >>322
バイナリ数値から文字数値(?)に変換するときの使いますよね。
Aから上は困るんですけど。 正しいかはコードの意図が分からないと評価できないが
少なくともC#ではcharは整数型と区別されたので
コードはともかく理解としては間違いだと思う C#の世界だと、エンコーディングの概念が入ってきて、それをライブラリに任せるのが前提じゃないですかね。
マイコンで同じ考え方を適用するかどうかは条件次第。
前提となる条件を細かに設定せずに一律に間違いというのはおかしいし、もちろんいかなる場合でも
間違っていないというのもおかしいと思います。
ポータビリティの話を出す人もいますが、ポータビリティも絶対的に高い優先度の正義でもありませんし。 NULLは整数の0か?ってのと同種の問いかと
やっとCにもnullptrが導入されるんだね char変数一つで一つの文字を管理できるとは限ってないし、そういう場合は範囲判定とか足したり引いたりシフトしたりのような
演算の対象になると思います。 >>322
"0123456789ABCDEF"[n]
とかやったりする
要するにテーブル
8bit PICだと普通にやった方がいい 環境がMPLAB X IDE6.15 XC8 2.45
PIC18f2320 pic programer +で書き込んでいるのですがちゃんと書き込めません このプログラムを書き込んでるのですが、なぜかこうなります
一度フラッシュメモリを消去して書き込んでみたのですが、こうなります
原因を教えてください やれやれ、コンパイルしてるプロジェクトが違うだけでは?
太字のプロジェクトがコンパイルされて転送されるよ。 0340 すいません、太文字で書いてあるプロジェクトもこれと同じプログラムです。 >>330
書き込みがうまくいかないなら、MPLAB X IDEのOutputに
何らかのエラーメッセージが出てると思うのだけど
その部分のメッセージ位はわかるように画像を上げてほしい
あと、PIC書き込み装置とPICの接続状態の画像(写真)もあったほうが良い
あと書き込み時の電源供給状態
書き込み装置からの供給 or 他からの電源供給 Arduinoから電源供給してるのかな?
「こうなります」と>>337にかいてあるけど、その「こう」がどんな状況なのか、みっちり説明されてない。なぜだー。
写真にくわえて接続図も必要。撮影の角度や照明で不完全になりがち。手書きでもいいから、接続の様子を相手に伝える誠意を見せよう。
めんどうだろうけれど、答える人は質問者のために時間も労力もかけている。質問者がめんどうさを避けることは許されない。 最初から問題解決する気がないんでしょ
騒ぎたいだけ
時間の無駄 すいません、ありがとうございました。pickit3を使って書き込んだらうまくいきました。
ありがとうございました PICKit3とPICKit4、書き込める対象のPICコレだ
みたいな一覧表になってるページってありますか? すみませんが、どこにあるか教えてください。
Microchipのホームページの中でしょうか? >>348
ありがとうございました。
自己解決しました 17000円もするPICKit5って、何者でしょうか?
PICKit4ではダメなのか。 PICKit4と5に大きな価格差ってあったっけ。
ダメとか以前に、4は製造中止とのことなのでそのうち入手できなくなると思う。 ありがとう。PICJit5ができた理由は、AVR対応でしょうか? >理由
そこはぼくはわからない。使えるもの、入手できるものを使う立場でしかないし。
デバッガではなく、PCを使わないでプログラマとして使うときに、Bluetooth接続でスマホで操作できる、という話は
どこかで読んだ。ぼくは、個人的にはそういう使い方を現時点では想定しないのであまり関心はない。
pickit4 pickit5 compare
で、ぐぐってみたらわかることもあるのでは。 先日ネットの繋がらないところでMPLABとMCCを起動したら、
ネット無しではダメと言われ起動しませんました。
そういうもんですか? MPLAB X IDEはオープンソースのNetBeansとかいうのがベースになってるからじゃない
Xの付かないIDEなら違うのかな >>355
試しにPCのネット無効にしても普通に起動してMCC Classicで生成できたから何か環境によるんじゃね? >>356 357
ありがとうございます。
ネット無かったら起動してやらねーよ、とメッセージが出たので、
Wifiつないだら出来たんです。
おれかんですかね。
ありがとうございました。 秋月でPICkit5の扱いが始まったな
特段安いということもなく買う予定もないが I2Cバスにスレーブ8個の制御基板をPIC16F88で作ったけど
SSPCON2レジスタが無くてサブルーチンでエラーが出てハマった
88のI2Cはスレーブだけなんだな 使えね~(笑)
16F886で基板を作り直すか くそ~
https://i.imgur.com/SavSx9b.jpg マスターなんかソフトでいいだろ
クロックストレッチをはしょれば楽ちん >>361
ソフトI2Cも検討したけど
スレーブ1個ならいけるだろうけど8個なのでハード的なトラブルを恐れている
ポートをオープンドレインにできないよね >>363の
「出力を0にしておいてTRISのビット制御でオープンドレイン出力を作れる」
ということが>>362に伝わったのかな? >>364
理解してるよ
入力でハイインピをオープンドレイン代用にするんだろ
もう作り直しているからソフト対応は辞める方向で PCIバスのサスティンドトライステートだな。プルアップ抵抗必要な、 >>367
基板切断がキレイだけど、どうやって切断してる?
切断面もヤスリかけてるね。さらに角部もC面取ってる。
やるな。 なかなかこうは綺麗に切れないな。
ブロワで温めておいてからハサミでばちーんって切ってるけれど、断面はささくれてしまう。
もっともささくれることで、ヤスリ仕上げもさくさく進む。 >>368
>PCIバスのサスティンドトライステートだな。
>>363の方法は、ごく単純なオープンドレインですよ。
おそらく昔ながらのI2Cの話題なのでそこまで要求はされてないはず。
(プルアップは前提だし) >>370
サンドペーパーを貼り付けた木の板で仕上げると楽に研磨できるよね。
基板の端部はそのままでもいいかなと思うけど、角部はケガするので
C1〜2で面取りしてます。
ユニバーサル基板の切断位置も、ひとそれぞれみたいですね。
穴で切る人もいれば 穴と穴の間で切る人。 > 穴で切る人もいれば
穴列で割る・・・横着者もいますよ。カッターは入れるけどね。
> サンドペーパーを貼り付けた木の板で仕上げると楽に研磨できるよね。
建築屋とか建具屋とかでは基本ですね。ロールのやつだと糊も付いてて便利。 >>369
基板の両面に刃の厚いカッターで切れ込みを入れて割る
ガラエポでも問題なし
お騒がせしました
やっと1/8完成しました
https://i.imgur.com/2dGIPLH.jpg >>374
写真見ました。スゴいですね。
オシロはDL-1740、半田ごてはFX-888Dじゃん。 この写真のどこからオシロと半田ごての型番がわかるのか・・・
PICKitは見えるけど3か4かわからない。3か? 医師になるのは、めちゃくちゃ簡単だよ。
どんな医大でも家試験の合格率7割以上はあるし、自治医大以上ならほぼ100%。
弁護士の場合は難関ロースクールを卒業しても、家試験を通るのは10%程度。
医師国家試験の合格率ランキング見てみ。
一番低い杏林大学ですら、79.4%。
奈良県立大以上の偏差値の25校は95.0%超え。
これのどこが難関試験なの?
医学部に学費を支払える財力のハードルが高いだけで、医師にはバカでもなれる。
弁護士、司法書士、会計士、英検1級あたりは、バカには絶対に無理。
まとめると
医師国家試験→バカでも受かる。しかし、医学部6年間で1,000万以上かかる学費のハードルが高い。
司法試験→ロースクール卒業しても、合格できるのはごく一部。非常に難関な試験。
司法書士→ロースクールに行かなくても受験できるが、難易度は司法試験並み。
英検1級→英語がずば抜けて優秀でないと合格できない。英語の偏差値100必要。(実際にはそんな偏差値はないが)
会計士→おそらく、最難関試験か。会計大学院修了者の合格率は7.6%しかない。
不動産鑑定士→鑑定理論が地獄。単体の科目としては最難関の一つ。経済学などは公務員試験より簡単か >>378
赤いUSBケーブルが見えてるから、3確定でしょ。
それより、赤と黄色の湾曲した物が何だかわからない。
ルーペの樹脂フレームのようにも見えるが、
2つも必要とは思えないし。 本筋と違うところで特定に走るのは詮索趣味。運が悪いと田舎ぐらしで遭遇するやつ。ほどほどって大切。 ストーカーは瞳に映った景色で部屋を特定するらしいけど
ハンダに映り込んだ画像を解析して個人を特定されたりして >ストーカーは瞳に映った景色で部屋を特定するらしいけど
本当にそんなこと出来るんですかね? 5chに写真上げると隈なく見られるから
・机の上を掃除をする
・余計なものを排除する
・撮影後よく確認する
・必要最低限の解像度に下げる(もしくは故意にピントをずらす)
上記の様な手順を踏んでから写真うpしないといけない( ;∀;) ・位置情報を消す
逆に匂わせでわざと見せてるケースも PICKIT5高いと思ったらPICKIT4も高く(倍くらい)になっている
2019年春のを見たら五千〜六千円くらいだった 秋月で買ったときは六千円もしなかったのに
今15700円もするし最新のPICkit5は17800円 秋月でPIC16F18444-I/Pの取り扱い始まったけど
要望の受け入れ基準がよくわからんな
老朽取替というには新しすぎるし新規で使うには特長がない
それより低コストの16f152シリーズもっと普及してくんないかな >>388
ぼくもそれをあえて入れる意義がわからなかった。
ただ、PICはプログラマというかデバッガがやたら高くなったな。SNAPでも結構なお値段になってしまった。
新規参入の減少に加速がかかりそう。
というか、Microchipも入門者がPICを使うことを期待してないような気がする。 未だにこのクラスの新製品が出るほうが驚き
新規の回路設計で採用されることはあるんか? 389だけど、PIC16F18444 は、いままでの PIC16F のいいとこどりの総まとめみたいなチップという気もする。
USBは載ってないけど、PIC16F でUSBをやる事例がへってきたのかな。 PICって、一体何種類あるんでしょうか?
多いですね >PIC16F18444
え? と思ってググったら本当にあった。
何桁まで増やすんだよ。
わしの時代はPIC16C84とかシンプルじゃったぞ。 F84ではなくC84を持ってくる辺りが本物のお爺ちゃん感ある 私の「初めてのPIC」は16F84で、
それがそのまま「最後のPIC」になってしまったw 12Cや16Cが付くやつはたいていワンタイム品で開発は別途窓付きが必要ていうイメージがあったけど
16C84は窓付き品じゃなくても消去できるんだったな ワンランク下の16C5x、定番ペリフェラルしか載ってない16C6x、ADC載ってる16C7x、EEP-ROMで窓無しの16C84。
実にシンプル。プリンタポートで書き込みしたものよ・・・ >>399
「ケ」の文字がもう1つだね。縦線の最後は左に曲げた方が良いと思うな。 18444なんとなく買ってみたw
なんとなくあたりを見回して10点LEDレベルバーを見つけたので買ってみた
8ピンpicならどうドライブしたらいいのか悩んでる
18444なら足は足りるが8ピンならどうすればいいのか?! 4ピンあれば12個のLEDをコントロールできる。
3ピンでも多少の事に目をつぶれば同様にできる。
もしくはhc595を好きなだけ繫げ PIC10F200の3I/O+1Inputで6個のLEDと1個のスイッチを制御するのは定番だな もはやシフトレジスタとかカウンタICよりマイコンの方が安かったりするんだがね >>405
少ピンマイコン工作にそれはヤボじゃないですか。
制約のもとで作るスポーツ的な楽しみや、型を重んじる芸事の世界に通じるものだし。 >>406
それは野暮 の それとは、何を指しますか? >>407
「それ」
は
「『もはやシフトレジスタとかカウンタICよりマイコンの方が安かったりするんだがね』というコメント」
です。 部品コストと実装面積の制約のもとで作るスポーツ的な楽しみだってあるんで夜露死苦 むしろ侘び寂びの世界だな
ちょっと黒ずんだリードとか光沢のないセラミックパッケージとか… HC595も普通に使うとData, Shift Clock, Latch Clockの3線いるけどこれを2線や1線でやるやり方とかあるし工夫する余地はいくらでも >>411
1線の方法を教えてください。
できるわけないのに。 こんな感じかな?
Data, Shift Clock
[ダイオード+CR]の微分回路で1線で シリアルデータとクロックを作れる。
データ兼クロックのラインは、Lの時間でH/Lを切り替えられる。
まず、立ち下がりエッジでLに落ちてチャージとともに上がっていく信号を作る。
立ち下がりからすぐに立ち上げたらLをサンプリングできる。
立ち下がりから時間が経過したあと立ち上げたらHをサンプリングできる。
Latch Clock
データ兼クロックがLのあいだCを急速にディスチャージしてHのときにゆっくりチャージする回路も[ダイオード+CR]で作れる。
これで、速いパルスの連続の間はL、それがなくなったらHになる信号を作れる。
特にLatch Clockはシュミットトリガを通したいな。 >>415
ラッチクロックはあまり気にする必要ない気がする。
余計なシフトは困るけど。 >>417
>ラッチクロックはあまり気にする必要ない
たしかに。閾値付近で複数回の立ち上がりとして認識されても問題はないだろうね。 1線でのシフトレジスタ(HC595)を使う方法について
参考になりそうなサイトが有ったのでURL貼っときます
https://www.romanblack.com/shift1.htm >>420
シンプルなのですが、このやり方だと1bit分(QA)を使わない事で解決してると思うので
全ての出力を使うなら420さんの様な方法になると思います 1線式で8bitすべて使う場合の回路で比較的部品数の少ない方法だとこんな感じですかね?
https://i.imgur.com/tJljpfF.png
シミュレーション上ではそれっぽく動作してる様に思う >>423
すまん、画像(グラフ)だと抵抗等の定数がいい加減すぎて、閾値に対して余裕がない感じですね
RCK(LD)の抵抗を大きくするかキャパシタの容量を増やせばもっと余裕ができると思う 入力寄生容量使えば、抵抗2本とキャパシタ1個でいけるか。ラッチにすんごく時間かかりそうだけど。
かかるの嫌ならD使って、もっと速めたければピン増やせ、と。 I2CのEEPROMが書き込みできる、ROMライターを探してるのだけど
色々探してるのですが、良いのがないので
知ってたら教えてください。
ROMは、AT24C02を書き込みます。 ここPICのスレなんだけど……
PICで読むならPICで書けばいいんでは?
そもそもI2CのEEPROMのライタなんて大差ないと思うんだが
良い悪いの判断基準(要件)は何? CH341Aなんちゃらっていうやつが安くていいんじゃない?
書き込みアプリは探さないといけないけど WS2812Bを3.3Vで動かしている例があるようだけど
無点灯のとき実力として何Vで停止するの? CLCの無いデバイスでWS2812Bを制御する場合
1bitごとの割り込みだと
(今何個目の何ビット目とかの)ステートの保存で余裕がないけど
やっぱり割り込み使わずに命令サイクルだけでタイミング調整するのが無難? 8bitマイコンで、32MHz(FOSC/4 = 8MHz)の話してる?
割り込みじゃ無理だと思う。
アセンブラ使って実装したよ。 割り込みは使わずPWMは使うのが無駄(nop)が少ないんでは 作ってみたらわかるんだが、32MHzでも2インストラクションしか
ONの1状態には時間がないから、PWMでも結局タイミングを合わせて使わないといけない。
それをするなら、直接IOを叩いたほうが効率的 効率の考え方の違いだけのような?
PWMを使うと脱調しない範囲で本来の出力周期よりループを早く回せる
節約できるのが1命令だけでも8bit単位のループで8命令稼げる
ループの中の1命令ではほぼ何もできないが
ループの外の8命令なら色々できる
逆にそこまで頑張る必要がないなら労力として非効率とも言える PICのアセンブラでないので申し訳ないが、
CCPを使うとして、
mov W , ON
testAndSkipIf0 colorR , bit7
mov W , OFF
mov CCPR1L , W
確かに4命令で、あと4(5とか6でも良い?)命令自由に使えるとも言える。
しかし、これループもせずに、RGB全部のすべてのBITに対して
延々と命令書くのか?Wレジスタも消えるし。
いや別にいいけど。
IOを直接叩くのなら、R、G、Bについての
それぞれのループ3つ書くだけで済む。
(800kくらいの設定で考えたので9命令クロック)
ワード数では1ループ8命令、次のロードで1命令で30ワード+α程度
たしかにPICのプログラムメモリはそれなりに潤沢
ちなみにこれをループさせようと思うと
shift colorR , left
decrementAndIf0Skip counter
jmp to front
mov W, 8
mov counter , W
が必要になる。
ループはこの時点で8クロックかかり、1クロック程度余るのかもしれないが、
この、次のロードに1クロック余分にかかるのが曲者で
TMRのループと非常に相性が悪い。この方法は使えないかもしれない。
IOを直接叩く場合、BSFが使えるため、Wレジスタが空く。
このため、カウンタをWに入れておけば、きれいに周期的な出力ができる。
IOを叩く場合、周期的である必要はないが。
だから、結論としては、延々長いアセンブラを書き、
8~9命令中4,5命令をなにかに使うか、
IOを叩くループを書いてプログラムを短く、ついでにタイミングを気にせず書くか、
の違いだ。 しかし、基本的にPICはWレジスタとの間の計算しか
ほとんどできず、細切れになった4,5命令で、Wレジスタが
揮発する状態で何ができるのかというとちょっと悩む。 あと、ループしないにしてもIOでも
BSF
BTFSS BCF
BCF
の必要なのは4命令なんだ。
場所はちゃんとしないといけないが。
Wレジスタは空くし、CCPのリソースまで何のために使っているかは
よくわからんとしか言えない。 ループ回すって書いてあるのに何でループ使わない前提になっているの? データ「0」ばっかり送るとか、「1」ばかり送るなら、
PWMでループすればいいと思います。 おそらく、私の考えとあなたの考えの間に理解のずれがあるようです。
私にはどういうループを短くする手段なのかわかっていません。
PWMを使う、LEDを操作する時点で、DUTYは変えないといけませんよね。
そのうえで、PR2も変えるというようなことを考えておられるのでしょうか。
変えることが可能なら、全体の転送時間は短くなりますね。
それがループを短くするということでしょうか。
しかし、単にDUTYを変えるだけで、4サイクルかかります。
PR2を変えるのにまた同じくらい時間を要しては、PR2を変えると破綻するだけで、
結局命令が足りずできない気がしています。 出力先がIOかDUTYの違いで大差ないと思うんだが
何か大きく変えなきゃいけない理由はあるんか? いえ、前の方がPWMで回したほうが効率がいいと言われるので、
比較してみただけです。
同じか、めんどくささを考えるとIOのほうがよさげです。 要するに、私がIOのアセンブラで書くと良いよ、と書いたのに対し、
PWMのほうが効率が良いと、レスが付いたものですから、
実際に書くとどう違うかちょっと考えて、
やっぱりIOのほうが良いだろうという結論を私は出しました。 大差ないのに同意しといてなんでPWMだと良くないのかが説明されててモヤモヤするな
ビットテストにとらわれてローテートでキャリーによる分岐が使えることを見落としている? 前提としてバンクセレクト不要にしたらLレベルの時間調整でnop入れる余裕があるでしょ?
そのループの中のnopを1つ削る
Lレベルの時間が不足する分はタイマで待たせる
削った8命令分を他のことに使う
バンクセレクト不可避とか前提が違うなら比較にならないからどうとでも言える なるほど、説明を省いたからPWMが良くない理由がよくわからないと。
デューティを変えるだけなら、IOもPWMも同じ命令数がかかる。
これはいいよね。
IOを使うと、Wレジスタを使わなくていい。
これがIOの1つのメリット。
デメリットは、IOだと位置が完全固定になること。
しかし、NOPで待たなければならない、とあるが、この1命令、
何か別のことに使ってもいいかもよ。
だから、使える命令の位置関係に制約があるけど、使える命令数は変わらない。
PWMの一番のデメリットは自走すること。
どこかで
TMR2ON=0
TMR2=X
TMR2ON=1
を入れないといけない。
そして、ちゃんと数えて、
PWMがちゃんとPWMとして機能するように命令を並べないといけない。
ONから数えて何番目だから・・・と最初を見つけ出すのが一番めんどくさいと思っている。
そして、「データ1」を送信するとき
1100000000
データ0を送信するとき
1111100000
この
11XXX00000
のXXXの部分でPWMのデューティサイクルを変えるようにしてしまうと
破綻が起こる。
ここを常に気にしながら、こまかーく設定をしていかないといけない。
繊細な人ならいいけど、いや、繊細な人にしても、いろんなパターンを入れて
テストしないとちゃんと動くって言えないかもしれないプログラムを書くのって
どうよって思う。
あとで何か変更したいとき、どうするの?
また、最初と最後にデューティ0を出力するか、しかるべき位置でタイマを止めなければならない。次のLEDにランしたまま引き継ぐと、どこでどうなってるのか意味がわからなくなる。
そして、PICの周辺回路を専有してしまう。
これもデメリット。
ところで、複数のLEDをつけて、送信することを前提に考えているから
これを関数化して呼び出したいわけだが、
そのときに何度もこの関数呼ぶことを前提に考えて、
この空き命令に何か処理させたいことって何なのか、
私にはちょっとわかんないんだけど。
以上。 ところで、TMR2ON=1って書くと、
その同じ命令サイクルでTMR2はカウントアップするの?
それとも次のクロックから?
同様にCCPR1L=Xって書くと、そのデューティが反映されるのは、
その命令と同時?
細かく仕様を知ったPICのプロフェッショナルになるならともかく、
めんどくさいことこの上ない。 >ビットテストにとらわれてローテートでキャリーによる分岐が使えることを見落としている?
これについてはわからないので、説明願いたいな あと、上に書いた内容は、
bit7から0まで、ループすることなく愚直にずらずらっと書くことを前提に
命令の余りの数などを書いている。
これをループで書くと、ループの制御に命令を食われ、
空き命令はほぼないことはご理解いただきたい。 あなたが賢いんだか賢くないんだか、私には少なくとも理解ができない
>Lレベルの時間が不足する分はタイマで待たせる
これについてももうちょっとよくわかるように説明してほしい。
どういうこと? 自分の言いたいことだけ言うんじゃなくて
もうちょっと読む人のこと考えて書いて貰えんかな
> デューティを変えるだけなら、IOもPWMも同じ命令数がかかる。
厳密に同じかは別としてそうね
> IOを使うと、Wレジスタを使わなくていい。
それはそう
> TMR2ON=0
> TMR2=X
> TMR2ON=1
> を入れないといけない。
うん、だから入れるよね?
使う前に準備して使い終わったら片付ける
日常生活でも基本だね
> 11XXX00000
> のXXXの部分でPWMのデューティサイクルを変えるようにしてしまうと
> 破綻が起こる。
> 同様にCCPR1L=Xって書くと、そのデューティが反映されるのは、
> その命令と同時?
PWMの動作の理解間違ってない?
デューティが反映されるのはタイマーがカウントアップした時だよ
あとはどのタイミングにデューティを書き換えても動作に関係ない
だからPWMの周期(10サイクル)より短い9サイクルでループを回してもいいよねってこと
> これをループで書くと、ループの制御に命令を食われ、
> 空き命令はほぼないことはご理解いただきたい。
だからIOと大差ないっつてるだろーが s/カウントアップ/カウントオーバー/
素で間違えた 自分の考えた方法で問題が無いなら変える必要はない
理解できない方法を無理に使う必要もない
でも理解できていないのに自分の理解の範囲で勝手に批評するな!
以上 なるほど、Dutyはそういうタイミングで更新されるんですね。
勉強になりました。
理解できていない、と言われると、まあ、そうなるのかもしれませんね。
しかし、完璧に理解しているかどうか、どうやって判断するんでしょうか。
自分は完璧だ、と思うことでしょうか?
無理だと思います。
批評というかですね、良いとか悪いは、私の意見です。
あなたの意見は違うかもしれません。
意見ですから。
それは言う自由があります。
理論的な正解はあると思っていますので、理論的に間違っていたら
指摘してください。それが勉強だと思っています。 教わり方を勉強した方が良いね。
なんかムッとする内容だったから。
じぁあね。 なるほどね。
私にはまだ難しいなぁ。
ま、ともかく私も勉強させていただきました。
ありがとうございました。 WS2812Bを制御するのにEUSARTのAsyncモードでできそう
内蔵クロック8MHzx4か16MHzx4ができるPICでボーレートを8Mbpsに設定すると
START:1+DATA:8+STOP:1で800kキャラクタ/秒になる
data 0: H375ns+L875ns 0 00111111 1 書き込みデータ0xfc
data 1: H625ns+L625ns 0 00001111 1 書き込みデータ0xf0
CKTXP=1にして論理を反転して送信する
キャラクタ間で10命令または20命令実行できる
試してないから間違ってるかも スタートビットとストップビットを信号の一部として使うアイデアは面白いけど
出力バッファ1キャラクタしかないから
RGB値1ビットずつセットする必要があるという根源的問題が残る
(割り込みを使うのが厳しいし他の処理がほぼできない)
PWMに対する利点がPWMを使わないくらい? そもそも最近のデバイスでCLCが使えないのって低コスト全振りのPIC16F152くらいじゃ?
老人の懐古趣味の世界 次はCLBで自由自在やね。 はーやくこいこい 13145シリーズ CLCを使ったやり方ってどうやるの?
ざっくりとでいいので教えてもらえませんか? >>466
なんかいろいろできそうだな・・・と思ったけど、最大で20ピン? 単機能周辺デバイスを作るのがおもなターゲットかな?
趣味用には遊べそうだけど。 USBオーディオDACを作っているがやっと動いた。とは言っても習作(安物AK4490REQ)なのだが
本番はAK4491EQ+AK4499EXEQで作る。チップ価格が高いのでまずはソフトテスト用環境構築。
・メインマイコン16F887
・ディスプレイマイコンPIC16F886
・COMBO384 I2C変換マイコンPIC16F88
AK4490REQでも1.8V内蔵レギュレータ使わないで外部供給にすると結構いい音でたまげたわ
https://i.imgur.com/dvuOo86.jpeg
https://i.imgur.com/DJiN44H.jpeg ピン数必要ならそれこそFPGAを使えばいいんじゃないの
単にGPIO増やしたいだけなら152シリーズ併用で
下手なGPIOエキスパンダより安いし
という訳で秋月で152シリーズを扱うようみんな要望出してくれ! >>472
言うだけ野暮だけど外部回路がキモならPICどうでも良くない?
もっと高性能で安価なUSB付きのマイコンボードあるじゃん
あとソフトテスト用環境とはいえノイズ対策はそれでいいの? >>474
DACのレジスタ設定がI2Cなんよ
PIC使っても良いだろ PICの得意領域にPICを使う←わかる
PICの苦手領域をあえてPICで挑戦してみる←わかる
PIC使っても良いところにPICを使う←で?
ってだけだよ >>473
件のとその辺のFPGAの底辺とを比べても、どえらい差があるでしょ。価格といいLUT数といい。
たくさんの入力の特定条件をわしゃっとハードウェアデコードしてPICに割り込みかけたい、とかにはピン数ほしいよ。 152てPIC16F152xx? これ、どんな特長があるんです? >>477
ピン数ほしいよって言ったところで現時点で無いもんは無いんだから…… 無ければPICから離れるだけのこと。
希望を述べてはいけない法も無し。 microchipは数百円のEEPLDを売ってて
> たくさんの入力の特定条件をわしゃっとハードウェアデコードしてPICに割り込みかけたい
みたいな一方通行でソフトウェア処理とのインタラクションが少ない用途は既にカバーしている
おそらく「その辺のFPGAの底辺」ってのが想定が違っていて
Microchip自身が力を入れ始めている小規模FPGAとは別に
LatticeのiCE40あたりの市場をターゲットにしていると思われる
もっと言えばルネサスがForgeFPGAとか言い出したから
「既存」の需要の確保、防衛として先手を打ったというところでは?
で、ForgeFPGAの量産品はいつ一般市場に出るんだろうか? 市場の反応が良ければ多ピンの品種にも展開していくんじゃないですかね。
ピンにアサインできる自由度も増えて。 >>481
数100円の「PICひとつ」でやりたいなぁ。安価、コンパクトが売りだと思っているんで。
数100円で100MHz超の32bitマイコンとか使える時代なんだし。もうハードウェア要らんかも、な処理能力になりつつある。 >>483
CLBが32個でマクロセルが4つみたいよ。 >>485
や、CPUコアの話ね
セル数は十分だから18か24シリーズで出してほしい
psoc好きで使ってるがコストとか消費電力とか色々いまいちなんだよね >>481
ルネサスは中国資本になって好調になったのでは? 何かと誤解してない? そしてだから何?
ForgeFPGAという製品の話であってルネサスという会社の話はしてない PICxxアーキテクチャって言うよね
あと古いPIC16とPIC16F1はだいぶ別物 みなさますみません。
知っている方が居られましたら教えて頂きたいです。
PIC16F1825を使用して、CCP4をシングルPWMで
出力しようとしています。CCP1〜CCP3まではシングルで
出力出来るのですが、CCP4だけなぜか出力出来ません。
試しにMCCで出力したコードを使用しても、CCP4だけ
出力されません。さらに、デバッグヘッダAC244043でも
同様でした。エラッタにも無いような気がします。
ピンが足らず、CCP4を使ったのが失敗でした・・・。 >>493
大体そうですよね。なので、いつもは使わないMCCを使ってみた。
設定すると、デューティ関係なくHi(100%?)が出る。タイマ及び
他の設定はもちろんCCP1〜CCP4全部同じです。CCP1とCCP3,
CCP2とCCP4がペアみたいになっていますが、CCP3は問題なく
単独で出力されるんですよね。 RC1 9 AN5 CPS5 C12IN1 CCP4 P1C(1)
これのCCP4って入力しかなくね?
CCP4の出力はModulatorのソースにしかなってないような >>495
うわー。ほんとですね。PINOUT DESCRIPTIONの表ではOutput Typeが
「CMOS」ではなく「ー」になってる。 逆に言えば無変調にしたらMDOUTから出たりせんの? MDOUTだとP1Bと同じ6ピンだから6ピンを使うならECCP1が使える ああ、そうか
じゃあP1Cで出力すればいいってことでは?
PPS対応のデバイスに移行した方が幸せな気もするが 皆様有難うございます。500Hzにして、分解能荒くなるけど、
ソフト処理でPWM出すことにしました。32段階ぐらいなら
いけるでしょ。空きピン無いし基板作ってしまったので
9ピンRC1で何とかします。
CCPx PWM x=1〜3とか書いてくれればいいのになあ。 DC24Vから1.8V作ってPIC動かしたいんだけど
PIC自身で降圧チョッパ動かした例ってある?
電池一本駆動の昇圧の例はあるんだけど 原理的にできるのは分かるんだけど
NMOSでやろうとするとゲート回路の電圧設計が結構繊細なんよね……
やっぱりスイッチングレギュレータIC使う方がいいのか NJW1933が秋月で80円だからなぁ
大きさもMOSFETと変わらんし
低電圧域は最新デバイスでも同期整流でも効率頭打ちだし PIC16F131ファミリーもPICkitminusでサポートされたようだね
肝心のデバイスが入手できてないが あと秋月でICD5入荷したな
どういう人が買うのか分からんが PICをこれから始めようと思っている者です
プログラミングの経験はありません
色々検索して後閑哲也さんのサイトにたどり着いて
CD付きのC言語の書籍を買おうかと思いましたが
内容的に古過ぎたり、本当に初歩的なことが書いていないような事が
レビューに書かれていたりします
価格等から12Fシリーズ辺りで始めたいと思っているのですが
これを読んでおけば良いというおすすめの書籍やサイトはありますか?
アドバイスいただければ幸いです
回路図はある程度読めます プログラミング経験がないってことはマイコンも初めてでしょ?
自分もPIC派だったんだけどさすがに今から始めるのにPICは勧めないな
ライタも高いし
Arduinoでもいいのでは ホビーならarduinoが簡単だね
仕事でやるならPIC18Qがいいんじゃない
本は色々穴があっても後閑さんのがいいと思う ありがとうございます
最終的には小型に作ったりしたいと思っています
ライターはPICKIT3を安い時に買ってます
本は現在のXCの時代のものでないのでそのまま使えないというようなのも見ました
Arduinoが簡単みたいですが、ハードが違うという事はこちらで始めてしまうと
PICで作りたいと思った時にそのままでは移行できないですよね?
C言語のルールとか恐らく当たり前の事はサイト等を見ても書いていないので、
各ファイルの役割とか基本的な事から書いてある物だと助かります
Arduinoだと良い本やサイトはありますか
基本から学ぶにはハードから見直した方が良いでしょうか? PIC32MZ2048EFでADC 16xオーバーサンプリングと980サンプルDMAしたいのだが、オーバーサンプリング中に何らかの割り込みが入るとオーバーサンプリング停止してしまうね。
DMAで各入力レイテンシーを最小にしたいと思ったが、うまくいかないものだ。
STM32H7ではこんなことは無いのに、PIC32はムズイ。 >>510
とりあえず適当な12Fのデータシートを読んでみては。web上でタダで見れるから。理解できそうならもうそれで行けばいいし、サポート欲しければ本買えばいい。
一歩踏み出してみないことには、どこまで理解できるのか自分でもワカランでしょ。他人が判るはずもない。 >>512
ありがとうございます
一応現物買ってデータシート読んで色々なサイトを参考にはしています
どこの行がどういう意味を持っているのかとかコピペでやって
コンパイルエラーが出た時の対処法とかを
見つけ出すまで凄く遠回りをしていると感じたもので
書籍を買うなりちゃんと勉強をした方が良いと感じました
とりあえずシリアルデータを読み取ってLEDを光らせるとかのレベルでいいと思っていますが、
中途半端に人の書いた物をかじって基本的なルールとかを知らないのだなと感じました
PCの組み立てや基礎的な電子工作は出来ると思います
バッチファイルの分岐云々で躓いたので、考え方が出来ていないと思っています >>513
意外に良いのがYouTubeです。
「PICでLチカしてみた」とかのタイトルでいろいろ出ています。
ソース(プログラム)も出ていたりするので、
画面を止めてゆっくり見えます。
おすすめしたい勉強法は、以下の通りです。
1. 最初はマネ
難しい理屈を考えようとせずに、人のまねをして、
その通りの回路で、その通りのプログラムを
何も考えずにベタでコピーして動くようにします。
2-3種類を何度も何度もやります。いわゆる体育会系的に行います。
すると、ツール(MPLABやPICKit)の使い方が覚えられます。
鉛筆と消しゴムは無意識に使えないと
国語の勉強ができないのと同じです。
2. 改造してみる
プログラムをまねて打ち込んでいると、なんとなく意味がわかってきて
「もしかしたら、こうしたらこうなるんじゃないか?」と
予想が立てられるようになります。
そうしたらプログラムの値を変えていじって結果を見て意味を考えます。
エラーで動かなくなってしまっても、動くものからの変更なので、
迷うことなく元に戻れます。
いつでもスタート地点に戻れる環境、これが大変重要です。
3. 自分で1からやってみる
上記2ができるようになるということは、
もうツールの使い方からプログラムまでできるようになったということです。
あとは自分で小さなプログラムを作ってみることです。
いろいろと作っていくと、だんだんプログラム文法の
わからないことが出てくるはずです。
その時は、ネットや本、それこそ後閑さんの本を読んで見てください。
知りたいことがはっきりしていますから、理解も格段に早いです。
アルデーノもいいですが、
最初は時間がかかりますが、ハードの製作を伴うほうが良いです。
ある地点で、それは突然にマイコン全体が見えてきます。
そこからの理解は、ハードが面倒だからとアルデーノから
スタートした人より、超スピードで理解が深まります。
これは実体験ですので、まちがいありません。 最初にマイコンを学ぶなら癖ツヨのPICを選ばなくてもいいと思います。 >>514
ありがとうございます
専用の書籍等があればと思いましたが
コピペがきかないので電子で・・・なんて思っておりました
どれも気軽に買える値段ではないのでしばらく見送りたいと思います
動画はほぼノーマークでした。
大きなヒントありがとうございます
元々ハードは好きでいじって来ましたがソフトは触れて来なかったので
やりながら繋がりを見つけて行きたいと思います >コンパイルエラーが
( ゚д゚)ハッ!
>価格等から12Fシリーズ辺りで始めたい
>最終的には小型に作ったりしたい
アセンブラだとばかり・・・ いまさらアセンブラもないでしょ。
Cでやっとけば、PICだろうがどれでも同じだよ >Cでやっとけば、PICだろうがどれでも同じだよ
今はバンクをまたぐような配列確保やポインタ加算に問題はないのかな。 PICやり始めたところだけど、勉強かねてアセンブラでやろうかと PICも色々あるけど、12FとかクラスでCはどうだろうと思う。 >>521
目覚めるもよし、辟易として高級言語に逃げるもよし。経験は血肉になるよ。 >>519
>今はバンクをまたぐような配列確保やポインタ加算に問題はないのかな。
そんなこと意識したことないな。Cのレベルに現れない。 昔のCCSは配列サイズに制限があったな
16F877で使ってた xc8はバンクとか無いので普通のCだわ。
出来ればC++で書ければ変数管理楽なんだが >>526
なるほど。
そのあたりの制約が無い(またはとても少ない)なら、C言語で取り組む限り、
「PICでマイコン入門」は問題なさそう。 メモリ次第ってのもあるな12F509とかROM1kW,RAM41Byteしかないもんな、まあこんなのもう使う奴いないだろうけど…
12FでもRAMが1kあるやつもあるからそれくらいならCで書いても何とかなるかもな Cでやるなら12Fでも4桁型番にしておいた方がいいかも ピン数少ないのはデバッガ繋がらないから入門にはいまいちじゃない? >>527
python使いたいならESP32あたりにしときな パイソンって、記述の位置とかを変えてはいけないんでしたっけ。 インデントがブロックに対応してるから固定といえば固定だな
煩いのはその位だけど if( a==1 ){
b++;
} else {
b=8;
}
と書いたり
if( a==1 ){ b++; }
else { b=8; }
とか書いたりしてるんですけど、それを許さないんですよね。
窮屈で、抵抗が1MΩくらいあります。 上の書き方しか通らないね
俺は気にならんけど好みに合わないときついかもね
ライブラリが揃ってるからネットに繋ぐ物を作るのはすごく楽だよ
あとは地味だけど文字列の処理が楽 好き嫌いとか印象で、好きだ嫌いだって言ってたら、自由奔放に取り残されるのが技術の世界ですね。 嫌いの感情が芽生えたら潰す方が、新しいものについていきやすい、って話ですよ。 遊ぶだけならPIC10F200をCで書いてもいいけどね 数年ぶりの久々にPICKit4を使おうとしたら、
Transmission on endpoint 2 failed (err = -109)
のエラーで全く使い物にならない。
以前使えていた時は同じパソコン筐体でWindow7で、USBポート(ドライバー)が3.0非対応だから2.0で通信していた。
今はWindow10にしていて、デバイスが対応していればUSB3.0通信が可能となっているのと
MPLABXを最新の6.20(前は5.45あたり)という違いがあります。
デバイスマネージャーを見ていると、firmwareを更新を開始して1分以内に
PICKit4が消滅して再表示されないので、更新処理に失敗していると思われる。
工場出荷状態に初期化は出来ているから、
USB通信に絡む部品が経年劣化しているのかな。
通信速度をLowにしても状況は変わらず。
もう純正品をやめて、PICerFTやPICKleを使おうかと悩み中。 >>544
一度PICkit4のファーム書き直してみたら?
あとUSBケーブルを変えてみる
あと、複数のUSBコントローラ使われてるMBなら違う系統のポートに繋いでみるとか >>545
工場出荷状態に初期化は544に書いた通り実施済。
ケーブルは3種類試しました。
シールド付きの高級ケーブルは近所で今時売っていないので、
それは試していません。
違うポートは既に試しました。
普段タワー型を使っていて2口駄目で、更にノートパソコンでも試しました。 XORLW B'xxxx0101'
のxってどんな意味があるのでしょか? >>547
どこにどんな文脈で書いてありましたか? レスありがとうございます
おそらく、おもしろいPICマイコンPCI12F675を使いこなすって本に
って今見たら勘違いでした
MOVLW B'xxxxx011'
MOVWF TRISIO
MOVLW B'xxxxx0xx'
MOVWF ANSEL
xは元から入ってる数値を変更しない、みたいな認識でいいんでしょうか? TRISIOやANSELレジスタの仕様でそのビットには何も意味がない
もしくは
その本の中での使い方ではそのビットに何を設定しても動作に影響がない
みたいな感じかな ぼくの知らない記述だ。といってももう5年ぐらいPICのアセンブリ言語にはタッチしてないけど。
>MOVLW B'xxxxx0xx'
>xは元から入ってる数値を変更しない、みたいな認識でいいんでしょうか?
実際にそういう記述をしろと書いてあったのかな?
それとも、この機能を使うときは、xはあなたの用途に合わせて変えて、の意味だったのかな?
>>552さんには悪意はないのだろうけれど、質問するときに、情報を小出しにするのは良くないです。
>おそらく、おもしろいPICマイコンPCI12F675を使いこなすって本に
>って今見たら勘違いでした
「本は ”おもしろいPICマイコンPCI12F675を使いこなす”で、
今見てみたら、おそらく私の勘違いでした」
の意味でしょうか。
>552さんが書いた情報だけだと、この本を持っている人しか答えにくいです。
この本はAmazonでもレビューが少ないし、傾向としては、たくさん売れている本でもなさそうです。
どういう文脈で書かれているのか書いて質問する方が、より広い人からコメントをもらえるでしょう。 みなさんサンクスです
>>553
この本の中で0と1どっちでもいいよとゆう意味だったのでしょうか
いまMPLABで
MOVLW B'11111111'
MOVLW B'xxxx0101'
と記述するとエラーでましたError[107] : Illegal digit (x in binary)
>>554
すいません情報小出しにするつもりはなかったんですけど
「よく使う表現だよ」「そんな記述方法はないよ」とか簡単に扱われるものだとおもてました
> 実際にそういう記述をしろと書いてあったのかな?
それがxについて注釈がないんです、
30行ぐらいの書けばプログラムが完成するような例文にサラっとかいてあるだけで
どうやらxを含む表現はなさそうですね >>552
>xは元から入ってる数値を変更しない、みたいな認識でいいんでしょうか?
そう読むのが自然ですが
以下のように解釈するとよいです。
>MOVLW B'xxxxx011' この話は下から3bitについて物を言ってるから
下から3bitを001にして、残りはあなたの希望する値を入れてね。
>MOVLW B'xxxxx0xx' この話は下から3bit目について物を言ってるから
下から3bit目を0にして、残りはあなたの希望する値を入れてね。
xのbitは自分で判断、決定してね。僕は知らないからね。 >>556
サンクス、任意の数値を入れないとダメですか
都合のいいように考えてました
いろいろとシビアですね ここに出されている情報だけで判断するとPCI12F675ということだからIOはb0~b5、TRISIOは入力/出力どっちにするか決めるレジスタ
b0~b2だけが具体的な数値が入っている
xが書いてあるb3~b5に何かつながっているなら>>556のように
>xのbitは自分で判断、決定してね。僕は知らないからね。
b3~b5に何もつながっていないなら>>553のように
>その本の中での使い方ではそのビットに何を設定しても動作に影響がない
という感じ
(xって書いたらエラーになってしまうのでだめだよ) どうでもいいけどPCI12F675じゃなくてPIC12F675だな まとめありがとうございます
mpasmコンパイラがMPLAB XIDEv5.35で終了していて
新しいアセンブラの情報がネットでも少なくて困ってました アセンブラの情報とかいう問題じゃなくて住所を書くサンプルに
XX県○○市
と書いてあったら、そのまま書類に書いちゃったレベルに見えるが >>561
東京都xx区 フジテレビ本社
って書いたら郵便届きそうな気がしない? 「住所を書くべきところには、XX県○○市とは書かない」という常識があるから、そうは書かないということであって、
その前提がなければわからない。さすがに、役所の申請用紙の住所欄ならどう書くべきかは、浸透率が高いだろうけれど、
本件のような、
X…変更しない
0…0にする
1…1にする
という認識にならないでいるためには、当該命令がどういうものなのかをわかってないといけない。
その本がどういう流れでそう書いたのかがわからんけれど。 >>562
情報の重み付けを考えればこんな感じだろ。
;東京都xx区
movlw 'フジテレビ本社' >>563
movlwの内部の命令構造をわかってないといけないってなかなか厳しいですね
ビット処理命令は操作対象外のビットも一度読み込み上書きって書いてあったような
気がするんですが、そんな感じかなあとおもてました
>>564
さいきんのとれんど
GOTO $+2
MOVLW 'フジテレビ'
MOVLW 'テレ東'