1read 100read
2011年11月1期7: PIC専用のスレ Part35 (711) TOP カテ一覧 スレ一覧

PIC専用のスレ Part35


1 :11/08/15 〜 最終レス :11/11/11
....  /Microchip ./|
 /( ゚∀゚)    /  | アセンブラのアの字もわからない
 |~ ̄ ̄ ̄ ̄ ̄|  /. 超初心者からHEXが読めてしまう
 |/Z./Z./Z./Z_|/ ||  鬼プロフェッショナルの為のスッドレ(#゚Д゚)だ!モ゙ルァ
  ||. ||. ||. ||
大人気のPICマイコンのスレ。
なんといっても情報が豊富だし、開発環境も多いし、パッケージも豊富。
使いやすくて、しかも安い。やっぱりPICだよね。
例の如く基本リンクだ
http://www.microchip.com/  マイクロチップ本社(Microchip Technology Inc. )
http://www.microchip.co.jp/ マイクロチップ テクノロジー ジャパン 株式会社
またーりやっておくんなまし。
教えて君はとりあえずGoogle(http://www.google.co.jp/) くらい使おう
前スレ
PIC専用のスレ Part34
http://kamome.2ch.net/test/read.cgi/denki/1309466648/

2 :
>>1
2gt!

3 :
3set

4 :
あれ?なくなってる

5 :
そろそろ危ない?保守あげ
誰だよ?重複した奴は?w

6 :
PICは面白いぜwww

7 :
ピクニックピクニックランランラン♪

8 :
貧乏な俺には持って来いの趣味だよ

9 :
ぴっ苦

10 :
10げっち

11 :
[新シリーズのPIC16F1xxx テンプレ用] ('11/09版)
旧シリーズより機能が大幅にアップしていて値段も下がってる。新規に組むならこちらから選択すべき
秋月に入荷していないラインナップも表記(未)。円高のおかげか若干値下げあり(v)
[40pin] 16kwハ必要ナイカモシレナイケド10円差ナラ
v◎16F1939 \170 16Kw 1024 I/O36 ADC14 CapS16 Comp2 Timer4/1 MSSP1 ECCP2/1 CCP2
v○16F1937 \160 08Kw 0512 I/O36 ADC14 CapS16 Comp2 Timer4/1 MSSP1 ECCP2/1 CCP2
[28pin] こちらも10円差なら
-◎16F1938 \150 16Kw 1024 I/O25 ADC11 CapS-8 Comp2 Timer4/1 MSSP1 ECCP1/2 CCP2
v○16F1936 \140 08Kw 0512 I/O25 ADC11 CapS-8 Comp2 Timer4/1 MSSP1 ECCP1/2 CCP2
v×16F1933 \140 04Kw 0256 I/O25 ADC11 CapS-8 Comp2 Timer4/1 MSSP1 ECCP1/2 CCP2
[20pin] こちらは秋月に無し
-未16F1829 ---- 08Kw 1024 I/O18 ADC12 CapS12 Comp2 Timer4/1 MSSP2 ECCP1/1 CCP2
-未16F1828 ---- 04Kw 0256 I/O18 ADC12 CapS12 Comp2 Timer4/1 MSSP1 ECCP1/1 CCP2
[18pin] 18ピンの割にMSSPが2コ,ADC入力ピン多,タイマーx5,CCPx4と多機能
-未16F1847 ---- 08Kw 1024 I/O16 ADC12 CapS12 Comp2 Timer4/1 MSSP2 ECCP1/1 CCP2
v◎16F1827 \110 04Kw 0384 I/O16 ADC12 CapS12 Comp2 Timer4/1 MSSP2 ECCP1/1 CCP2
-未16F1826 ---- 02Kw 0256 I/O16 ADC12 CapS12 Comp2 Timer2/1 MSSP1 ECCP1/- CCP-
[14pin] 下位のチップしかなく機能的に8ピンとあまり変わらないのは残念
-未16F1825 ---- 08Kw 1024 I/O12 ADC-8 CapS-8 Comp2 Timer4/1 MSSP1 ECCP1/1 CCP2
-未16F1824 ---- 04Kw 0256 I/O12 ADC-8 CapS-8 Comp2 Timer4/1 MSSP1 ECCP1/1 CCP2
v◎16F1823 \090 02Kw 0128 I/O12 ADC-8 CapS-8 Comp2 Timer2/1 MSSP1 ECCP1/0 CCP-
[8pin] 8ピンでUSARTもI2Cも使えるってのは大きいね
-未12F1840 ---- 04Kw 0256 I/O-6 ADC-4 CapS-4 Comp1 Timer2/1 MSSP1 ECCP0/1 CCP-
-◎12F1822 \080 02Kw 0128 I/O-6 ADC-4 CapS-4 Comp1 Timer2/1 MSSP1 ECCP0/1 CCP-
 表記 Timer[8bit]/[16bit],ECCP[Full]/[Half],CspS=CapSense,Comp=Comparator
 共通 EEPROM256byte,EUSART,SRLatch(555相当?),10bitADC,5bitDAC,1.024V基準電圧,温度計(?)
VDD1.8〜5,5V,Max32MHz(Vdd2.5V以上),4xPLL有,内蔵OSCでも32MHz可
プログラム面で新命令追加,bankは32マデ拡張,スタック16レベル,LATが追加,割込時のレジスタ自動保存
16bit幅で2本になったFSRデ連続配置RAMやプログラム領域アクセス可能
追加命令群
ADDWFC,SUBWFB : キャリー,ボローを含んだ加減算
ASRF,LSLF,LSRF : シフト命令
BRA : PCLATHやページ境界に関係なく相対ジャンプ [9bit幅] PC+255〜PC-256へ
BRW : PCLATHやページ境界に関係なく前方へのみ相対ジャンプ PC+W(0〜255) ADDWF PCL,f ヨリ便利
CALLW : 上位はPCLATH,下位はWのアドレスにサブルーチンコール
MOVLB,MOVLP :バンクセレクト,PCLATHに直接定数入れる
TRIS,OPTION :TRIS(A〜C),OPTION_REGにWの値入れる(12bit幅品互換?)
RESET : ソフトウェアリセト
ADDFSR : FSRに定数(-32〜+31)加減算
MOVIW,MOVWI : INDFガツカイヤスク FSRに対して[PRE/POST][+1/-1]や定数(-32〜+31)offset可能

12 :
秋月のPIC12/16F(旧)シリーズ 命令セット14bit幅&DIP品限定ピン数別評価
あくまでも旧シリーズ内での相対評価。新シリーズが使えない場合のみ有効
値下品多数あり(先頭のvは値下げ,-は維持,*は新規)'11/9更新版
40ピンは決まり
v◎16F887 \180 40ピン600mil幅が許せるなら 旧シリーズ最強
28ピンはフラッシュとSRAMの差をどうとるか
v◎16F886 \170 887よりピン数減ってスリム(400mil幅)
v○16F883 \150 886との違い8Kw→4Kw,SRAM368Byte→256Byte
ADC有,eCCP/CCP有,mSSP有,USART有,8Kw,内蔵31K-8MHとフルサポート
新しめのチップで内蔵モジュールも多,大きささえ許せば20,18ピンよりこちらを
20ピンはF690のバリエーション多,価格差小なのでF690か,OPアンプF785,ポート割りがチョットカオス
v◎16F690 \140 ADC有,eCCP有,eUSART有,SSP有,4Kw,内蔵31K-8MHzとバッチリ
v○16F689 \130 F690からeCCP機能削られた
v△16F687 \120 さらにF689を2Kwと半分に
v×16F677 \120 さらにF687からeUSARTも削られた
v×16F685 \150 F690からSSP&eUSART機能が削られたのに値段高いとは
v◎16F785 \130 ADC有,CCP有,2Kw,内蔵31K-8MHz,OPアンプ搭載が異色(新シリーズにも無)
18ピンは種類は多いけど選択の幅は狭い。値段でF716いっそ20pinにするか
-×16F84A \250 機能無,1Kw,新規では不要だけど作例参照用or互換用に
v×16F648A \160 CCP有,USART有,4Kw,内蔵4MHz,ADC無同士でF87に軍配
v△16F628A \140 F648Aの2Kw版,売りが値段だけだと厳しいかな
v△16F627A \120 F648Aの1Kw版,上に同じ
v×16F627 \180 F627Aの改良前Ver,なぜこんな物が・・・
-○16F88 \200 ADC有,CCP有,SSP有,USART有,4Kw,内蔵31K-8MHzと旧18ピンの王者ダガ高い
v○16F87 \150 F88のADC無Ver,ADC無が問題なければ
v○16F819 \170 ADC有,CCP有,SSP有,2Kw,内蔵31K-8MHz,F88とはROM,USARTの差
v○16F818 \150 F819の1Kw版,多機能なだけに1Kwに不安を感じる
v◎16F716 \80 ADC有,eCCP有,2Kw,内蔵CLK無,EEPROM無だけど値段安い,ADC8bit注意
14ピンは10円差ならF688
v◎16F688 \110 ADC有,eUSART有,4Kw,内蔵31K-8MHz,CCPは無が残念
v△16F676 \100 ADC有,1Kw,内蔵4MHz
v×16F630 \100 F676のADC無し 無機能で影薄い
8ピンは多機能のF683かEEPROM無くても良いなら\60のF615
v◎12F683 \100 ADC有,CCP有,2Kw,内蔵31K-8MHz,8ピンとしては多機能
v△12F675 \80/90 ADC有,1Kw,内蔵4MHz ,EEPROM必要なら,環境によってはE/P版,
v△12F629 \70 675のADC無(機能無しってこと),EEPROM必要で安いの求めるなら
v△12F635 \90/100 機能無し,1Kw,内蔵31K-8MHz,31KHz〜必要なら,環境によってはE/P版
v◎12F615 \60 ADC有,eCCP有,1kw,内蔵4Mor8MHz,EEPROM無さえ問題なければ
v×12F609 \60 F615からADC,eCCP機能省かれてる
(参考)機能無,EEPROM無,命令セット12bit幅 プログラム組む上で制限多し(割込無イヨ
v△16F57 \70 28ピン,2Kw,内蔵CLK無,安くて多くのI/O欲しいなら
-△16F54 \60 18ピン,0.5Kw,内蔵CLK無,安いI/O欲しいなら
-×12F510 \60 ADC有(8bit),1kw,内蔵4Mor8MHz,EEPROM無し
v×12F509 \50 機能無し,1Kw,内蔵4M,EEPROM無し
v△10F222 \45 DIP8ピン,1/2Kw,内蔵4Mor8MHz,米粒PICのデバッグ用
v△10F200 \35 DIP8ピン,1/4Kw,内蔵4MHz,米粒PICのデバッグ用
マークの意味
◎お勧め、用途決まっていないならこれ買っとけ
○内蔵モジュール減ってるけど、その分値段も安くなってるから、まあまあ
△内蔵モジュール大幅に減ってる、\10でも安くしたいなら、どうぞ
×ソースを変更できない等の理由がないなら、選択する必要なし
自分で、プラグラムもハードも作れる人のためのリスト。
そもそも、教科書にのってるのとか他の方の作品とかを作るだけなら
指名買いするしかないのだから お勧め度は意味がない

13 :
秋月のPIC18Fシリーズ 5V動作可で比較的高速(12MIPS)だが16F1xxx(8MIPS)
dsPIC30F(30MIPS)に挟まれて値段も高めで苦しい,拠り所はUSB
40ピン USB不要なら18F4525もありかな
◎18F4550 \370 16Kw/2048/256 [USB],Max48MHz(31k-8MHz),PLL,CCP1/1,SPP
△18F4520 \340 16Kw/1536/256 Max40MHz(31k-32MHz),4xPLL,CCP1/1
○18F4525 \380 24Kw/3968/1024 Max40MHz(31k-32MHz),4xPLL,CCP1/1
△18F4585 \500 24Kw/3328/1024 Max40MHz(31k-32MHz),4xPLL,CCP1/1,CAN
×18F452 \500 16Kw/1536/256 Max40MHz(内蔵CLK無し),4xPLL,CCP1/1
28ピン USB不要なら大容量で18F2620あたりも
◎18F2550 \350 16Kw/2048/256 [USB],Max48MHz(31k-8MHz),PLL,CCP2/0
△18F2455 \340 12Kw/2048/256 [USB],Max48MHz(31k-8MHz),PLL,CCP2/0
○18F2450 \260 8Kw/768/0 [USB],Max48MHz(31kHz),PLL,CCP1/0,eUSART,MSSP無,TMR16bitx2少
△18F2420 \280 8Kw/768/256 Max40MHz(31k-32MHz),4xPLL,CCP2/0
×18F2320 \420 4Kw/512/256 Max40MHz(31k-8MHz),4xPLL,CCP2/0
○18F2620 \420 32Kw/3968/1024 Max40MHz(31k-32MHz),4xPLL,CCP2/0
×18F258 \530 16Kw/1536/256 Max40MHz(内蔵CLK無し),4xPLL,CCP1/0,CAN
20ピン 値段的にも格安でお得
◎18F14K50 \170 8Kw/768/256 [USB],Max48MHz(31k〜32MHz),4xPLL,CCP0/1
18ピン 2ピン差だと体積的にメリット小
×18F1320 \220 4Kw/256/256 Max40MHz(31k〜8MHz),4xPLL,CCP0/1
PIC18F共通 VDD 〜5.5V,10bitADC,eUSART,TMR8bitx1/16bitx3,MSSP
24,dsPICシリーズ(24F,dsPICは品数限られているが値下げでお買い得感向上)
40ピン
v○30F4013 \480 16kw 2KB EEPROM1KB
v×30F3014 \500 8kw 2KB EEPROM1KB
28ピン
v◎24FJ64GA002 \330 21.3kw(64kB) 8KB EEPROM無 リビジョンはイクツカナA3/4ハナイヨナ
v◎24HJ12GP202 \260 4kw 1KB EEPROM無 この値段で40MIPSはお得感大きい
v○30F4012 \460 16kw 2KB EEPROM1KB 5V動作必須でメモリ大きいのなら
v×30F2020 \500 12kw 0.5KB EEPROM無
v△30F2012 \350 4kw 1KB EEPROM無 5V動作必須で安いの欲しいなら
v◎33FJ32GP202 \320 11kw弱(32kB) RAM2KB メモリサイズ許容できれば24FJ64より、高速
18ピン
v○30F3012 \400 8kw 2KB EEPROM1KB
共通
24Fシリーズ Vdd2.0-3.6V Max16MIPS (一部ピン5V入力可)
24Hシリーズ Vdd3.0-3.6V Max40MIPS
30Fシリーズ Vdd2.5-5.5V Max30MIPS DSP命令有,(5V動作可)
33Fシリーズ Vdd3.0-3.6V Max40MIPS DSP命令有

14 :
天ぷら乙
もう16f877は時代遅れ感があるな・・・
VBも.netになって以降ついてけなくなって頑なに6使ってるし
こうやって時代に取り残されていくのだろうか・・・・
まだ20才です

15 :
で、前スレ993は、 KiB わかったのか?
恥ずかしくてもう来ないか?w

16 :
自分が知ってるものが全てで、知らないものは調べもせず否定するのはワロタ
新しい概念に付いていけない人なんだろうね

17 :
SPIバス(Master mode)を利用したいと考えています。
下記の設定でSPI1BUFにデータを書き込んでも、
データ送受信が発生しない問題で行き詰ってます。
大変恐縮ですが、アドバイスを頂けたらと思います。
【デバイス/開発環境】
@dsPIC33FJ32GP202
AMPLAB v8.73
B開発言語 C言語(MPLAB C30 コンパイラ)
【現象】
@下記の設定では、SCK1OUTピンがRB14に割当てられ、
 SPIバスがIdle modeでHレベルを出すのが期待される。
 しかし、オシロスコープで観測すると、High-Zに
 なっている模様。何もしないとLレベルでフラフラ
 してるが、10kΩ抵抗でプルアップすると電源レベルに張り付く。
ASPI1BUFに値を代入すると、SPI1STATレジスタのSPITBFビット
がセットされるが、一向に解除されない。送信イベント
(SCK1OUTでのバーストクロック)が発生しない。
BdsPIC33Fから導入されたPeripherarl Pin Selectの問題が
 疑わしいが、 同様の設定コードでUARTのTx/Rxピンの割当を行い、
 問題なく通信ができている。

18 :
【SPIバス関連のSFR設定】
__builtin_write_OSCCONL(OSCCON & ~(1<<6)); // unlock sequence
RPINR20bits.SDI1R = 8; //SDI pin is mapped to RP8(=>RB8)
RPOR7bits.RP14R = 0b01000; //SCK1OUT pin is mapped to RP14(=>RB14)
RPOR7bits.RP15R = 0b00111; //SDO1 pin is mapped to RP15(=>RB15)
__builtin_write_OSCCONL(OSCCON | (1<<6)); //lock
IFS0bits.SPI1IF = 0; // Clear the Interrupt Flag
IEC0bits.SPI1IE = 0; // Disable the Interrup
//Configuration for SPIxSTAT, SPIxCON
SPI1STATbits.SPIEN = 1; //1 = Enables module
SPI1STATbits.SPISIDL = 0; //0 = Continue module operation in Idle mode
SPI1STATbits.SPIROV = 0; //0 = Clear Overflow bit.

19 :
(つづき)
SPI1CON1bits.MSTEN = 1; //1 = Master mode
SPI1CON1bits.DISSCK = 0; //0 = Internal SPI clock is enabled
SPI1CON1bits.DISSDO = 0; //0 = SDOx pin is controlled by the module
SPI1CON1bits.MODE16 = 1; //1 = Communication is word-wide (16 bits)
SPI1CON1bits.SMP = 0; //0 = Input data sampled at middle of data output time
SPI1CON1bits.CKE = 1; //1 = Serial output data changes on transition
// from active clock state to Idle clock state
SPI1CON1bits.SSEN = 0; //0 = /SSx pin not used by module. Pin controlled by port function
SPI1CON1bits.CKP = 1; //1 = Idle state for clock is a high level; active state is a low level
SPI1CON1bits.SPRE = 0b110; //110 = Secondary prescale 2:1
SPI1CON1bits.PPRE = 0b01; //01 = Primary prescale 16:1
//SCK frequency 1.25MHz(40MHz/32)
SPI1CON2bits.FRMEN = 0; //0 = Framed SPIx support disabled
断片的な情報しか書ききれませんでしたが、
何かお気付きの方がいらっしゃいましたら、
ご助言を頂けると幸いです。

20 :
前スレ>993のキビタンの反論が、いつ来るか楽しみでならないww
でもやっぱ、逃げかな?

21 :
LastRcv

BANKSEL SSP1BUF
MOVLW 0

MOVWF SSP1BUF
BCF PIR1, SSP1IF ;割り込みフラグクリア
  BANKSEL SSP1CON2
  BSF SSP1CON2, RCEN ;受信許可
  BANKSEL PIR1
     BTFSS PIR1, SSP1IF ;受信完了?
     GOTO $-1
BCF PIR1, SSP1IF ;割り込みフラグクリア
BANKSEL SSP1CON2
BSF SSP1CON2, ACKDT ;NOACKにセット
BSF SSP1CON2, ACKEN
BANKSEL PIR1
BTFSS PIR1, SSP1IF ;NOACK送信完了?
GOTO $-1
BCF PIR1, SSP1IF ;割り込みフラグクリア
BANKSEL SSP1BUF
MOVF SSP1BUF, W ;データ取得
RETURN
電子工作の為のPIC16F活用ガイドのI2Cの使い方のリストを手直ししたのが上のリストです。
I2CでEEPROMからデータを1バイト受け取るサブルーチンです。
当初、受信データが格納されるSSP1BUFに毎回FFが代入されていました。
EEPROMの内容は何度も確認しましたがFFでは無かったので、
試しに受信する前に一度SSP1BUFに0を代入させてみました。
そうすると、案の定データ受信後にSSP1BUFを確認すると毎回0でした。
ここに至ってSSP1BUFに受信データが格納されていない事が判りました。
で、それが何故なのかがわかりません。
このリストで何か判る事はないでしょうか?
よろしくお願いいたします。

22 :
>>17
IOL1WAY コンフィグレーション ビット(FOSC<5>) は?

23 :
>>21
その前に行っておかなければならない Repeated Start Condition や
リードビット付きアドレスの送信はやってあるの?

24 :
PIC16F688のAD変換について教えてください。
調べてみると、変換した値はADRESH、ADRESLに出力される
となっていました。
これは、ADRESH、ADRESLには同じ値が格納されるのでしょうか?
それとも、変換の結果によって、格納される値は違うのでしょうか?

25 :
例えば10bitデータなら
ADRESH ADRESL の順に
12345678 9A****** (左詰め)か
******12 3456789A (右詰め)と格納されます

26 :
>>24
もう1歩だね。
レジスタ名が、ADRESH、ADRESLと異なる名前になっていて、しかも
末尾だけHとLの違いなのだから、上と下、上位、下位と発想したい。
省略語のフルスペルが、どういう意味かを常に考えてマニュアルを読むといいよ。
AD RESult High = AD変換結果 上位側
AD RESult Low = AD変換結果 下位側
Resultは、結果という英語。
BOR = Brown Out Reset とか。

27 :
>>23
はいPICkit3でブレークポイントをつけながら確認しています。

28 :
すみません。よく確認しましたからACKが返って来ないのが原因でした。
Send

BANKSEL PIR1
BCF PIR1, SSP1IF ;割り込みフラグクリア
BANKSEL SSP1BUF
MOVWF SSP1BUF ;送信
BANKSEL PIR1
BTFSS PIR1, SSP1IF ;送信完了か?
GOTO $-1
MOVLW 0
BANKSEL SSP1CON2
BTFSC SSP1CON2, ACKSTAT ;ACK検出か?
MOVLW 0FEH ;エラー
RETURN
そもそも受信以前に最初のコントロールバイトの送信時点でACKが返っていませんでした。
このACKが返らないという事ですが、
1 一定の時間待ってもACKが来なかった
2 NOACK等の応答があった。(そもそもNOACKとはどんな波形の信号なのか?)
という疑問があります。
1 の一定の時間待ってもACKが来ない場合、通信相手のEEPROMが正しく動作しているのか?
というところから確認する必要がありそうですし
2 ならとりあえず、通信相手と意思の疎通は図れているという事になります。
まずはこのどちらかなのか切り分けしたいのです。
書籍によりますと、PIR1レジスタの SSP1IFがセットされる要因として、
データ送信後のACK受信完了とありますので、これが正しいなら何故に送信完了後に
BTFSC SSP1CON2, ACKSTAT
としてACKを確認しているのか?ならばACKかNOACKかを確認しているのか?
このあたりの事どなたか解説願えないでしょうか?
よろしくお願いいたします。

29 :
>>27
SSP1BUF に書くと送信するはずだけど?
SSP1BUF には、直前のアドレスが入っているはずなのに、
0xff が入っているのは受信できているのでは?
SSPSTAT,BF や SSPCON,SSPOV は確認してる?

30 :
>>28
SSPでI2Cやったことないから一般的なことしか言えないけど、
I2Cは1バイトの8ビット送信後、9ビット目がACKだ。
NOACKを返すなんてのはなくて、9ビット目にACKを返さなかったらNOACKだ。
で、9クロック分の転送作業が終了したらSSP1IFが立つ。
ACKSTATは、その9ビット目が1だったか0だったかを示している。

31 :
>>28
>1 一定の時間待ってもACKが来なかった
データのタイミングは、マスタが出すクロックが基本です。
スレーブは、時間稼ぎのためにクロックをロウに引っぱることができます。
データやクロックはプルアップされているだけなので、
マスタやスレーブはロウに引っぱることだけができます。
ロウに引っぱったままのデバイスがバス上に存在するとバスは使えなくなります。
>2 NOACK等の応答があった。(そもそもNOACKとはどんな波形の信号なのか?)
データのやりとりは、9ビット単位で行われます。
送信側からデータが8ビット送信され、受信側から9ビット目がACKとして送信されます。
ACKは、データを受信したことを表し、データをロウに引っぱるだけです。
アドレスの送信でACKが返ってこなかったら、そのアドレスのデバイスが存在しなかったということになります。
SSP1IF だけでは、何が起こったのかはっきりしたことはわかりません。
BCLIF というのもありますね。
このモジュールでは、時間がかかることは、1度に1つのことしかできません。
次のようなチェックを推奨しています。
movf SSPCON2,w ;
andlw 01fh ;Checks SEN,PEN,RSEN,RCEN,ACKEN
;
btfss STATUS,Z ;
retlw I2CMBusNotIdle ;Indicates Bus is not Idle
;
bsf STATUS,RP0 ;
btfsc SSPSTAT,R_W ;Checks transmission in progress
retlw I2CMBusNotIdle ;Indicates Bus is not Idle
;
retlw 000h ;Indicates Bus is Idle

32 :
>>29-31
ありがとうございます。
>I2Cは1バイトの8ビット送信後、9ビット目がACKだ。
>NOACKを返すなんてのはなくて、9ビット目にACKを返さなかったらNOACKだ。
>ACKは、データを受信したことを表し、データをロウに引っぱるだけです。
>アドレスの送信でACKが返ってこなかったら、そのアドレスのデバイスが存在しなかったということになります。
ACKはロウなんですね。
慣れないオシロですが、波形も確認できました。
9ビット目のクロック時データ線はオンのままです。
EEPROMのアドレスの設定が間違っているのかも知れません。
もう少し確認してみます。

33 :
microchip社のEEPROM 24FC1025のアドレスピンA0A1A2ピンをデータシートにしたがってVCCとグランドに繋ぐ。
EEPROM側のアドレス設定はコレだけのはず。
試しにA0とA1のピンを様々に繋ぎ変えてみるも変化無し。
やけくそでEEPROMを取り外してみる。
なんと変化無し。PICから繰り返し信号を送るもなしのつぶてとはこの事か・・・
もうどうして良いものやら・・・・・

34 :
>>33
日本語の仕様書があるからI2C使うならこのくらい読んどけよ。
http://www.nxp.com/acrobat_download/literature/9398/39340011_jp.pdf

35 :
>>33
少し休んで落ち着いてから作業しましょう。
まず、配線が正しいか再確認します。
クロックが 400 kHz や 1 MHz ならプルアップ抵抗に 2 kΩ を使っているかとか、
A0 と A1 は GND、A2 は Vcc につながっているかも。
アドレスは、0xA0 か。
ボーレートが速すぎたりしていないか。
オシロがあるのですから、データシートのタイミングから外れていないかも確認できますね。
EEPROM の内容を別の装置で確認する。

36 :
>>35
ありがとうございます。ゆっくりやってみます。

37 :
>>22
レスありがとうございます。
>IOL1WAY コンフィグレーション ビット(FOSC<5>) は?
Cプログラムの冒頭で下記のように設定しております。
////コンフィギュレーション
_FBS(BWRP_WRPROTECT_OFF);
_FGS( GWRP_OFF & GCP_OFF);
_FOSCSEL( FNOSC_PRIPLL & IESO_ON);
_FOSC(POSCMD_EC & OSCIOFNC_OFF & IOL1WAY_OFF & FCKSM_CSDCMD);
_FWDT(FWDTEN_OFF );
_FPOR(FPWRT_PWR1);
_FICD(ICS_PGD2 & JTAGEN_OFF);
上記の設定では、IOL1WAYビット(FOSC<5>)は0になっており、
Allow Multiple Re-configurationsとしております。
引き続きデバッグ中を行っております。
デバイスを交換しても、同じが現象が発生するので、
プログラム上の問題かと思っているのですが、
原因が絞りきれていない状況です。

38 :
スレチだとは思うけどここの人なら知ってそうだから投下
ノートパソコンの液晶の仕様書って出回ってたりする?
壊れたノートパソコンをなにかしら再利用したいんだが・・・

39 :
ノートの液晶は素直な信号線だからオシロで眺めればすぐにわかる。

40 :
LVDSだから気をつけてね

41 :
25・26さんありがとうございます。
勉強になりました。

42 :
>>37
ADC の設定を忘れているとかないよね?

43 :
>>36
ICソケットの接触不良やイモ半田とかいろいろあるからね。
ICソケットはテスタが当てやすいものを使っているかい?

44 :
>>36
接触不良をテスタで調べるとき、テスタ当てたおかげで接触不良が解消する場合もあるから、ご注意を

45 :
>>42
レスありがとうございます。
>ADC の設定を忘れているとかないよね?
dsPIC33FJ32GP202の場合、SPIバスに割当ててるRB14(SCK1OUT), RB15(SDO1)は
アナログピンAN9,AN10と共用しております。
そのため、アナログピンをディスエーブルに設定するため、下記の設定を
行っております。
恐らく、Peripheral Pinとして利用する場合は,
TRISBの設定は無効と思われますが、念のため設定しております。
TRISA = 0x0000; //All pin of Poart-A is set to be output mode.
TRISB = 0x0000; //All pin of Poart-B is set to be output mode.
ODCA = 0x0000;
ODCB = 0x0000;
AD1PCFGL = 0x1fff; //1 = Port pin in Digital mode, port read input enabled,


46 :
dsPIC33Fでメモリ->UART間DMA転送をやりたいのですが、キャラクター間のガードタイムは設定できるのでしょうか。
データシートを見ても解りませんでしたので...

47 :
>>46
DMAはCPUを介さずにハードウェアが出せる最高速度でメモリ間のデータ転送をする
ためのものだからUARTのような低速なものにウェイトをいれながら使うというのが
意味があるのか、できるのか、

48 :
…で終わる文章を書くやつは無視するのが俺のやり方

49 :
>>47
別にバースト転送だけじゃないだろ、
I/OやUART向けのDMAを備えたCPUもあるよ

50 :
>>49
DMAC は、データ転送をするだけだよ。
例えば、ADC では、AD 変換の間隔は ADC 側が決定するよね。
同じように、UART にガードタイムを入れるなら UART にその機能が必要だと思うよ。

51 :
>>45
PMD レジスタは?

52 :
>>50
視野狭いねぇ

53 :
>>52
それで >>46 の希望する機能を持った DMAC 付きのマイコンはないの?

54 :
FPGAやってるとそんな用途なら転送レート制限付きのDMAC書いちゃえってなるから困るw

55 :
あらら。46ですが、UARTガードタイム設定てぎるのは、AVR32系とSAM系でできました。
各位殿、ありがとうございました。
一応、所望の動作ができました。 以上。

56 :
手持ちのマイコンにもDMAがついてるのがいくつかあるけど、その機能を使う機会が
今のところない。(またはあっても見逃しているのか?)
どんなアプリケーションなら「DMAを使おうか」となるのかな。

57 :
>>53
単なる情弱を支援する気はありません。

58 :
>>56
シリアル通信の送信とDMAを組み合わせると便利。
ただ、フロー制御で停止させるのは面倒。

59 :
シリアル通信自体を最近は使うことはあまりないけど、送信するときは8バイトとか16バイト
とかの配列を使って送信データをまとめてコピーしてあとはインデックス情報をもとに送信バッファ
エンプティ割込みで自動送信、そしてメインルーチンで他の処理を並行してやるって感じで使ってるな。
だから今までシリアル通信ではDMAを使うという発想がなかった。

60 :
DMA使う程の転送
マイコンが扱うデバイスの癖に転送速度が追いつかないケースとかか?
でもそれならFPGAなんて高級品もいらないなCPLD程度でもかませば良い訳だし
特化した機能は出番減ったな

61 :
busy-waitで回すにはIOが遅すぎ、割込みで待つにはそのIOは速すぎる、
というクラスのIOでDMAを使うがな。
1MspsのADCとかデータ待ちにusオーダーかかるLCDとか、ほとんどこのクラスだが
使ったことないならそれはそれでいいんでね?

62 :
>>45
関係ないと思うけど、
PMD レジスタの ADxMD ビットをセットした後にクリアすると、
ADC モジュールレジスタは既定値状態にリセットされるそうです。
AD1PCFGL レジスタもその影響下にあるそうです。
ADxMD ビットをセットしたままなら問題ありません。

63 :
>>60
>特化した機能は出番減ったな
それは自分が使いこなせて無いだけ。
特化するって事はピンポイントで大きな需要があるからだし、遊びで機能が追加されてる訳じゃない。

64 :
>>63
使う必要もないものを使いこなせといわれてもね。
「ピンポイントで大きな需要」なんだろ。

65 :
QVGA以上の高精細液晶への表示で1画面文のデータを一度RAM上に作って最後にまとめて
液晶にデータ転送なんて事例でDMA使うってことがあるかな。

66 :
事例としては効果が少ないかと思われ。何かの作業中にDMAが利用できる事の方が効果が大きい。
VRAMを2面用意して、一方を転送中に他方を編集。で、適度に切り替える。そんな感じ。

67 :
ご教授願います。
MPLAB IDE v8.76と、HI-TECC C PRO Liteを使用して、某参考書を元に
マイコンの勉強をしています。
プログラムをビルドした際、以下のエラーが表示されました。
undefined identifier "GODONE"
調べてみるとGODONEの識別子が宣言されていないというエラーのようなのですが、
他(OSCCONやTRISA)はエラーにならないのに、なぜGODONEだけエラーになるのでしょうか?
htc.hを宣言すれば問題ないはずなのですが?

68 :
>>67
試しに、ソースの先頭に「 #define _LEGACY_HEADERS 」を1行加えてみて。。

69 :
追記、htc.hをインクルードするより前ね。複数ファイルがあるのであれば、各ファイルの先頭に。
一括指定の方法もあるけど、とりあえず。

70 :
>>68
#define _LEGACY_HEADERS で無事ビルドできました。
ありがとうございます。
できれば#define _LEGACY_HEADERS について教えて頂けるとありがたいのですが?

71 :
コンパイラのリリースノートに書いてあるので、そちらをどぞ。doc/readme.txt
コンパイラのアップに伴いシンボル名が変更になった。けど、昔のソースを通す為
ヘッダファイルのフォルダの下に昔の名前のヘッダも用意してます。それを選択さ
せるのが、LEGACY〜だよ。という感じで。
今回はソースに埋め込んだけど、プロジェクト、ビルドオプションの設定のコンパ
イラの項でdefine macrosに指定(値不要)すれば一括指定も可能。

72 :
>>71
ご説明ありがとうございます。
シンボル名が変更になっている場合もあるんですね・・・
readme.txtも目を通しておきます。

73 :
>>51
>>62
返事が遅くなり申し訳ありません。
ご指摘ありがとうございました。
本日、やっと纏まった時間が取れそうなので
SPIバスの件のデバッグを再開します。
>PMD レジスタは?
>PMD レジスタの ADxMD ビットをセットした後にクリアすると、
>ADC モジュールレジスタは既定値状態にリセットされるそうです。
>AD1PCFGL レジスタもその影響下にあるそうです。
>ADxMD ビットをセットしたままなら問題ありません。
上記の件を確認し、早期に解決できればと思っております。

74 :
PIC12F510について教えてください。
これには、データEEPROMが内蔵されていないのですが、
代わりにプログラムメモリを、プログラム実行中に書き換えることは可能ですか?

75 :
>>74
自分で自分のプログラムメモリを書き換えることはスペック的に無理だと思います

76 :
>>75
ありがとうございました。
データEEPROM内蔵品を検討します。

77 :
16f193Xの40pinはPin Diagram上ではCCP1〜5まであるのに、CCPは2個しかないとあるのはどういうことなんですか?
(CCPを使った)PWMでモータを4個ほど制御したいんですが無理ですかね?

78 :
eccp:3個
ccp:2個
と、データーシートに書いてある

79 :
>>78
ありがとうございます
eccpでしたか・・・データシートよく読むようにします・・・

80 :
SPI BUSの問題の件、解決しました。
SPIxSTAT, SPIxCON1, SPIxCON2の設定順序に問題があったようです。
PPSが原因だと疑ってたのが、却ってデバッグの見通しを悪くしていました。
【NG】
SPIxSTATレジスタのSPIENビットをセットしてから、
SPIxCON1, SPIxCON2レジスタを設定する
【OK】
SPIxCON1, SPIxCON2レジスタを設定してから、
SPIxSTATレジスタのSPIENビットをセットする
レジスタの設定をベタ書せず、素直にC30の
SPIモジュール初期化ルーチンを使用すれば丸3日無駄
にせず済んだかもしれませんね。
// C30 SPI module 初期化ルーチン(以下、参考)
void OpenSPI1(unsigned int config1,unsigned int config2,unsigned int config3)
{
SPI1CON1 = config1; /* Initalizes the spi module */
SPI1CON2 = config2;
SPI1STAT = config3; /* Enable/Disable the spi module */
}
上記のルーチンでは確かにSPI1STATの設定を最後に行なっている。

81 :
hi-tech Cとその他のコンパイラの仕様の違い(割り込み処理時の割り込み禁止は自動か手動か、みたいな奴)がまとまって載ってるサイトとか無いですかね?
データシートがギリギリ読めるような英語力しかないので、出来れば日本語が良いんですが・・・。

82 :
アセンブラの出力見れば何やってるか判るでしょ

83 :
>>82
わかんない

84 :
読んでいる参考書のAD変換の参考プログラムに、
temp=(ADRESH*256)+ADRESL;
とあるのですが、どうしてADRESHを256倍するのでしょうか?
(変換データの格納は右詰です)

85 :
>>84
8bitシフト

86 :
あなたは銅貨をH枚、アルミ貨をL枚持っています。
あなたの財産はおいくら?
→ temp = H*10 + L;
と同様

87 :
ADRESH は、8bitのレジスタ
ADRESL は、8bitのレジスタ
temp は、16bitの変数 のとき
tempの16bitの中にセットするとき、
15・・・・・・・・・・87・・・・・・・・・・・0
ADRESH(上8ビット)ADRESL(下8ビット)
のようにADRESHを(上8bit)に置くため。

88 :
浮動小数点計算でADRESLを256分の位置にしても結果は同じだな
tempを出力するときに全体を256倍にしないとだめだけど。
なーんて面倒なことはしないだろ?

89 :
>256分の位置
実は単に間違えたんだが、何となく意味がわかるから恐ろしい。

90 :
LM35DZの出力をPIC16F688でAD変換するのですが、
具体的にどのような値がADRESHとADRESLに格納されるのかがわかりません。
出力が○mVの時、ADRESHとADRESLにはどんな値が格納されるのかを
まとめているシートなんかはありませんかね?

91 :
つ「データーシート」

92 :
>>90
アナログ入力に可変抵抗でもつなげて、
電圧を変化させた時にレジスタの値がどう変化するのか、実験してみればいいじゃない。
大した手間じゃないでしょう。

93 :
ADC最初の一歩だよな
10KをVddVssで挟んで出力をANに入力
そして結果が合わなくて悩むw

94 :
Vrefが変な設定になってた、でもなきゃ最初から期待通りの値出るだろw

95 :
PIC16Fで簡単でおもしろいものを作りたいのですがおすすめのモノを教えてくださいおねがいします神様

96 :
PICライター

97 :
>>93
>10KをVddVssで挟んで出力をANに入力
  → 可変抵抗の10Kを、Vdd-Vssにつないで、出力をANに入力、な。

98 :
>95
まずラジペンで足を曲げて犬の様な形を作る。
4本脚はもちろん、頭や尾をそれらしく作るのが肝。
次に白いペンキを用意し、

99 :
>>95
7segとスイッチで作る迷路ゲーム。
進みたい方向のボタンを押すと、「進んだ」「行き止まり」だけ答えが返る。
頭の中に地図を描きながらだから、結構遊べる。
ゴールしたらラップタイムを表示してお終い。
(というゲームを、関数電卓で作って遊んでたのは俺だ)

100read 1read
1read 100read
TOP カテ一覧 スレ一覧