PIC専用のスレ Part 59 エラッタの話題も歓迎
______
/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( (p)http://www.google.co.jp/ ) くらい使おう
テンプレ内の秋月小売価格も在庫が捌ければ、次の仕入れからは昨今の為替相場変動にならって
適宜価格改定されてます。ここの表記価格とは違うかもしれないのでそのつもりで
回答者する人の注意
. 最初に回答したい気持ちは分かるけど、質問者の内容を、落ち着いてよく読もう。
質問者する人の注意
. あなたの周囲しか通じない変な省略語は使わずに、なるべく詳しく説明してね
前スレ:
Part 58 https://rio2016.5ch.net/test/read.cgi/denki/1526808360/
Part 57 http://rio2016.5ch.net/test/read.cgi/denki/1517669525/ >>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ピン?