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/ >>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)だけでやったほうが
簡単だね だったら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でも使える
ソケットもあるけど高いので考えない方が ■ このスレッドは過去ログ倉庫に格納されています