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/ >>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)だけでやったほうが
簡単だね だったらPORTのIOC(Interrupt-On-Change)機能で十分だよ >>711
>>712
そうですね!!こんな機能があったとは
16F1705のデータシート内で検索してまいます
ありがとうございます!!解決しそうです!! >>714
ありがとうございます!!
↓のページ参考に書いてみたら、思ったように動きそうです!!
ttp://physics.cocolog-nifty.com/weblog/2012/06/post-cfdc.html
助かりました><感謝です >>675
「〜を希望します」なんて書き方は罵倒じゃないと思うけどな。
ただし皮肉っぽい書き方、上から目線になったのは申し訳無い。
同じ論点主張の繰り返しで先に進まないし、
プログラミング経験が足りないのかなと思って、
ついついあんな文章になってしまった。
人それぞれで考え方が異なるのは仕方が無いですね.。
直接対面して議論できないのが残念です。
ではまたそのうちに。 不自然というか、思考回路が違う気がする
いろいろ理解不能 無線リモコンの受信側で、バッテリー節約のために数秒ごとにマイコンをスリープから起こして500msぐらい待ち受け、
そしてまたスリープっていう間欠駆動させて、その都度、受信モジュールの電源はON・OFFさせてるけど、
受信モジュールの電源をON・OFF繰り返してるとが故障する確率が高くなる?
受信モジュールもスリープさせたほうが良い? >>710
>100us(high)200us(Low)の繰り返し波形
これを、タイマーを使って捕捉したいなら、
highの100us期間に必ず見に行けるような速さで、タイマー割り込みをする必要があります。
100us周期で見に行っていては遅いので、例えば60us周期で見に行けば、確実に取り込めます。
unsigned char check = off;
unsigned char LED_count = 0;
void interrupt 割込み関数名(){
if (TMR1IF == 1) { // Timer1割り込みなら
check=on; // checkの時間だぞ
LED_count++; // LED点灯時間ounter
TMR1IF = 0; // Timer割り込みflag
} else if(...){ // その他の割り込み
} else if(...){
}
}
void main(){
unsigned char count=0; // バルス数
unsigned char zenkai_check=0; // 前回の割り込み情報
check=off; // 割り込み情報なし
LED_count=0; // LED点灯時間counter
while(1){
if( (zenkai_check==off) && (check==on) ){ // Timer時間の↑なら
if(RC0==on){ // パルス入力=Highなら
count++; // パルス数
check=off; // Timer時間情報
LED=on; // LED点灯
LED_count=0; // LED点灯時間
}
}
zenkai_check=check; // Timer割り込み情報更新
if( check==on ){ // Timer1割り込みありなら
if(LED_count>500){ LED=off; } // LED時間が規定時間以上になったらoff
}
}
} ていうか、
全く何のために割り込みを使ってるのかわからないコードだな
メインループに1msの処理があったら取りこぼす 処理が逆だな
俺だったら入力波形を割り込みに入れて、
割り込みの中でタイマー値を見る 逆っていうか
何をしたいか次第だよ
単純にカウントするだけならパルスをタイマーのクロック入力にすればCPUを使わないで済む
パルス幅を計りたければキャプチャー機能
フィルター処理を加えたければポート状態変化割り込みとタイマー割り込みの併用
または変化割り込みとポーリング併用
などなど
>>722は何がしたいのかわからん
>>725もキャプチャーに対してメリットがいまいち お、今マイクロチップからPICKIT4出したから買えってメールが来たぞ
かわんがな 3のユーザー様には9ドル75セント! だったら買う。 16F18466はなかなか良さげだな…
UART直ってたら使ってみたい >>728
感想。
http://ww1.microchip.com/downloads/en/DeviceDoc/50002721A.pdf
8ピンになってる。
AVRにも対応していくのかな。
AVRに新製品。最近はAVRはご無沙汰なんだけど、MCC相当のものがあるのかな。
MEMSオシレータも手掛けてるのか。 >>732
>18446?
なぜ「?」が付くのか…。
型番間違ってるわけじゃないよな。PIC16F18446 あー。本当だ。ごめんなさい。>>731は 466 って書いてる。 後継って、どこを改善して欲しいの?あるいはなんの機能を追加して欲しいの?
まあPIC18アーキで作ったものが欲しいと思わなくはない PIC16F1454を愛用してたんだろか。
秋月で-E/Pに「D」マークが付いてるから心配だとか。 もしそんな理由なら値段差10円の16F1455-I/P使えばいいと思うけどね
もっとも、Dマークついてても在庫AAA(トリプルA)なんだししばらくは
無くならないだろうけど PIC16F1455の後継でも良いです
不満はROM/RAM
これが倍のが出てくれれば嬉しい ちゅうーかさあ
初めてACTが出てきたときに「これでUSB対応の8bitPICは全部水晶不要になるな!」とか
すごい期待したのに結局ACT搭載PICっていっちゃん最初に発表された品種のみでその後
全く採用がないとか一体なんなの?
まあ、USB対応 8bitPIC自体がここ数年新しいのが全く出てきてないけどさあ
18F14K50のACT版出して欲しいわ(18F14KK50?) 18F14K50も16F1454も買ってみたもののUSBを理解するのに気力を取られ未だ電源入れてすらいない 真面目にやったら、USBだけでも結構なボリュームあるからな
むしろ、それでも めげないヤツの方が少数
引き出しに しまったままの状態でも、別に珍しくない なんとかMLAでデバイス作ったけど、MLA部分は理解は出来てない ごめん16F1454は電源は入れてたわ
デバッグ出力用にEUSARTを使えるようにしたとこで力尽きてた PICにはarduinoとかmbed的な楽ちんライブラリってないの?
デバイスのハード層をラップしているような
Lチカ数行でできるような
シリアル出力数行でできるような
デバイス変わってもヘッダのデバイス名変えるだけのような PIC KIT Programmer3 が使えない、PICを使い始めたので、
ようやく、IPEを使い始めているんだけど、
毎回、power の設定で、「Power Target from tool」 を設定するとか、
面倒くさいんだけど、諸々の設定を保存できませんかね?
また指定した、hexファイルの履歴が残っていれば、すぐに書き込みできるとかできるんだけど... ターゲットの電源くらい入れてやったら良いと思うの。 設定出来ないとしたら糞だ
IDEも色々と糞なところがある
2重起動出来ないとか
エディタの基準線を消せないとか
起動時に前回プロジェクトを起動しない設定に出来ないとか 使いにくいと思う Windows アプリは uwsc 使えばあなたのお気に召すまま全部解決 >>750
スタンドアローンのPICkit 3 Programmerを使う コンパイラ・アセンブラ・プログラマ・デバッガを自作する >>756
基本それを使っているんだけど、それでは、Pickit2 とほぼ同じ品種までの対応で、
ここ数年リリースのPICの書き込みでは、使えないです。 デバイスによりけりだな
対応デバイスの "PK2DeviceFile.dat" を見つけられれば従来通りに使える
煩わしい、IPEともおさらばできる 18F46K22でI2Cを使うのでMCCでMSSP1を選んだが動作しない。
EUSART1、TMR0、ADCは動作しています。
SCL1とSDA1のピンはHighのままです。
I2C1.hのEMULATED_EEPROM_Write/Readをコピペしているが、
PICKit3のデバッグでPAUSEにすると
while(status == I2C1_MESSAGE_PENDING) ;から抜け出せないようです。
MSSP2にしても同じです。
EasyタブはI2C Master/Enable MSSP/Slew Standard/SDA Hold 300nS/7bitで
I2C Clockの0x03≦0xA0≦0xFFで99.379KHzと表示されてます。
RegistersタブはBCLIとSSPIのチェックとADD=0xA0/BUF=0x0/CON1=0x28/CON2=0x0/CON3=0x8/STAT=0x80
SSP1MSKが0xFFで赤くブリンクしているのが気になります。 こちらに書いていないけど、こちらに書きなさいということかな? また、お節介な荒らしがコピペしたんじゃないの?
マルチするなと荒れる原因 18F8520を使ってみたいのですが、これ用のソケットはあるのでしょうか?
そもそもテストや実装は個人で出来るのでしょうか? http://akizukidenshi.com/catalog/g/gP-07366/
これに半田付けすれば良い
電源系の配線をしてパスコンを付けて
80本ピンを立てておけば
あとはソルダレスボードでも
直接線でPICKITでも使える
ソケットもあるけど高いので考えない方が 0.5mmピッチの80pin QFPの半田付け
がんばれ >>764
ポートを入力設定にして無いとか、PowerDown設定してしまってるとか、
アナログ入力になってるとか、 0.5mmピッチは適切な道具が揃ってればあとは練習 BGAを裏返して植毛する事を思えば、全然余裕っすヨ >>767
ソケットとか変換基板買うよりもチャイナ基板屋で基板作ったほうが安いし早い。
初心者向きのフリーのCAD使えばわりと簡単。
パスコン程度は安く実装してくれるし、基板屋によってはPICなら実装もしてくれるかも知れないよ。 >>768
これはいいですね。でも半田付け殆どやったことないんですよね〜
>>770
ラインチェッカーをPICで作ってみようと思いまして80pinで一番安いこれがいいかなと
>>772
適切な道具を教えていただけるとありがたいです。
>>773
そうなんですか!?
>>774
自分でも調べて個人で頼むのは高いなと思っていたんですけど、安いところがありそうですね。
半田付け高校以来やっていないんで実装してくれるとありがたいのですが
初めは変換基板で試してからやってみます
ありがとうございました 今までXC8のFREE版を使っていたんですが、今回サブスク版を買ってみました。
んでPROレベルの最適化でコンパイルしてみたらそれまで55KBあったHEXファイルが
40KBまで縮んで「さすがPROのオプティマイズ化はすごいな」と思ったんですが、
いざこのHEXをPICに書き込んだら全く動きません
ためしに最適化レベルをFREEに設定してコンパイルしたHEXファイルを書き込んだら
やっぱり普通に動きました
PROレベルの最適化で逆に動かなくなるケースってのはどういうものがありますでしょうか? >>775
ハンダコテは何でもいい。液体フラックスと吸い取り線は必須。
ハンダはこだわりがなければ有鉛を使う。
あとはようつべで引きハンダのやり方を見てひたすら練習。
仕上がりを確認するのにルーペが必要かな。 >>776
ソースの一部分を削ってコンパイル&実行を繰り返し問題部分を特定するしか無い >>776
アセンブルリストファイルを吐き出してコンペアかけてみな。 >>776
最適化によって正しいコードが動かなくなることはある
(昔のVisual Studioではよくあった)
最適化における仮定が正しくない場合にも起こるし
単にコンパイラのバグということもある
シンプルなコードから順番にコードを足していって場所を特定してコードの記述を変えたり
ソースファイルや関数ごとに最適化を切り替えられるならそれを細かく変えることで
場所を特定して最適化設定を最適化する
また、コード側の問題としては以下が考えられる
不定値
タイミング依存
使用リソースの変化 (RAM, スタック)
処理順が変わる (volatileつけ忘れ) あとハンダは0.3φの奴を。ルーペはスタンドか頭にかけるのを。 ヤニなしで0.3mm径の半田より、
0.6mm径のものを使った方がヤニがたくさん得られて
上手に半田付けできるよね。 >ヤニなしで0.3mm径の半田より
0.3mmでヤニなしって売ってる? >>775
マイコン自体が安くても大して変わらんぞ
値段で決めない方が良い スルーホールだろうと0.5mmピッチだろうと0.6mmでやってる ハンダの径なんていろいろ選べるのだから、使い易いと思うものを使い分ければいいよね。
0.6が使い易いと思うならそれを使えばいいし。 糸ハンダの太さなんてアマチュアだから単に繰り出し易さで選んでるな。
あまり太いのも細いのもハンドリングし辛い。 細い半田だと、脂の量が少ないので、半田付けが難しいです。
0.6mmとかだと、脂が多いので使いやすいです。
あとで脂を洗浄するつもりなら、フラックスをハケ塗りすれば、0.3でも行ける 俺が0.3mmのハンダの芯のフラックスの量が少ないと感じるとき
・半田付け時の温度がうっかり高くなりすぎている。
・大きめのD、Cコテ先のまま使って、コテ先端へのハンダの広がりが大きすぎ。
ピンポイントでハンダを流し込むのに0.3mmを使っているのに、
芯のフラックスを、対象を活性化するのに使わずに、熱で飛ばしたり、
コテ先の余分なところを活性化するのに使っていては良いことないですね。 フラックスはハンダのヤニいりももちろんだが、別に筆で塗る奴用意して
基板に塗布+IC置いた後にピンごと塗布だろ。
太さは俺も0.3mm. そうなんだけど、ついつい面倒で半田盛ってしまう
で、ブリッジして慌てる
ここ一番の時にはフラックス出動するけど ブリッジしないで済むようなら極力させない。
しちゃったらなるべく一回で済むよう吸い取る。 ■ このスレッドは過去ログ倉庫に格納されています