3set
4 :
774ワット発電中さん :2011/08/26(金) 11:56:53.44 ID:14Mfk5or
あれ?なくなってる
5 :
774ワット発電中さん :2011/09/03(土) 03:52:51.18 ID:iCHuIoyV
そろそろ危ない?保守あげ 誰だよ?重複した奴は?w
6 :
774ワット発電中さん :2011/09/07(水) 11:28:47.64 ID:cHV56OY3
PICは面白いぜwww
ピクニックピクニックランランラン♪
8 :
774ワット発電中さん :2011/09/12(月) 21:23:12.70 ID:S1Pa3XPC
貧乏な俺には持って来いの趣味だよ
ぴっ苦
10 :
774ワット発電中さん :2011/09/23(金) 01:18:04.74 ID:t1gpQFOi
10げっち
[新シリーズの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可能
秋月の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でも安くしたいなら、どうぞ ×ソースを変更できない等の理由がないなら、選択する必要なし 自分で、プラグラムもハードも作れる人のためのリスト。 そもそも、教科書にのってるのとか他の方の作品とかを作るだけなら 指名買いするしかないのだから お勧め度は意味がない
秋月の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命令有
天ぷら乙 もう16f877は時代遅れ感があるな・・・ VBも.netになって以降ついてけなくなって頑なに6使ってるし こうやって時代に取り残されていくのだろうか・・・・ まだ20才です
15 :
前スレ990 :2011/09/24(土) 15:03:40.11 ID:yvnsC6cq
で、前スレ993は、 KiB わかったのか? 恥ずかしくてもう来ないか?w
自分が知ってるものが全てで、知らないものは調べもせず否定するのはワロタ 新しい概念に付いていけない人なんだろうね
17 :
774ワット発電中さん :2011/09/24(土) 15:55:14.15 ID:XPXUMOEM
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 :
774ワット発電中さん :2011/09/24(土) 15:58:29.64 ID:XPXUMOEM
【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 :
774ワット発電中さん :2011/09/24(土) 15:59:56.22 ID:XPXUMOEM
(つづき) 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 断片的な情報しか書ききれませんでしたが、 何かお気付きの方がいらっしゃいましたら、 ご助言を頂けると幸いです。
前スレ>993のキビタンの反論が、いつ来るか楽しみでならないww でもやっぱ、逃げかな?
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に受信データが格納されていない事が判りました。 で、それが何故なのかがわかりません。 このリストで何か判る事はないでしょうか? よろしくお願いいたします。
>>17 IOL1WAY コンフィグレーション ビット(FOSC<5>) は?
>>21 その前に行っておかなければならない Repeated Start Condition や
リードビット付きアドレスの送信はやってあるの?
24 :
774ワット発電中さん :2011/09/25(日) 22:01:57.53 ID:hQCkwEJg
PIC16F688のAD変換について教えてください。 調べてみると、変換した値はADRESH、ADRESLに出力される となっていました。 これは、ADRESH、ADRESLには同じ値が格納されるのでしょうか? それとも、変換の結果によって、格納される値は違うのでしょうか?
25 :
774ワット発電中さん :2011/09/25(日) 22:33:41.90 ID:FQ1TKLhw
例えば10bitデータなら ADRESH ADRESL の順に 12345678 9A****** (左詰め)か ******12 3456789A (右詰め)と格納されます
>>24 もう1歩だね。
レジスタ名が、ADRESH、ADRESLと異なる名前になっていて、しかも
末尾だけHとLの違いなのだから、上と下、上位、下位と発想したい。
省略語のフルスペルが、どういう意味かを常に考えてマニュアルを読むといいよ。
AD RESult High = AD変換結果 上位側
AD RESult Low = AD変換結果 下位側
Resultは、結果という英語。
BOR = Brown Out Reset とか。
>>23 はいPICkit3でブレークポイントをつけながら確認しています。
28 :
21 :2011/09/26(月) 09:32:27.93 ID:9cxAQNRg
すみません。よく確認しましたから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かを確認しているのか? このあたりの事どなたか解説願えないでしょうか? よろしくお願いいたします。
>>27 SSP1BUF に書くと送信するはずだけど?
SSP1BUF には、直前のアドレスが入っているはずなのに、
0xff が入っているのは受信できているのでは?
SSPSTAT,BF や SSPCON,SSPOV は確認してる?
>>28 SSPでI2Cやったことないから一般的なことしか言えないけど、
I2Cは1バイトの8ビット送信後、9ビット目がACKだ。
NOACKを返すなんてのはなくて、9ビット目にACKを返さなかったらNOACKだ。
で、9クロック分の転送作業が終了したらSSP1IFが立つ。
ACKSTATは、その9ビット目が1だったか0だったかを示している。
>>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 :
21 :2011/09/26(月) 14:05:16.20 ID:9cxAQNRg
>>29-31 ありがとうございます。
>I2Cは1バイトの8ビット送信後、9ビット目がACKだ。
>NOACKを返すなんてのはなくて、9ビット目にACKを返さなかったらNOACKだ。
>ACKは、データを受信したことを表し、データをロウに引っぱるだけです。
>アドレスの送信でACKが返ってこなかったら、そのアドレスのデバイスが存在しなかったということになります。
ACKはロウなんですね。
慣れないオシロですが、波形も確認できました。
9ビット目のクロック時データ線はオンのままです。
EEPROMのアドレスの設定が間違っているのかも知れません。
もう少し確認してみます。
33 :
32 :2011/09/26(月) 16:08:59.09 ID:9cxAQNRg
microchip社のEEPROM 24FC1025のアドレスピンA0A1A2ピンをデータシートにしたがってVCCとグランドに繋ぐ。 EEPROM側のアドレス設定はコレだけのはず。 試しにA0とA1のピンを様々に繋ぎ変えてみるも変化無し。 やけくそでEEPROMを取り外してみる。 なんと変化無し。PICから繰り返し信号を送るもなしのつぶてとはこの事か・・・ もうどうして良いものやら・・・・・
>>33 少し休んで落ち着いてから作業しましょう。
まず、配線が正しいか再確認します。
クロックが 400 kHz や 1 MHz ならプルアップ抵抗に 2 kΩ を使っているかとか、
A0 と A1 は GND、A2 は Vcc につながっているかも。
アドレスは、0xA0 か。
ボーレートが速すぎたりしていないか。
オシロがあるのですから、データシートのタイミングから外れていないかも確認できますね。
EEPROM の内容を別の装置で確認する。
36 :
32 :2011/09/26(月) 18:46:54.00 ID:9cxAQNRg
>>35 ありがとうございます。ゆっくりやってみます。
>>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としております。
引き続きデバッグ中を行っております。
デバイスを交換しても、同じが現象が発生するので、
プログラム上の問題かと思っているのですが、
原因が絞りきれていない状況です。
スレチだとは思うけどここの人なら知ってそうだから投下 ノートパソコンの液晶の仕様書って出回ってたりする? 壊れたノートパソコンをなにかしら再利用したいんだが・・・
ノートの液晶は素直な信号線だからオシロで眺めればすぐにわかる。
LVDSだから気をつけてね
41 :
24です :2011/09/26(月) 21:27:52.89 ID:xZwKnsP7
25・26さんありがとうございます。 勉強になりました。
>>37 ADC の設定を忘れているとかないよね?
>>36 ICソケットの接触不良やイモ半田とかいろいろあるからね。
ICソケットはテスタが当てやすいものを使っているかい?
>>36 接触不良をテスタで調べるとき、テスタ当てたおかげで接触不良が解消する場合もあるから、ご注意を
>>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,
…
dsPIC33Fでメモリ->UART間DMA転送をやりたいのですが、キャラクター間のガードタイムは設定できるのでしょうか。 データシートを見ても解りませんでしたので...
47 :
774ワット発電中さん :2011/09/27(火) 11:56:24.63 ID:mQg8sBHg
>>46 DMAはCPUを介さずにハードウェアが出せる最高速度でメモリ間のデータ転送をする
ためのものだからUARTのような低速なものにウェイトをいれながら使うというのが
意味があるのか、できるのか、
…で終わる文章を書くやつは無視するのが俺のやり方
>>47 別にバースト転送だけじゃないだろ、
I/OやUART向けのDMAを備えたCPUもあるよ
>>49 DMAC は、データ転送をするだけだよ。
例えば、ADC では、AD 変換の間隔は ADC 側が決定するよね。
同じように、UART にガードタイムを入れるなら UART にその機能が必要だと思うよ。
>>52 それで
>>46 の希望する機能を持った DMAC 付きのマイコンはないの?
FPGAやってるとそんな用途なら転送レート制限付きのDMAC書いちゃえってなるから困るw
あらら。46ですが、UARTガードタイム設定てぎるのは、AVR32系とSAM系でできました。 各位殿、ありがとうございました。 一応、所望の動作ができました。 以上。
56 :
774ワット発電中さん :2011/09/28(水) 21:26:35.11 ID:5UiS+sAt
手持ちのマイコンにもDMAがついてるのがいくつかあるけど、その機能を使う機会が 今のところない。(またはあっても見逃しているのか?) どんなアプリケーションなら「DMAを使おうか」となるのかな。
>>56 シリアル通信の送信とDMAを組み合わせると便利。
ただ、フロー制御で停止させるのは面倒。
59 :
774ワット発電中さん :2011/09/28(水) 22:13:07.15 ID:5UiS+sAt
シリアル通信自体を最近は使うことはあまりないけど、送信するときは8バイトとか16バイト とかの配列を使って送信データをまとめてコピーしてあとはインデックス情報をもとに送信バッファ エンプティ割込みで自動送信、そしてメインルーチンで他の処理を並行してやるって感じで使ってるな。 だから今までシリアル通信ではDMAを使うという発想がなかった。
DMA使う程の転送 マイコンが扱うデバイスの癖に転送速度が追いつかないケースとかか? でもそれならFPGAなんて高級品もいらないなCPLD程度でもかませば良い訳だし 特化した機能は出番減ったな
busy-waitで回すにはIOが遅すぎ、割込みで待つにはそのIOは速すぎる、 というクラスのIOでDMAを使うがな。 1MspsのADCとかデータ待ちにusオーダーかかるLCDとか、ほとんどこのクラスだが 使ったことないならそれはそれでいいんでね?
>>45 関係ないと思うけど、
PMD レジスタの ADxMD ビットをセットした後にクリアすると、
ADC モジュールレジスタは既定値状態にリセットされるそうです。
AD1PCFGL レジスタもその影響下にあるそうです。
ADxMD ビットをセットしたままなら問題ありません。
>>60 >特化した機能は出番減ったな
それは自分が使いこなせて無いだけ。
特化するって事はピンポイントで大きな需要があるからだし、遊びで機能が追加されてる訳じゃない。
>>63 使う必要もないものを使いこなせといわれてもね。
「ピンポイントで大きな需要」なんだろ。
65 :
774ワット発電中さん :2011/09/30(金) 18:10:19.60 ID:BOhGXQSz
QVGA以上の高精細液晶への表示で1画面文のデータを一度RAM上に作って最後にまとめて 液晶にデータ転送なんて事例でDMA使うってことがあるかな。
事例としては効果が少ないかと思われ。何かの作業中にDMAが利用できる事の方が効果が大きい。 VRAMを2面用意して、一方を転送中に他方を編集。で、適度に切り替える。そんな感じ。
67 :
774ワット発電中さん :2011/09/30(金) 19:36:16.06 ID:UIp+vv+Z
ご教授願います。 MPLAB IDE v8.76と、HI-TECC C PRO Liteを使用して、某参考書を元に マイコンの勉強をしています。 プログラムをビルドした際、以下のエラーが表示されました。 undefined identifier "GODONE" 調べてみるとGODONEの識別子が宣言されていないというエラーのようなのですが、 他(OSCCONやTRISA)はエラーにならないのに、なぜGODONEだけエラーになるのでしょうか? htc.hを宣言すれば問題ないはずなのですが?
>>67 試しに、ソースの先頭に「 #define _LEGACY_HEADERS 」を1行加えてみて。。
追記、htc.hをインクルードするより前ね。複数ファイルがあるのであれば、各ファイルの先頭に。 一括指定の方法もあるけど、とりあえず。
70 :
67です :2011/09/30(金) 20:08:12.68 ID:UIp+vv+Z
>>68 #define _LEGACY_HEADERS で無事ビルドできました。
ありがとうございます。
できれば#define _LEGACY_HEADERS について教えて頂けるとありがたいのですが?
コンパイラのリリースノートに書いてあるので、そちらをどぞ。doc/readme.txt コンパイラのアップに伴いシンボル名が変更になった。けど、昔のソースを通す為 ヘッダファイルのフォルダの下に昔の名前のヘッダも用意してます。それを選択さ せるのが、LEGACY〜だよ。という感じで。 今回はソースに埋め込んだけど、プロジェクト、ビルドオプションの設定のコンパ イラの項でdefine macrosに指定(値不要)すれば一括指定も可能。
72 :
67です :2011/09/30(金) 20:48:30.96 ID:UIp+vv+Z
>>71 ご説明ありがとうございます。
シンボル名が変更になっている場合もあるんですね・・・
readme.txtも目を通しておきます。
73 :
45 :2011/10/01(土) 08:34:14.86 ID:48HBcUU9
>>51 >>62 返事が遅くなり申し訳ありません。
ご指摘ありがとうございました。
本日、やっと纏まった時間が取れそうなので
SPIバスの件のデバッグを再開します。
>PMD レジスタは?
>PMD レジスタの ADxMD ビットをセットした後にクリアすると、
>ADC モジュールレジスタは既定値状態にリセットされるそうです。
>AD1PCFGL レジスタもその影響下にあるそうです。
>ADxMD ビットをセットしたままなら問題ありません。
上記の件を確認し、早期に解決できればと思っております。
74 :
774ワット発電中さん :2011/10/01(土) 10:20:50.97 ID:n8ARMt2K
PIC12F510について教えてください。 これには、データEEPROMが内蔵されていないのですが、 代わりにプログラムメモリを、プログラム実行中に書き換えることは可能ですか?
75 :
774ワット発電中さん :2011/10/01(土) 11:33:09.40 ID:ftducs7t
>>74 自分で自分のプログラムメモリを書き換えることはスペック的に無理だと思います
76 :
774ワット発電中さん :2011/10/01(土) 12:58:40.50 ID:n8ARMt2K
>>75 ありがとうございました。
データEEPROM内蔵品を検討します。
77 :
774ワット発電中さん :2011/10/02(日) 08:52:01.90 ID:ZdSvbgE+
16f193Xの40pinはPin Diagram上ではCCP1〜5まであるのに、CCPは2個しかないとあるのはどういうことなんですか? (CCPを使った)PWMでモータを4個ほど制御したいんですが無理ですかね?
eccp:3個 ccp:2個 と、データーシートに書いてある
79 :
774ワット発電中さん :2011/10/02(日) 10:21:52.18 ID:ZdSvbgE+
>>78 ありがとうございます
eccpでしたか・・・データシートよく読むようにします・・・
80 :
45 :2011/10/02(日) 12:20:03.95 ID:lORFVPnX
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の設定を最後に行なっている。
hi-tech Cとその他のコンパイラの仕様の違い(割り込み処理時の割り込み禁止は自動か手動か、みたいな奴)がまとまって載ってるサイトとか無いですかね? データシートがギリギリ読めるような英語力しかないので、出来れば日本語が良いんですが・・・。
アセンブラの出力見れば何やってるか判るでしょ
84 :
774ワット発電中さん :2011/10/02(日) 19:55:59.54 ID:OKH/EIDH
読んでいる参考書のAD変換の参考プログラムに、 temp=(ADRESH*256)+ADRESL; とあるのですが、どうしてADRESHを256倍するのでしょうか? (変換データの格納は右詰です)
あなたは銅貨をH枚、アルミ貨をL枚持っています。 あなたの財産はおいくら? → temp = H*10 + L; と同様
ADRESH は、8bitのレジスタ ADRESL は、8bitのレジスタ temp は、16bitの変数 のとき tempの16bitの中にセットするとき、 15・・・・・・・・・・87・・・・・・・・・・・0 ADRESH(上8ビット)ADRESL(下8ビット) のようにADRESHを(上8bit)に置くため。
浮動小数点計算でADRESLを256分の位置にしても結果は同じだな tempを出力するときに全体を256倍にしないとだめだけど。 なーんて面倒なことはしないだろ?
>256分の位置 実は単に間違えたんだが、何となく意味がわかるから恐ろしい。
90 :
774ワット発電中さん :2011/10/03(月) 22:53:02.73 ID:dlE8LJP/
LM35DZの出力をPIC16F688でAD変換するのですが、 具体的にどのような値がADRESHとADRESLに格納されるのかがわかりません。 出力が○mVの時、ADRESHとADRESLにはどんな値が格納されるのかを まとめているシートなんかはありませんかね?
つ「データーシート」
>>90 アナログ入力に可変抵抗でもつなげて、
電圧を変化させた時にレジスタの値がどう変化するのか、実験してみればいいじゃない。
大した手間じゃないでしょう。
ADC最初の一歩だよな 10KをVddVssで挟んで出力をANに入力 そして結果が合わなくて悩むw
Vrefが変な設定になってた、でもなきゃ最初から期待通りの値出るだろw
PIC16Fで簡単でおもしろいものを作りたいのですがおすすめのモノを教えてくださいおねがいします神様
PICライター
>>93 >10KをVddVssで挟んで出力をANに入力
→ 可変抵抗の10Kを、Vdd-Vssにつないで、出力をANに入力、な。
>95 まずラジペンで足を曲げて犬の様な形を作る。 4本脚はもちろん、頭や尾をそれらしく作るのが肝。 次に白いペンキを用意し、
>>95 7segとスイッチで作る迷路ゲーム。
進みたい方向のボタンを押すと、「進んだ」「行き止まり」だけ答えが返る。
頭の中に地図を描きながらだから、結構遊べる。
ゴールしたらラップタイムを表示してお終い。
(というゲームを、関数電卓で作って遊んでたのは俺だ)
>>95 キッチンタイマーってどう? 最初はカップラーメン専用3分。徐々に機能を増やしてみる。
表示はLEDを1個、3個、10個、スイッチも1個、2個…テンキー。LCDで表示するのもいいかと。
電池で動かすなら省電力も考えないとね。
買った方が早い。確かにそうなんだけど、プログラム初体験なら、作る過程を楽しんでくれ。
>>97 いや漏れ90じゃないし、1分悩んで設定漏れなおしたら普通に動いたってw
103 :
774ワット発電中さん :2011/10/05(水) 23:05:53.54 ID:U09lY3iP
外部バスをもつマイコンにSRAMなど、それもあまり速くないチップを外付けしたとき、 同じリード命令を実行してもメモリが結果を返すまでプログラムはそこでストールする ことになる?外部バスをもたないpic16fなどではRAMのリード・ライトなど基本的に すべて4クロックで実行するのでそのへんはどうなってるんだろうか。
ソフトで読むならその間は割り込み禁止にしてタイミングに掛かりっきりにはなるけど 別にペリフェラルは停止したりはしないから読んでる間は他の受け付けが遅れるだけ タイミングはマイコン側で決めるものだし、ストールしてるように見えるかどうかは、 お前次第
遅いSRAM、5101か
106 :
774ワット発電中さん :2011/10/06(木) 00:17:22.29 ID:xJiKtc8t
ストールという表現がわるかったのか、 そのリードが完了するまでは次の命令の実行に移らないということのようだから 一時的にはプログラムが停止した状態になるという理解でいいのかな。 例としてRAMを出したがキャラクタ液晶もバスに接続して使えると説明されてる 文献もあったような。かなり遅いので実際に使われることはないかもしれないけど。
>106 何を知りたいのか解らないけど、外部バスが無いPICのスレより 外部バスのあるマイコンのスレで聞いたら? AVRやARMになら外部バスを持っているチップがあるよ。 おそらくWait入れたりWait信号で待ったかけたりしてるんじゃないの
>>106 > 一時的にはプログラムが停止した状態になるという理解でいいのかな。
そういう場合もあるし、そうでない場合もある。
シンプルなやり方なら、データが読めるまでCPUが実行を停止する。
スマートなやり方なら、RTOSが別のタスクを実行する。
109 :
774ワット発電中さん :2011/10/06(木) 09:21:09.27 ID:xJiKtc8t
リアルタイムOSとか聞いたことはあるけどマイコンに入れて使ったことはない。 ただOSが勝手に動くのではなくマイコンが動かしてるということを考えると 命令実行を停止してるのに他のタスクを実行するとはどういうことだろうか?
>>109 本当にやることがなくなったら SLEEP 命令で眠る。
割り込みで目覚めて仕事をする。
一般的なタスクはタイマ割り込みと優先順位で仕事の時間配分が決まる。
>>109 一般論な。
マイコンにはキャッシュがある。かつ、そのキャッシュが遅いSRAMをキャッシュ対象にしているとする。
CPUがSRAMにアクセスしたとき、キャッシュにヒットすればSRAMにはアクセスしない。
ヒットしないミスキャッシュの時は、キャッシュコントローラがCPUに割り込みをかけ、SRAMからデータをキャッシュに転送する。
割り込まれたCPUはRTOSのカーネルを実行し、RTOSは別のタスクを実行する。
次のタスクを実行するとき、元のタスクが最優先で、かつキャッシュフィルされていたら元のタスクを再開する。
一言で言えば、CPUを止めないための機構があるってこと。
>>111 なんか色々酷い解説になってるなw
MMUとキャッシュがごっちゃになっとるのか、ちゃんと理解してから解説しよう。
>>111 ハードウェアマルチスレッディングでないと効率悪そうだね。
>>112 じゃぁ、説明頼むわ。
組み込みマイコンにMMUなんてないけどなw
>>114 無理無理。
エラそうな口を叩く奴に限って、まったく理解してないんだよなぁ
>>114 MMUあるチップもあるよ〜
キャッシュミスヒットで割り込みなんて機能はない。
111=114=115ってところか?
118 :
774ワット発電中さん :2011/10/06(木) 22:25:59.41 ID:xJiKtc8t
「もある」じゃなくて具体的に該当するチップを示して欲しいところだな。それだけ自信たっぷりに
いうならすぐに出てくるんだろうし。広義でいえばインテルのも該当するんだろうがわれわれが一般に
認識している「マイコン」とは別物だからな。
>>108 よりは
>>111 のほうが分かりやすいな。
リアルタイムOSの話から一気にキャッシュとかの話題になったがpic18以上からRTOSが
載るんじゃないのかな。PICにキャッシュなんてあったかな。
リアルタイムOSという言葉が出てきて、混ざった感じ?
>>100 LED点灯とサーボは制御したことあるんですよ〜。
7セグ使ってダイナミック点灯にチャレンジしてみます。
>103の質問が遅いSRAMを"外部バス"に繋いだ時、PIC16Fの動作は? って外部バス持っていないPIC16Fを対象にしたのが間違い。 まあ>107でAVRスレに行ったのかも。 ATmega128なら外部バスが有り 内部メモリで2サイクルかかる所を外部バスは 設定で+1〜+4Wait入れて低速のデバイスでも使えるようにしている。 そもそもバス接続なら、バスを占有されてしまうから待つ以外の選択肢は無いと思うが いくつかのレスはI/Oで繋いでソフトでコントロールした場合と勘違いしているんでは…
つーか、いくら遅いSRAMでも他タスクに切り替えるなんて使い方する可能性は万に一つも無いだろ それ出た時点で「あぁ、コイツ脳内知識だけで知ったかコイてるだけだな」ってわかれよ 触るな
>>116 MMUなら仮想記憶だね。
これなら、メモリに存在しないときに割り込みが発生してOSがディスクからデータを持ってくることになる。
マイコンといっても携帯用みたいなパソコンに近い使い方をするものになるね。
>>118 MMU付きならARM Cortex-Aシリーズとかかな?
用途から考えるとARM Cortex-Mシリーズとは別物だね。
125 :
774ワット発電中さん :2011/10/07(金) 00:56:29.53 ID:Q+HgMb8i
最初の外部バスの質問の答えは >バスを占有されてしまうから待つ以外の選択肢は無いと思う なんだろうな。リード命令が終了するまで割り込みにも移れないんじゃないかと思う。 で、ちょっと前に出たDMAに関して、DMA、内部メモリ、外部メモリ、IOレジスタ など基本的にすべて同じバスを利用してるのではないかと思うのでまとまったのデータの 転送をDMAにまかせてCPUで他の処理をする、といってもDMAによってバスが占有 されていれば内部メモリへのアクセスも制限されてCPUで他の処理というのがかなり制限 されるのでは、と思うけど何か間違ってるのかな。
>>125 dsPICだとデュアルポートメモリだからDMAとCPUは並列に動作することができるよ。
127 :
111 :2011/10/07(金) 05:49:09.06 ID:jdL7aX0e
SH2/PCIの基板を設計したときは外付けの遅いメモリにはWAITタイミングを噛ませた ってこれはハードの話だぞ? 当然ソフトの方はタイマーで割り込んで簡易OS下で動いているだろうし気にしているのは何故だ?
要領を得ない質問に対して、それぞれの解釈にしたがって好き勝手なコメント をしてるだけで、まったくかみ合ってないわな。 まあ、それでいいんだけどね。
>>129 なんも関係ないよ、原始的なPICにはw
>>127 おまえの頭の中全て整理しなおして出直せw
DMAにせよメモリ管理にせよおまえに語る資格はない、一生ROMってろカスっ
134 :
774ワット発電中さん :2011/10/07(金) 09:38:46.58 ID:Q+HgMb8i
>>126 デュアル・ポート、よく聞く言葉だけどメリットがよく分からなかったんだよな。バスを分けるという
意味があったのか。なるほど、それならDMAを使う利点がはっきりと分かるね。ちょっと古いけど
H8/3048あたりもDMA機能があったと思うけどあれはデュアル・ポートだったのかな?
逆にデュアル・ポートでないマイコンでDMAを積んでてもその機能を十分に生かしきれてなかった
ということか。
デュアル・ポート・メモリはマイコン内部のメモリだけで、外付けのRAMでそのような機能のものはないのかな?
135 :
774ワット発電中さん :2011/10/07(金) 09:40:08.32 ID:Q+HgMb8i
ふぁいなる・あんさー?
137 :
774ワット発電中さん :2011/10/07(金) 10:10:56.80 ID:Q+HgMb8i
>>136 、サンキュ。
なるほど。
>>104 はSoEMT(switch on event multi threading)の話だったのか。
最初意味がわからなかった。
SoEMTってマルチ・コアのシステムの話だね。1つのCPUしか持たない普通のマイコンの
話をしてるので「一般的ではない」というか違う話って感じだな。
>>134 デュアルポートメモリの配線は単純に考えて2倍になるから、
それだけのメリットがないと使えないと思う。
VRAMのような一方はシフトレジスタで済むような構成とか、
FIFOみたいなバッファ用かな?
DMAならデュアルポートメモリでなくても
DMA専用メモリ空間で区切った方が簡単だと思う。
ARM Cortex-Mシリーズは、複数のバスを切り替えて
DMAとCPUのアクセスが衝突しにくいようにしている。
H8は、単純なDMAだったと思うが詳しくは知らない。
>>127 SoEMTは、ハードウェアマルチスレッディングの一種だよね。
今までアセンブラで16F88や16F887を使ってきました。 内容は、A/D,BCD,PWM,シリアルインターフェースの入出力、演算、LCD表示などです。 今回、16bit以上のADCが必要になり、MCP3421、MCP3551などシリアル接続のADCを検討しています。 ついでにアセンブラを卒業してC言語に移行し、USBやLANにも挑戦したいと思っています。 このような用途にオススメのPIC(I/Oも多いほど良いので40-28ピンの)を教えてください。 C言語については素人なので書籍もご紹介頂けたら有り難いです。
>>134 dsPICだと、DSPの性能を発揮するためにメモリ空間が2つに分割されていて、
同時に2つのデータを持ってこれるようになっているし、
それが中断無く続くのがDSPだからバスが空くことがない。
片方のバスを止めれば、もう一方も止まってしまう。
デュアルポートメモリ無しでは、DMAを使うと性能が低下してしまうからだろうね。
昔のマイコンはバスが空くことが多かったから、そんなに問題にならなかったのだと思う。
でも、パソコンのHDだと、性能向上によりDMAからPIOになったから
周辺に大きなバッファがあれば、DMAは必要ないのかもしれないよ。
やれやれ、ID:xxdprfwtは取り乱して涙目かw
>>127 > SoEMTってマルチ・コアのシステムの話だね。
それ、間違い。
>>139 正解
EEPROM書き込み中にEEADRLをincfするコードを書いてた。 ・・・できないんだな。3日悩んだわ。
>パソコンのHDだと、性能向上によりDMAからPIOになったから
>>145 >実行されるまでの時間が1サイクル?
変わった発想だね
147 :
145 :2011/10/08(土) 01:24:01.49 ID:MFohz0v/
>>146 最近のPICって1命令1サイクルになったの?
>>145 「条件分岐を除き、命令はすべて1サイクルで実行。」って書いてあるよ。
All single-cycle instructions except branchesだから
「分岐を除き、命令はすべて1サイクルで実行。」だね。
4クロックで1サイクルなのは変わらない。
149 :
145 :2011/10/08(土) 01:36:37.54 ID:MFohz0v/
>>148 1命令1クロックと勘違いしてた
ありがと
クロックってなんですか?
カチコチカチコチ・・・・
サイクルってなんですか?
チリンチリン・・・・
日本政府が放棄しようかと考え中のもの。
脈と心拍数くらいの違いサ〜
156 :
32 :2011/10/08(土) 21:24:53.04 ID:QVQGTT7F
今やっとEEPROMからデータを受信できました。 永かった・・・・・
>>118 横レスするが、
携帯電話用とかセットトップボックス(ケーブルTVチューナー)とかで使われるようなCPUだって、
組み込み用というカテゴリになるわけで、
ARM11コアやらCortexA9コアを使った高性能な組み込み用CPUもある。
ということを、116氏とかは言ってるんだろ。
具体的なチップ名は、コア名でググったらいいと思う。
>>141 >でも、パソコンのHDだと、性能向上によりDMAからPIOになったから
これは理由が間違ってるね。
パソコン本体が搭載していた古いDMAは動作クロックが最大でも8MHz(もしくは5MHz)と遅く、
CPUの動作クロックが20MHzを超えても速度が向上していなかった。
しかも互換性問題ゆえ、32bitCPUであっても16bit幅のまま。
だからこそ、CPUによる「PIO転送」が有効だった。
が、まもなく、旧型とは別の高速DMAが併用されるようになったから、
ふたたびDMA転送の時代になったよ。
PCIバスコントローラ側のDMAを使えるようになったからね。
って、いつまでPICと関係ない話題を続けてんだよオレ。
158 :
774ワット発電中さん :2011/10/08(土) 23:21:48.68 ID:h7Ek7WQx
>>139 、
>>142 について
ハードウェアマルチスレッディングというものをPIC16Fでも実現可能かな?
もしできないならどんな機能が不足してるのだろうか?
159 :
774ワット発電中さん :2011/10/08(土) 23:35:45.36 ID:ntWQG7Ku
基板に必要なだけPICを乗っければいいやん
エスパー回答すると、メモリからのデータ出力はクロックに合わせてタイミングが決まってるので、それにあわせてメモリコントローラを設計する。CPUにはwait入力してタイミングまで引っ張る。 遅いってのが、I/Oレベルなら割り込みだけど、SRAMではあり得ない。 ハンドシェイクのようなイメージがあるんだろうけど、メモリは同期と考えて間違いない。
>>155 おまえは脈と心拍が違うのかw
心拍4回で、脈が1回とか・・・
っ不整脈
弁か壁が欠損しているんだ、察してやれ
4ストなんだよ
>>158 PICは単純さが命だからね。
その意味でバランスがとれた設計になっている。
いくら高速動作でも無視できないストールが発生するのではリアルタイムにならない。
リアルタイムの用途では、ハードウェアマルチスレッディングは足枷でしかないよ。
とりあえずPICというものがマイコンファーストコンタクトだった俺にはどうでもいい。 USBタイプの書き込み器ももっと安くなればな…。 SHを触る機会があったけど、3.3Vマイコンを嫌っていたのは食わず嫌いだったみたいだ。 32ビット、というか某CQボードに乗っているRAMが半端ないマイコンはなんとなく惹かれる。 そろそろ2.5MB+JPEGコーダ内臓とか出るみたいだし、ますます惹かれる。表示系もついているから無駄にタッチパネル搭載カメラとか作れそう。 ただサンハヤトで変換基板買うより…基板作ったほうが安いんだろうなぁ…とか思いながらも、10ビットしかないA/Dが4chをマルチプレクサで10チャンネル以上に見せかけているのに泣いた。 A/D欲しかったらPICつけるから安心しろといいたくなる。 他はどうか分からないけど、このSH表示系ってカテゴリはもうちょっとがんばって欲しい、デジキーで買える位には。 幾つかは買えるみたいだけど。 PIC? ああ、何でも買えるから心配してない。
4ストワロタ
微妙にIDの並びがいい感じ。あと少し
四対子狙いだな
>>165 リアルタイムでハードウェアマルチスレッディングができるマイコンは存在する。
Parallax Propeller というやつだ。
32ビットCPUが8つ入っていて40ピンDIPだからPIC以上の変わり種だけどね。
あのふざけたプロペラさんそんなすごい、いや酷いモンだったのかw ヤバイな、一つぐらい動かせる環境が欲しくなってしまうw 問題は動かせたとしてもすごさが伝えられないことだ。
173 :
774ワット発電中さん :2011/10/10(月) 10:29:56.86 ID:yeGVsMc3
>32ビットCPUが8つ入っていて40ピンDIP ってほんとすごいな。いったい何に使うんだ? リアルタイムでハードウェアマルチスレッディングって具体的にどんなところ、アプリケーションで 使われてるんだろう?
174 :
124 :2011/10/10(月) 10:35:46.27 ID:ETvEa1UK
以前は「マイコン総合スレ」あったのに今は無いんだな 寂しいから人がいるPICスレで語りたいのもわかるけど あらしてるのと変わらないよ
Parallax は、PICやPIC互換で高速化したSXにBASICインタプリタをのせたモジュールを作っているところだから。 そこが設計したマイコンだから無関係とはいえないかも。 同じ32ビットでもPIC32と比較が困難なほど違っているというのは興味深いよ。
>>171 単にマイコン並べたのと然程変わらないものをスレッディングねぇ・・・w
>>177 それが簡単にできないことは、理解しているの?
>176 チップ買ってきてソフト書き込んでモジュールとして1度でも売ったら関連ありってか? なんだよ、そのとんでも理論は。
マイコン総合スレ立てようか?プロペラとか先月のトラ技部出てたPiccoloとか 話すのに総合スレがあったほうが良いだろ
別に過疎ってんだからここでいいじゃん そんぐらいスルーしろよ
>180 お願いします。"マイコン総合スレ その2"まであったので3で
183 :
32 :2011/10/10(月) 20:02:27.59 ID:IBI2/8SR
やっとEEPROMから音声データを読み込む事が出来たのですが、 どうやら、不具合の原因はスピーカーを繋ぐ事から来る何かのノイズらしいのです。 速度を下げれば不具合は起きにくいのですが、完全には無くならないし、 そもそも遅いと音声の再生が間に合いません。 漠然とした質問で申し訳ないのですが、そして、もうこのあたりからスレチかも知れませんが、 質問させてください。 EEPROM→PIC→NJM386(オペアンプ)→スピーカー という組み合わせです。 スピーカーだけを取り除けば正しく動作します。(勿論音は出ません。) PICは受信完了待ちでループしていたり、または送信完了待ちでループするという現象です。 のでPICは生きているとは思うのですが、自己完結できるはずの送信完了が出来ない事からして どんな事態が起きているのか判りません。 オペアンプからスピーカー間の配線はオペアンプ付属の回路図どおりですが、 この辺りの知識は無く何故そこに抵抗やコンデンサががあるのか等は判りません。 どんな事でも良いのでアドバイスいただけないでしょうか?
>>183 回路が正しいのかどうか自分で判断できないならとりあえずUP
あとは電源の容量不足とかスピーカーのインピーダンスが低いとか
EEPROMに置いたAUDIOデータをPICのDACでスピーカーに出すって事? それから不具合の症状説明が重要だよな。不具合ってなに? 不具合の原因がノイズとする根拠は? 送信とか受信とか、相手はなに? って辺りから説明しとけや
>>183 パスコンはPICの近くに入れてる?
配線がしょぼいなんてことは?
GNDの配線はどうなっている?
配線の仕方によっては、GNDの方の電圧が変動することがあるよ。
>>179 まあ、AVRとArduinoは、別スレだからね。
188 :
32 :2011/10/10(月) 21:14:19.36 ID:IBI2/8SR
パスコンがないな あと、実体が回路図どおりならGND経路が長い
PWM出力の10uのコンデンサいらない気がする VR3の数値と電解コンの極性が書いてない 細かいがスピーカーの所の10Ωの抵抗とGNDの所に●が無い
191 :
32 :2011/10/10(月) 21:44:32.94 ID:IBI2/8SR
>>185 PiCのDACではなくてPWMで出力します。
不具合1
EEPROMに対して指定あるアドレスを送信する時
MOVWF SSP1BUF ;送信
BANKSEL PIR1
BTFSS PIR1, SSP1IF ;送信完了か?
GOTO $-1
このループから抜け出せなくなります。
不具合2
EEPROMからデータを受信した後に送信したACKが終了しない。
BCF SSP1CON2, ACKDT ;ACKにセット
BSF SSP1CON2, ACKEN
BTFSC SSP1CON2, ACKEN ;ACK送信完了か?
GOTO $-1
このループから抜け出せなくなる。
I2Cの速度を100Kbpsにすれば不具合は起こりづらくなりますが、
400Kbpsにするとたちどころになります。
どちらもスピーカーを外せば不具合は起きません。
ノイズとは漠然と不具合の原因を推測して言っています。
>>186 パスコンは・・・実は未実装です。
>配線がしょぼいなんてことは?
>GNDの配線はどうなっている?
>配線の仕方によっては、GNDの方の電圧が変動することがあるよ。
配線は0.3ミリのすずメッキ線でやってます。
しょぼいの部類に入るのでしょうか?
>>189 グランド経路はすずメッキ線0.3ミリで
ACジャックまでEEPROMから10センチ
同じくオペアンプから7センチ
同じくPICから5センチです。
パスコンはどの容量がいいか調べているうちにおざなりになって付けていませんでした。
実は当たり前すぎでググッてもなかなか見つからなかったりしまして;;
192 :
32 :2011/10/10(月) 21:57:23.61 ID:IBI2/8SR
VR3は10KΩです。 電解コンデンサはオペアンプ側が+でスピーカー側が-です。
193 :
32 :2011/10/10(月) 22:04:19.58 ID:IBI2/8SR
>>190 >PWM出力の10uのコンデンサいらない気がする
こういうのが判るって羨ましいというか尊敬します。
よろしければもう少し手ほどき戴けないでしょうか?
>191 スピーカーの前でも後ろでもいいけど直列に抵抗(数十〜数百Ω)入れてみて (音は小さくなるけど) 症状が改善するならノイズでしょう。 パスコンもだけど電解コンデンサを電源にも入れてあげて
GNDが遠いというか、PICとEEPROMの電源、GNDをなるべく短く、だな あと、PWM->DC化回路のCR時定数が短くないか? それで386の動作がおかしくなっているとか
10uは要ると思う。 フィルタの時定数もカットオフ考えれば妥当かな。 PWM周波数いくつ? カットオフ15kHzのフィルタじゃよっぽどPWM周波数高くないとキャリア漏れるよ。 漏れたキャリアがアンプとスピーカー通して電源揺さぶってるんじゃないかと。 RC二段にするか、LCRフィルタにしてキャリアを減衰させるべし。
パスコンは、0.1μFでよいと思うよ。
4番ピン、プルアップ要らないの?
199 :
32 :2011/10/11(火) 06:36:48.93 ID:ElDVETxx
>>194-198 今夜からまた少しずつ進めてゆきます。
皆様アドバイスありがとうございました。
>>199 頑張ってるみたいだから、おじさんもアドバイスしちゃおう。
http://loda.jp/mcnc/?id=289.png 上の図のように、LM386の電源端子の前に、
デカップリング回路を入れると幸せになれるかも知れない。
LM386は音を出すときに電源電流が結構流れるので、
回路の電源の「電流供給能力」が十分でないと、
電源電圧(この場合5V)が、釣られて落ちてしまう。
そこで、LM386の電源ピンの前に、図のようなデカップリング回路を
入れてやる。("挟む"んじゃなくて、"入れる"、"挿入する"、な)
「電流のタンク」としてC2を置き、それに電気を貯めて、
LM386の「電源電流欲しい!」の要求を満足させる。
上流方面へは抵抗が入れて、上流へ「電流欲しい」を伝えにくくする。
一度やってみて。ダメだったら、ゴメンな。
>>199 追加ね。
電源からの電源線は、基板上の「電流の一番流れる部品に着地させる」こと。
PICとかEEPROMとかは、電気をほとんど食わない(=電流が流れない)から、
「電流の一番流れる部品」の電源から「電気をもらう」ように配線する。
「環八の交通量は凄く多いけど、1本路地に入れば車は少ない」のように
交通量の多い回路を優先的に電池から配線し、
交通量の電流少ないところはその「おこぼれ」をもらう、と似た感じ。
配線がΦ0.3の線だと、少し細いと思う。
交通量の多い回路には、もっと太い線を使わないと「渋滞」が発生する。
裏の路地のような交通量の少ない回路なら、Φ0.3の線でも良い。
>>201 そんなに地雷を仕掛けるのは人としていかがであろうか?
>>202 えっ? 地雷って何ですか?
僕、何か変なこと言いましたか?
強いて言えば「電気をほとんど食わない」と言う癖に「挟む」を認めない事かな
なんで?
「挟む」と「電気をほとんど食わない」の間に、関連性はないと思うけど。
「地雷」の意味は、何でしょうか?
>>200 >>201 の私の書込が、何かを埋め込んだというのでしょうか?
すみませんが、教えてもらえないでしょうか?
電気の食わない部品をデカップリングすると言いつつ 386をデカップリングしているとか
デカップリング、とは言ってなかったな おこぼれをもらうようにしているか、だな 失礼
>> 206,
>>207 「電気を食うLM386の電源を、回路電源からデカップリングする」が、
何かまずいですか?
209 :
32 :2011/10/11(火) 21:24:01.67 ID:ElDVETxx
>>200-207 レスありがとうございます。
C2はLM386の「電源電流欲しい!」の要求を満足させる。との事理解しました。
では、抵抗の向こうにあるC1はPICとEEPROMへおこぼれを供給する目的もある。
しかし、あくまでおこぼれなので、本来的にはC1もLM386の為の前段のコンデンサという事でしょうか?
210 :
32 :2011/10/11(火) 21:34:55.97 ID:ElDVETxx
前段のコンデンサというよりは、C1-R-C2の三位一体でデカップリングしている。 C1にはPICやEEPROMにおこぼれを供給する副次的効果もあるという理解でよいでしょうか?
211 :
32 :2011/10/11(火) 21:51:21.99 ID:ElDVETxx
>>195 CR時定数が短いのですか。確かにオシロで波形を見ても全然滑らかになっていないのです。
隣り合った山同士くっつけて滑らかな曲線を作りたいのですが、とげとげの短い山ばかりです。
212 :
32 :2011/10/11(火) 21:57:43.14 ID:ElDVETxx
>>196 PWMは8KHzです。
カットオフ15kHzのフィルタ・・・すみません。15kHzのフィルタとはどんな計算式で求めるのでしょうか?
googleで「CR フィルタ」で検索すると、フィルタ計算ツールってのが一番上に出てくるよ
フィルタは4kHzじゃないんかい?
CRフィルタはだだ漏れだから、相当厳しく設定してもノイズ酷い
RとC2でデカップリングしているならC1は高周波のパスコン、0.1μF程度でいいんじゃないかな? なんか誤解招いているような。 10μFは386に入力へのACカップリングでしょ、ならばPWMをなます効果は期待ほどではない。 なましてオーディオ帯域にするのは1kと0.01μFなんだが、CR時定数は10μs、 逆数で100kHzなのでカットオフ周波数が高いし386はムダに増幅できる帯域だよな。 PWMが8kHzなら、Rは1k固定としてCは0.47μF以上あれば、 波形上はだいたいつながって見えそうなところか。 もう少々帯域を捨てるか、またはPWMの分解能を捨てて周期の短縮を稼ぎたい気もする。 ループから抜け出せない誤動作を対策したいはずが ずいぶんズレたな、すまん。
>>212 PWM周波数は20kHz以上推奨
RCのLPFについてちゃんと調べるべき
>>215 のような事情なので、計算式より波形目測のほうが
精神衛生上いいんじゃないかw
fCOを計算してCとRを割り出して、いざ鳴らしてみると全然駄目じゃん ということを一度は経験するな オシロ見ながらフィルターの可変抵抗をぐりぐり回すと、 なんか拡大縮小にしか見えなかったり
>>219 ちゃんと「ローインピーダンス」で、CRフィルタを駆動してる?
CRフィルタの後を、ちゃんと「ハイインピーダンス」で受けてる?
それでもうまく行かない?
LM376 のデータシートのラジオ用アンプの回路例だと、CRフィルタはボリュームの後、アンプの直前に入れているね。
223 :
32 :2011/10/12(水) 19:54:12.77 ID:X+MASU4M
皆様レスありがとうございます。
沢山のレスを戴きましたので、これから教わった事を一つ一つ理解したうえで身に着けて行きたいと思います。
そして
>>200 さん
昨日のレスありがとうございました。
upした回路図をプリントアウトしたうえで回路図を書き足し、そしてそれをスキャンした上でアップロードして詳しい説明まで戴きました。
見ず知らずの私にそこまでして戴きなんとお礼を言ってよいでしょうか。大変感謝しております。
>>223 ありがとう。
頑張っているあなたに、何か役に立てたのなら嬉しいです。
今後の頑張りに期待しています。
オシロスコープ高い これじゃ家で実験できない(´・ω・`)
>>225 ベンチャーかな?
都道府県の工業技術センターで測定器の貸し出しとか持ち込みでの精密測定とかのサービスを格安でやってるよ。
>>201 > 「電流の一番流れる部品」の電源から「電気をもらう」ように配線する。
これはどうかな? 一緒にノイズまで貰ってしまうのがイマイチ。
ケースバイケースで変わるよ。
> 交通量の多い回路には、もっと太い線を使わないと「渋滞」が発生する。
電流容量を満たしていれば細くして、インダクタンス成分でノイズを低減させる方向もある。
以上、元ネタとは関係なし。
>>225 それでも10万円を切るのだから、随分と安くなった。
>>227 >これはどうかな? 一緒にノイズまで貰ってしまうのがイマイチ。
CRやLCでLPFかけてから使えばいいんでない?
ケースバイケースという免罪符を使うなら、なんでも有りだけどね。
>電流容量を満たしていれば細くして、インダクタンス成分でノイズを低減させる方向もある。
直流的な電圧降下を嫌ったんじゃない?
>>231 > CRやLCでLPFかけてから使えばいいんでない?
それもケースバイケース。
CPU/SDRAMならそのとおり。
元ネタはアンプらしいから、この場合噛ませるのはロジック側でなくアンプ側がいい。
ただ、可聴域だからチョイ面倒。
さらに微弱なアナログ系なら電源の根本から分けたほうがいいし。
ソレノイドやモータも、逆の同じ理由で分けたほうがいいし。
ちなみに今のPCは、CPUとその他でPSUから分けてるし。
消費電力が多いところを強化するのは当然だけど、消費電力が多いってことはノイズ源でもある。
何処まで許容して、どこで線引きするかだよね。
233 :
774ワット発電中さん :2011/10/13(木) 21:37:45.44 ID:TvPjT1+g
LM25DZの出力電圧をPIC16F688でAD変換プログラムを組みました。 間違っている部分や足りない設定などがあれば教えていただけるとありがたいです。 お願いします。 unsigned short temp; OSCCON=0x60; /*4MHz*/ long work =0; TRISA=00000001; /*RA0/AN0ピンをアナログ入力モードにする*/ TRISC=00000000; ANSEL=00000001; ADCS2=1; /*AD変換クロックをFosc/16にする*/ ADCS1=0; ADCS0=1; ADFM=1; /*AD変換結果データは右詰にする*/ ADON=1; /*ADコンバータを電源オンする*/ VCFG=1; /*VREF pinの電圧を上限に指定*/ CHS2=0; /*AN0ピンの電圧をAD変換する*/ CHS1=0; CHS0=0; GODONE=1; /*AD変換開始*/ while(GODONE){ __delay_us(5); /*5μsec待つ*/ } work= (ADRESH*256)+ADRESL; work= (work *500)/1024; temp=work /5; return temp;
完璧だと思うよ。素晴らしい。 1発で動いたでしょう? さすが〜ぁ。
>>233 うまく動いたの?
どの辺を不安に あるいは心配に思っているの?
君の作ったプログラムを、なんで僕たちがデバッグしなきゃいけないの?
もっと情報をだしてくれないと
冷たいこと言うなよ、俺たちは仲間だろ?
え?カマ?
え?ネカマ?
>>233 TABキー使ってインデントいれた方が読みやすいと思うよ
240 :
774ワット発電中さん :2011/10/15(土) 00:01:56.08 ID:rsFdY3MS
2ちゃんでTABキー使ってもインデントにはならんだろ。
PIC24FJ64GB002のUSBホスト機能を用いて、PICに接続したUSBキーボードの文字を取得してLCDに表示するプログラムを書いています。 コンパイルに通したところ、 U1CONbits.SOFENやU1PWRCbits.USLPGRDといったI/O系の関数が定義されていないとしてコンパイルが通りません。 どなたかお助けいただけると助かります。
242 :
241 :2011/10/15(土) 01:59:06.82 ID:elA3KgdW
連投申し訳ないです。 上記のエラーが出るのは、Microchip Aplication LibraryのUSBライブラリのusb_host.cです。 サンプルプログラムを通した場合はこのソースが使用されていてもエラーが発生しないので、当方のプロジェクトの問題だと思うのですが、使用しているソースはサンプルと同じで、何が問題なのかさっぱり見当つきません。
>>241-242 ソースプログラムも見せずにエラーの原因を教えろとか、馬鹿か?
あと質問する前に日本語覚えなおしてこいカス。
>>243 確かにわかりにくい文章だけど、まぁなんだ、おまえも頑張れ。
>>241-242 サンプルプログラムが通るなら、自分の作ったプログラムとの違いを考える。足りない宣言の有無を確認。
サンプルプログラムのファイルの中に自分のプログラムの通らない箇所を部分挿入してリビルド、たぶん通るんじゃないかな?
なんでU1CONbits.SOFENというシンボルを使うのか、そのシンボルの名前は誰がアドレス解決するのか等々を考えて
いくと問題の要因がわかるかもしれない。と、少ない情報だけで推測するのも面倒だな。
>>242 インクルードパス指定してないんじゃね?
>>242 デバイスの指定を忘れているとか?
USBなしのデバイスになっていると使えないのは当然だよ。
知り合いに「女ヶ沢」(メガさわ)という人がいる。 「その上を行くギガ沢なんていないだろうか?」 「いるわけないじゃん」 って感じで友達と馬鹿な冗談を言い合っていたら、 相手が、寺沢君だった。
_,..--------..._ ;( ); | `` ------- '´´.| そんな奴はおらん |⊂⊃ ⊂⊃ | ((__)) ,|、__ _,...--'7 || / `--`-v--'´--''´~\ ``=|,,,,,;; ;;;;;;;;; ;;; > └'´|;;;; O ;;;;;;;;;;;|`'|| |;;;; O ;;;;;;;;;;;;| || | ;;;; ∧ ;;;;;;;;;;;;;|((~)) 't--、_ハ__,... ----┤ ``||~```~~~~||~ ̄ .||、 .||、 / > < \ <__/ \__ >
それはメカ沢だw
252 :
774ワット発電中さん :2011/10/17(月) 20:11:29.44 ID:itmPxiBE
PIC24FJ64GA002を2つ使ってSPI通信したいけど、まったく通信できません。ヒントでもいいので助けてください。
ピン割り付け
マスター側
TRISA=0xFF;
TRISB=0xF0FF;
AD1PCFG=0xFFFF;
RPINR20bits.SDI1R=7; //データ入力(RB7)
RPOR4bits.RP8R=7; //データ出力(RB8)
RPOR4bits.RP9R=8; //クロック出力(RB9)
スレーブ側
TRISA=0xFF;
TRISB=0xFF0F;
AD1PCFG=0xFFFF;
RPINR20bits.SDI1R=8; //データ入力(RB8)
RPINR20bits.SCK1R=9; //クロック入力(RB9)
RPOR3bits.RP7R=7; //データ出力(RB7)
spiのレジスタは
http://amahime.main.jp/pic24f/sdprog.txt を使っています。
>>252 それSDカード用でしょ。SPIの設定とか配線はどうなっているの?
オシロ無いと動かせる気がしない
255 :
774ワット発電中さん :2011/10/17(月) 23:35:18.07 ID:itmPxiBE
>>255 3: プライマリおよびセカンダリプリスケール ビット値を 1:1 に設定しないでください。
SPIx モジュールをスレーブモードで使用する場合、SMP ビットをクリアする必要があります。
流れぶっただがsdccのスレって無いのかね? コンパイラの展開がasmでエラーになりやがるorz
すいません教えてください。 18F14K50の3.3vLVOは、普通に150mAぐらい使って良いのでしょうか? データシートにも電流書いていないし、もしかして、全然別の用途で用意してあるんでしょか?
ちょいとおたずねしますが、PIC16F887-I/P用の基板とソフトをPIC16F1939-I/Pに無改造で置き換えられますかね?
>>259 一般的に言って、PICは無改造で下位機種のコードを使いまわせるほどの
互換性は持っていない。
もちろん、PIC16F887のコーディングの段階から上位機種への移植を意識
して作ってれば、ほぼ無改造で移植できるかもしれないけど。
>>260 レスありがとうございます。
ピンアサインを見た限り、ほぼ上位互換なように見えたので聞いてみました。
2pinにULPWU、36pinにPGMが無いので、Ultra Low-Power Wake-up inputと、
低電圧書き込みが使えないくらいなのかな?程度に考えてました。
262 :
774ワット発電中さん :2011/10/18(火) 17:32:34.06 ID:TI5NymPo
>>259 それ、すごく気になる。データシートにはVCAPが必要と書いてあるが、なくても動いているみたいだし。
>>261 ピン的には同じでも内部のレジスタは違ったりするから多分無理。
>>258 俺がわかんないだけかもしらんけど、LVOが何なのか教えて
データシートを検索しても引っかからなかった
>>259 3桁と4桁じゃ命令セット自体違うし…
>>262 単体の三端子レギュレータだってキャパシタなしで動いたりするじゃん
安定性に問題があるからすべきではない
>>265 > 3桁と4桁じゃ命令セット自体違うし…
アップコンパチじゃないのか?
>>259 PIC1XF1XXX Software Migration 41375A
というのがあるから、それを見ながら移植ということだね。
>>263 >>265 >>267 877から887へは、うまくいったので甘くみてました。
コンパイラならともかく、アセンブラで組んだソフトは移植するのも骨が折れそうですね。
>>258 取り出せる電流が書かれていないということは、
内部で使うだけの能力しかないということだよ。
CVREFと同じ扱いだね。
カルロス
ゴーン
>>271 「電流ブースト回路」で幸せになれるかも。
275 :
774ワット発電中さん :2011/10/19(水) 10:16:43.53 ID:dFAAza60
みんなよくバイクとか車とかに自作の回路つなげようと思うよね。 俺もよく自作で電子回路とか作ってデスクトップ上では問題がおきたことがないけど 一般行動を走る凶器につないで使おうとはあまり思わないな。
276 :
のうし :2011/10/19(水) 10:31:39.13 ID:yq0yYtx/
バイクや車はイグニッションとかのノイズやら、電源の変動があるからマイコンなんか暴走しまくる。 このあたりのノウハウが要ることもあるぞ。DVD君みたいに。
>>274 要求にあったLDOを外付けするのが正解だと思うよ。
すみません、どなたか助けてください。 PIC BASIC PROで最初に定義するのに @ DEVICE PIC12F615,, MCLR_OFF, WDT_OFF, IOSCFS_8MHZ, INTRC_OSC_NOCLKOUT ってやってみてるんですが、 なぜかエラーが出るようになってしまいました。 以前のPCではこのまま動いて変換できていたのですが、 PCを買い換えて同じプログラムを変換しようとすると、 Warning[207] Found label after column 1,(DEVICE) Error[122] Illegal opcode(PIC12F615) とでてしまいまうように・・・。 いまさらBASICなんてと思われる方もおられるかもしれませんが、 どなたかアドバイスをお願いします。
280 :
233 :2011/10/19(水) 16:02:34.18 ID:TncVKa00
>>279 DEVICE がラベルで、PIC12F615 がオペコードといわれている。
REAL ICEってPGC/PGDのラインがシビアなのね。 プルアップしちゃいけませんってのは書いてあったけど、LSTTLのファンイン一個でつないでも動かない。 PICkIT2と3では動いてたので悩んでしまったよ。 んで、PICkIT3のデバックはPICKIT2に比べて超早いのね。 PICkIT3のスタンドアローン書き込みツールはPICkIT2よりノロノロなのに。
>>278 たぶん、
>>258 はLDOをケチりたいと先読みしてみたw
他、基準電圧源からもう少し引っ張りたいときにも使えるから、覚えておいて損はないしね。
なんかPIC16Fでつくるおもしろくてすごいもの教えて下さい
LEDチカチカ
リレーカチカチ
>>283 LDOのデータシートによく紹介されている電流ブースト回路は、PIC内蔵のLDOには使えないよね。
基準電圧源だと、バッファを入れたら誤差が入ってしまうかも。
>>284 キャラクタLCDに下記の内容を表示
■■■■■■■■■■■■■■■■
□□□□□□□□□□□□□□□□
今からならクリスマスに間に合うから、壮大なイルミネーションを作るのだ
にちゃんびゅーわ作ってよ
iPhoneみたいな携帯作って。名前は「PicPhone」
>>11-13 > 203 名前:774ワット発電中さん[sage] 投稿日:2011/10/20(木) 01:44:22.19 ID:V02RJ2yg
> 彼でなくても、常識的に考えて秋月だけは避けるだろう。
> 送料バカみたいに高いし。少しは共立やデジット、千石、マルツを見習え、と。
高いと言いつつマルツとな?
PICは秋月が一番安いんじゃないか?
295 :
11-13 :2011/10/20(木) 08:25:18.05 ID:KI26bcPa
>292 そう思うなら 各店のPICリストを作ってくれ。
このスレって、秋月の宣伝臭がプンプンするんだよなぁ
で? PIC関係で秋月以外のいい店があればどんどん出せばいい。
品揃えと価格のどちらも小売トップなのは否定できまい 宣伝言われてもね〜、越えるショップ紹介してよ、そしたらそっちの事でいろいろ書くから
PIC単体なら秋月しか無いだろう。 メジャー型番さえありゃあ品揃え的には問題ないし。 他の部品も含めてなら通販スレにでも行くべ。 スレ違いだからな。
型番によっては秋月一択だったりするし
宣伝乙
まあ前スレで終わってる話なんだけどね
854 名前:774ワット発電中さん[sage] 投稿日:2011/08/11(木) 07:41:03.06 ID:XbQxC0dd
>>851 > PIC取扱品種の多さ、入手の容易さで秋月を越える小売があれば
それ言ったら終わってしまうやん。
PICだけで9,000種もヒットするDigiKeyに秋月が勝てる訳ないし。
「宣伝乙」って言われるのがオチ。。。
でも、でじきーのめどさは…
グラフィック液晶とPS/2キー付けてBASIC動かそうと思ったんだけど無理でした・・・・
>>291 フィリピンのスーパーマーケット行くとその場で携帯電話に
いろいろハンダ付けしてくれるのを思い出した。
>>304 BASICインタプリタとかをPICに搭載するのかと思った。
PICでラジコン飛行機飛ばしたいお(^ω^) だれかつくりかたおしえてお(^ω^)
USBでプロポを繋いで画面の中で飛ばすのでも楽しいぞ
>>308 >飛ばしたいお
>おしえてお
「お」って何だ? 「お」って。 バカじゃないの? 普通に言えよ。
313 :
774ワット発電中さん :2011/10/21(金) 08:41:58.90 ID:Y+gsxxHC
ここは2ちゃんねる
pic24シリーズのusbホスト機能でbluetooth ドングル使ってる人いない?
>>311 「お」じゃなくて「お(^ω^)」でひとかたまりなんだよ
PICkit3ではシリアルEEPROMの書き込みはできないのでしょうか?
PICでラジコン飛行機飛ばしたい 「お(^ω^)」 だれかつくりかたおしえて 「お(^ω^) 」 変なの〜。
昔、「にょ」ってのは流行ったんだよ 俺も恥ずかしながら使ったにょ!
特殊な語尾を付けるのはキャラ付けの基本なんだにゅ そこを突っ込まれると心をえぐられた気分がするにゅ にゅ?PICと関係ないからそろそろお暇するにゅ ・・・こんな感じだから、普通に使うとうざい事この上ないにゅ
322 :
774ワット発電中さん :2011/10/22(土) 11:02:02.14 ID:dzIzlxSu
昔、「ぎょ」ってのは流行ったんだよ 俺も恥ずかしながら使ったぎょぎょーーーー!!!
にゅ、の中の人は出世したけど、にょ、の中の人は落ち目だな・・・
猫っぽいのは にゃ ねずみっぽいのは ちゅー ゴリラっぽいのは ゴリ が基本だろ
中国っぽいのは アル 韓国っぽいのは ニダ
>>321 16F887Aで作ろうと思ったけどやっぱり無理かw
>>327 はやく16F8XXとかいうゆとり向けマイコンから脱却できるといいのにねw
(嫌ならPIC24H使えるようになれよw)
PIC24をコアにして、ハード駆動用に幾つかPICを組み合わせたら BASICパソコン出来るんじゃね?
330 :
774ワット発電中さん :2011/10/23(日) 12:33:24.96 ID:i69IgkAx
ノートマイコン
何が変なの?
>>332 「ノートマイコン」の検索結果 約 2,080 件 (0.18 秒)
「ノートマイコン 逮捕」の検索結果 約 1,110 件 (0.22 秒
ま、ググル先生で1000件以下ってようするにゴミってことでしょ。
PICでハッキングツール作れる?
>>337 昔、プレステのコピープロテクトを解除するのにPICが使われたんじゃなかったっけ?
共立に行ったらpicの売り場のところに、 プログラムは書き込まれてないのでそのままではmod-chipとして使えない旨が貼られてた
今の話?
342 :
774ワット発電中さん :2011/10/24(月) 17:11:19.45 ID:gnRivjhi
>>265 ありがとう。おっしゃるとうりですね。
16F887から16F1939への置き換えはあきらめます。
しかし、落とし穴にはまる人おおいんだろうなぁ。
置き換える必要はないが、新規のプロジェクトで1939使えないのって、情けないぞ
かなり小規模の変更で載せ換えたけどな 少なくとも回路は何も変えなかったような
インクルードファイル変えるだけで、コンパイラが吸収してくれないのかな?
PIC18にするかどうか悩むところではあるね。
PIC18( ´,_ゝ`)? 24より性能悪くてただ高いだけの石かぁw。 そんなオワコンなんかゴミだろ。 当然16Fか18Fしか扱えない自称開発者もゆとり以下w
>>348 バカにするな。
PIC16Fの時代があってこそ、PIC24があるんだぞ。
どの品種でも使えることのほうが、PIC24にしがみつくより、100倍有用だ。
TPO、コスト、入手性に応じて使い分ければそれで済む話。 通勤に高級車使っても、結局は移動手段だし。自己満足の世界。
安く作って高く売るアルね
なんでいまさらPIC18? PIC24F32KAxxxとか安いよ!
使いたい人は使えばいいと思うが、なんでそんなに必死に叩くのか不思議。
>>352 24F安いけど情報少なくて使い方わからん
24Fって3.3V系じゃなかったっけ? 調べもせずに書いているので、違ったら教えろ下さい
24Fに5V系があれば俺はAVRに移行しなかった 断言できる
357 :
774ワット発電中さん :2011/10/24(月) 22:24:00.52 ID:BVAsJMtj
24FってUSB機能ある?
>356 5Vで使える、dsPIC30系じゃダメだったの? dsPIC30ってペリフェラルのReMap機能が無い位で 命令体系も24Fや24Hと同じだし(+DSP命令) 総合的にみても24Fより上だと思うけど。
この前データシートみてて気がついたけど VDD上限3.6V系で 5Vトレラント入力可能なのっててっきり24Fだけと思ってたけど 24H,dsPIC33でもあるんだね。 アナログ入力と排他実装になっているようだけど
360 :
774ワット発電中さん :2011/10/24(月) 23:11:18.22 ID:/eMEbz5+
361 :
774ワット発電中さん :2011/10/25(火) 00:47:07.77 ID:bsiRubGP
>>360 24系にもUSBあるのか。秋月で最初のころに24系の機能をチェックしてたときUSB機能が
なかったから。でも24系じゃなくて18系から選ぼうとする意図は基本的にUSBの有無なんじゃ
ないかと思った。
>>362 webに転がってるソースを使ってみて覚えるっていうタイプなんじゃないかしら
たまに堂々とサンプルまで公開してるくせに間違ってるソースとかあって悶える。PWMの2bitの扱いとか…オシロ無いと気付かないんだこれが。
365 :
774ワット発電中さん :2011/10/25(火) 14:11:22.67 ID:bsiRubGP
>>364 「PWMの2bitの扱いとか」ってのをもう少し詳しく解説して。
上位8ビットだけ使おうとすると下位2ビットって結構曲者なんだよな。
TRISAレジスタとかTRISBレジスタの「TRIS」って何の略ですか? 出てくるたびに気になってしょうがない
PICじゃないけど仕事で買った教育用ボードがクソだったときのプロジェクトの進みが遅いのは許しがたい。 なんで、SRAM使わない設定になっているはずなのに、アドレスとかデータのピンが勝手にSRAMにアクセスしてんだよ、取り込んだデータ勝手SRAMに渡してんじゃねーよ。 とか。
TRI-State?
>>367 「なっている筈」だからw
評価ボード買わずに、データシートとアプリノートだけで動くモノを作るのがプロ。
そんなスキル不足なら、素直にPICに安住してれば?
370 :
774ワット発電中さん :2011/10/25(火) 20:48:47.73 ID:bsiRubGP
>>367 その問題は解決した?原因は何だったのか気になったので。
あ、かけてた。 >368 いや、…さすがに書けないけど最近のボード。 書こうとも思ったが、誰か見てそうなんで怖いw >369 やっぱりそうなのか…orz …社内で誰も32ビットマイコン使ったことが無いのに必要性能を満たす(カメラ付く)からコレでって言われたんだよ。 (社長とか、上長とかから) そりゃ満たしてたけど、購入後にハードとソフトの開発者が違うんで質問は向こうに問い合わせてください(で、個人のサイトのアドレス)とか言われる担当者のみにもなってください。 というか、俺ハード担当なのになんでソフトデバックまでさせられたんだよコンチクショウって感じですええ。 1週間ぐらいは結局それがわかるまで一人ハードの確認してた。向こう(購入したボード)で動いているんだからソフトの問題とは思えないって言われながらね。 文字通り全ピン当たらないと上長が許してくれなくてまじ地獄でしたよええ。 で取り込んだデータを勝手にSRAMに送り込んでいたのに気が付かず、マイコン内のRAMからデータをぶっこぬいてでてないな…と そりゃ出ないわ俺の200時間残業返せ。 個人的にもPICがいいと思います。ウチみたいな場当たりで明日届くからとか買い物しちゃう零細は。 というか性能が足りてりゃ4bitでも2bitでもいいよ、マジで。 でもCQのSHみたいなへんてこマイコン大好き。早く出ないかなSH7268…。
ご興味にお答えできるんならと。 >370 原因はサンプルソースを読み解けてなかったから、とも言えるかなぁ…。 まあ、検証用に買おうぜって言っておきながら、でも期日が迫ってるんで…とそれが来るまえに一枚作ってウダウダ言っているわが社がおかしいんだが。 (当然ハードにも色々無理があった) 結果サンプルソース上でI/Oたたきそうな機能を全部切り捨ててもらった。 (シリアル通信もLCDコントローラもその他も…みたいな感じで) 冗談抜きに切り捨てた上で必要なものだけ一つ一つ確認しながら実装してもらった。 結局、色んな構造体内で個別にI/O叩かせてるのをフラグで処理し切れてないのが問題だったらしい。 (だからわが社で作った方では存在しないSRAMを叩きに行くようなデジタル回りが出来上がったりしているわけで) おかげさまで並行開発していたハコのバッテリー周りで(購入した基板の)消費電流まで見切れず、ワーストそのもので計算してバッテリーを必要量の○倍ぐらい実装しちまったよコンチクショウ…。 さすがにスレチでアレなんでこの辺でいいですよね? スパースカラーとか無いけど、PICでも手軽にデコーダIC挟んだだけでNTSCとかPALとかのカメラとつなげられたらいいのに…。 おかげさまでアナデバさんから(個人的に)色々サンプル貰って楽しめてるし、3.3V系へのとっつきにくさも無くなったし。 仕事失う前に一枚二枚、需要もなさそうな変なボードでも作って遊んで見ようかと思ってる。 PICにも使えればいいのにと思ふ マジスレチすまそ。
>364 おどかすから慌ててデータシート確認しちゃったよ。 もしかしてCCPxCONのbit4じゃなくてbit5がLSBなのかと… 普通にCCPRxL<7:0>,CCPxCON<5:4>で10bit分と読めるんだけど 何か間違ってる?
入手性の良さと価格に惹かれて別マイコンからPICに移行しようかと周辺事情を調べてます。 PICkit2の簡易ロジアナは便利そうだと思ったんですがPICkit3では省略されているのでしょうか?
グダグダ長いな つまりハードとソフトのアンマッチが原因で、 それはサンプルソフトをろくに読まずにハード設計したということか
ハード屋がソフトに手を出すのも、その逆も効率が悪いってこった 当たり前すぎて何もいえない 零細だから分担できなかったのだろう、あえて言おう乙であると
>>365 8bitで使うときって、タイマー側の下2bitと100%と0%に気をつける以外は0でも書いて捨て置けばよくないか?
レジスタのビットそのものを間違ってるサンプルは見たなあ。オシロで確認するまで気付かなかった俺もアレだが。
378 :
233 :2011/10/25(火) 23:32:45.50 ID:KrqoMgc0
ハードとソフトの両方やるのが楽しいのに さらにメカもやれると最強
380 :
774ワット発電中さん :2011/10/26(水) 00:00:46.83 ID:bsiRubGP
>>377 10ビットより低い分解能で使うと完全なリニアにはならないってことか。
>>379 学生の研究レベルではSH+FPGAで画像処理して、
機械系まで動かせたらネ申だぞ。
長期実務経験者の尺度は何とも言えない。ってか、1年経験でソフトだけなら余裕でしょ。
全部入りの職業SEは普通の会社では嫌われるからそういう人はコンサルでもやるのか。
382 :
774ワット発電中さん :2011/10/26(水) 01:08:54.29 ID:kxY4C8DX
>380 ところがどっこい、10bitだと仕様上100%には絶対にできない(1024段階に対して1023までしか表現できないから) ので、0〜100%フルに使うにはそれ以下でないと駄目なのだw 俺はキリのいい1000でいつも使ってる。
ちょっと意味がわからないですね
なに言っているの。 0〜1023、ちょうど1024の段階じゃん。
385 :
774ワット発電中さん :2011/10/26(水) 07:20:56.60 ID:kxY4C8DX
>384 そう、1023まで。でも1024かかないと波形は100%にならないんだ。 データシート読むかオシロで見てみ。
パルス幅が1024ステップなら0〜1023でなく0〜1024で設定できないといけないな 精度が不要なら1023と1024は100%にして、直接ポートをON出力すればいい
>>382 理解できないです。
0〜100%を1%単位で刻むなら、101段階になるのですが…
0オリジンで1024段階なら0〜1023は必然です。
388 :
774ワット発電中さん :2011/10/26(水) 07:50:37.46 ID:kxY4C8DX
あー、1024段階うんぬんが表現おかしいか。 そこは忘れろ。 一周期の期間が(PR2+1)*4で最大1024なのに対してDUTYが1023までしか書けない、て言いたいのよ。
いくら机上で考えても、現物で調べた結果が結論になるんだろうな、この場合。
以前、PIC16F88(87xだったかも)でやったときは、確かに3FFを書き込んでも PWMの周期でスパイク状にLが出力されてたのがオシロで見えたよ。
>>390 そのヒゲでイルミネーションLEDがかすかに光るんだな。 プログラムでヒゲを殺してる w
392 :
774ワット発電中さん :2011/10/26(水) 09:48:02.34 ID:2NQPbMDf
おっとおれのPWMも毎周期ごとに初めに必ず一瞬信号が立つのだが同じ理由なのだろうか?
完全なL(DYTY0%)には出来るはずだが。
1周期のHI:LOW比が0:1024〜1023:1という実装なんでしょ どこもおかしくはないですね
周期を短くしたら?
>395 100%にならない事に違和感を感じない人ならそうでしょうね。 あえていうなら君がおかしい。
0、100%のときだけPWMやめりゃいいじゃん。
デジタル出力で0と1にすりゃ0%も100%も思いのままと思ったさ
>398 399 0%と100%判定して分岐してPWM切って、それ以外の時はまたONにして。とか面倒くせえw 周期1020とか1000にすりゃいいだろ。
>>400 それぐらいが面倒くさいと感じるなら、マイコンで遊ぶのは止めた方が良いのでは?
>401 それしか手段がない場合ならともかく、明らかに無駄で遠回りな手段を好き好んで使いたくはないですな。 面倒だから簡単な手段を模索する、というのは技術者の本分じゃないんですか?
簡単そうに見えて中では複雑なことしてる、というのも一つの形
>>402 君にはマイコンは荷が重過ぎる。 よううく、これからを考えようね!
要求仕様を満たしてるなら
>>400 の方がスマートだと思うが。
個人の自由だからどうでも良いがな
>404 なんだ無能、反論できなくなったか?w
できるだけ分解能が欲しい or ほとんど影響ない 使い切らないと気が済まない or 動けばいい 好きにすればいいんじゃね?
えっ? PWMカウンタを使うかぎりどんな設定でも発生するんじゃないの?
レベル低すぎw PICで無理するぐらいなら、 素直にArduinoに移ったらw
お前らにはスルーカが足りない
何かが変
頭痛が痛い;;
PICが低レベルとは一言も言っていない。 英文データシートもろくに読めない輩は、PICすら扱えないから、 もっと稚拙なArduinoでシコって寝ろって言う意味。
Arduino >>>>> 超えられない壁 >>>>> PIC
416 :
774ワット発電中さん :2011/10/28(金) 00:47:21.79 ID:fEjRxHMu
>400 >401 机上論をいくら戦わせても無意味 >400の方法で実際の回路でやってみると Duty50% 電圧1.6V Dut 75% 電圧2.4V Duty99% 電圧3.2V Duty100% 電圧3.7V となっちゃったよ。 Duty99%をDuty100%とみなす。が実際の「答え」では?
>419 その電圧はどう測ってそうなったの…おかしいと思わないの?
>419 お前が何を言っているのか本気で判らん。
つーか99%と100%で電圧とやらが1割以上違うことに疑問を感じないのかw なんの電圧だか知らんが。
>>420 メンゴ
>>400 の方法じゃなくて
>>398 の方法だった。
マブチモータを回した、モータドライバICはTA7291P
PWMの周期は5,000Hz
おかしいかも知れないけど、俺はこの結果でいいんだ。
深入りはしないDuty99%=Duty100%みなしで、プログラムもシンプルだし
実用上何の問題もないし、俺はこれでいいんだ。
どーやって計ったんだろうかね、PWMの電圧… 99%がへんちきりんなのは「実際の回路」とやらのせいじゃね?
お、打ってたら その結果でいいのか… というか自己完結してるならそこで話終わってないか?
実験が、実験の体を成していないところは、とりあえず置いておくにしても・・・ ID:dsSvf563 はDutyが厳密に100%になら無いと、信号に「ヒゲ」が出て困る用途がある という、この議論のそもそもの出発点を理解して無いのではないか。
要求spec満たせる、より簡単な方選べばいいよ
>>425 「俺はこれでいいんだ。」と強がりを言ったけど、本当は「回路」が悪いんじゃ
ないかなと思ってる。TA7291Pの電圧降下が大きいのが不満なんだ。MP4212に変える
と問題が大きく改善されるのかなあと考えてる。機会があったらMP4212を試して
みようと思ってるが時間が取れなくて
どうせやるなら信号反転してLO入力で回転、HI停止にしてやるとこの議論の出発点がわかるよ。 止めたつもりがジリジリと動き続ける…
>>426 この議論のそもそもの出発点を理解していません
>>429 俺はDuty0%で使うことがなかったのでわからなかったんだけど
Duty0%にしてもモータがジリジリと動いてしまうのならPICの
PWM機能 問題だな。俺ならDuty0%の時は例外処理に飛ばして
強制的に電源offにしてしまうプログラムを組む
>>429 1%の電力でモーターって回るものなの?
>>432 Duty20%以下になったらモータ回りませんでした。
>>433 ホントだ。また話がもどってる。
そうか、PWMの分解能を稼ぎたい為に、PWM周期を上げられないニーズも
あるよなあ。ニーズとPICの仕様のトレードオフになるんだよな。
(また、そもそもの出発点からハズレてる。)
円高だしデジキーとかいう通販でも検索してみるか。
20桁くらいの7セグを表示したいのですが、ダイナミック点灯は避けたいのですが、 7セグ1個に1個のメモリーICを使って一度送った値を表示し続けるようにしたいのですが、 そういう専用ICとか定番の方法があったら教えて欲しいです。
>436 専用IC使わなくても、PIC複数個で使って作ればいいんでない。 7セグならドット含めて1桁に8pin必要だけど40ピンのPICなら4桁分表示できる (電流的には厳しいかもしれないのでTr必要かな) 親PICから桁+数値のデータ送って対応する子PICだけが反応して表示書き換える USART通信でも親から子への一方通行で良いからで子側が複数でも問題ない
74系に何があるか全部目を通しておくのも必要だよな
TTL全盛期にはTIのTTLデータブックが設計者必携だったけど今は無いのね。 特に目的が無くてもパラパラめくって流し読みしているだけでも面白かったな。
>>436 俺様なら
PICだけ使うなら5個のPIC16F887をI2Cスレーブにして異なるI2Cアドレス割り振って
4桁分ずつ送るね
でも74HC164をジャンクで一杯もってるから20個シリアル接続して
7セグのコモン側にPchなりNchなりのFETかましてOFFにした状態で
データをシリアル出力して完了したらFET ONで表示するものいいね
SPI使うと速く転送できるかな
74HC273 74HC373 74HC573 74HC574のジャンクも一杯もってるから
20個亀の子配線して8bitデータを共通配線してPICのBポートとかに接続
各クロック端子は20bit分のPICのポートで管理すればPIC16F887とか1個でできるね
>>436 各桁にPIC16F1823一個ずつ付けてI2C
>>445 HC164にご執心のようだけど、
HC164はレジスタの出力がそのまま出力に出ているので、
データ転送中に出力がリアルに変化してしまわない?
FET ONで表示するってのも、よくわからない。転送完了まで7segはoffということ?
その点、HC595なら、RCK(レジスタークロック)があって、
ダブルラッチ構造なので、全部のデータを転送した後に、
RCKをアサートすれば、全bitが同時にパッと変化するから、HC164より上品に操作できないか?
標準ゲートのシリアルものの定番と言えば、74HC166と74HC595だと思うけどなあ。
書き込み速度にも依ると思うけど、8bitパラレルでラッチで保持もいいけど、配線が面倒たよね。
シリアルでホイッと簡単にスマートにやりたいよね。
448 :
のうし :2011/10/29(土) 03:27:57.27 ID:gOHxbv8a
HC164で7セグ数桁ってのやったことある。 たしかにシフトした際に一瞬全部のセグメントが点くけどたいしたことなかった。 どうしてもならOEがある4094を使えばいい。
>>448 > たいしたことなかった。
どう感じるかは個人で違うだろ?
だからその話をしてるんだろ?
451 :
448 :2011/10/29(土) 08:18:58.77 ID:gOHxbv8a
シフトの早さにもよるから、早いほど影響はないと思う。 ちなみに例のやつは4桁で1msくらいでドライブした。表示間隔は1秒ごとくらい、よほど気にしなければわからないかも‥ つうか、ブレットボードで実験してみたら?
>>443 最近の情勢はよく知らんが、ディスコンになっちゃったのも結構あるんだろうなぁ
>>448 >どうしてもならOEがある4094を使えばいい。
この場合、OEではなくて、Strobeがあるのがメリットなんじゃないの?
最初の人がダイナミックはやだと言ってるのに、表示が一瞬でもちらついたり 消えたりする方法を教えるってのはどうなのかな。
HC4511が7セグ専用ICっぽい、1桁に1個使用。
昔よく使ったなぁ@4511
457 :
451 :2011/10/29(土) 15:46:12.54 ID:gOHxbv8a
>>454 ダイナミックが嫌なのは20桁あるからじゃね? という思い込み
>>436 20桁の7セグ どういう用途に使うのか知りたい
テレビじゃね? フリッカー対策とかめんどくさいんだろ ダメな大道具だな
なるほどな 20桁のどれを指定するかのセレクタも、5bit入力みたいな都合のいいの無いような
464 :
451 :2011/10/29(土) 18:09:07.24 ID:gOHxbv8a
>>462 テレビ番組の大道具さんですか。可能性ありですね。
でも、大道具さん仲間でノウハウ持っているような???
周波数カウンタだったら紙だな
テレビの大道具なら高価なラッチドライバ付き7segをジャカジャカ使うだろ 高輝度で大型を求めるなら尚更
テレビのカメラって感度低いからな ガンガンにライト照らして撮影する LEDも相当光らないと見えない
469 :
464 :2011/10/30(日) 06:37:32.34 ID:sIY6Fq6w
以前に学祭やステージ用のデカい(40cm高)7セグを作ったことある。 ICL7107の出力を簡単なSSRでスイッチして40W電球のセグメントにした。 4桁だったもんだから、8888の表示では1kW以上になった。
I/Oの多いPICで直接ドライブが一番安上がりか。 下手にロジックIC買うよりもマイコンチップのほうが安いとかw
PICで専用ICの肩代わりはいいんだが、 問題は電流なんだよな。 単に低速でロジックだけを扱うんなら いいんだが。
>>436 は7セグ用の専用ICがあるのか?どうか?知りたかっただけだろう。
74HC4511の情報をゲットしただけで十分満足してんじゃね。その後レスもないし
使用する7セグの大きさ(電流量)情報がないと多ピンPICのアイデアは無意味
ダイナミック点灯を拒否するなら、たぶん点灯電流の問題が最大課題になる
473 :
774ワット発電中さん :2011/10/30(日) 09:22:16.67 ID:ZgH/J5vg
20桁ってのは長いね。もしダイナミック点灯でやったら見え方に問題がでてきそうだ。 ダイナミック点灯が使える桁数としては最大で8桁くらいだろうか。
>>473 >>436 も20桁表示に実際に取り組み始めたら電流問題の壁にぶつかり
影響の無い範囲内でダイナミック点灯と取り入れ、
20桁を5ブロクに分け、4桁のダイナミック点灯 と言う所位に落ち着くん
じゃね?そうなると1桁毎HC4511でやるか?多ピンPICでやる方が有利か?
を考えなきゃいけなくなるんじゃね?
ここまでCPLDの出番なしか・・・
この後も無いような気がする。 出力に何らかのドライバを挟むんなら今までの流れでも十分網羅してるし。
7セグ1個に対してPIC1個使って、I2Cでコマンドを受けて表示する 7セグの幅の基板を起こして量産しておいて、次の大道具でも使い回す
I2Cインターフェースの1桁7セグモジュール 桁の順番は設定したI2Cスレーブアドレスに対応 スレーブアドレスはリセット時EEPROMからの読み出しで ISPでEEPROMにスレーブアドレスを書き込めば桁の順番は自由自在 1個500円 これは売れるよ!
>>478 I2Cだとアドレスの扱いが面倒だね。
どうせならそのEEPROM書き込みもI2Cでしょう。
リセットジャンパで工場出荷アドレスにできるようにすれば。
しかし7SEG1桁+PIC(EEPROM)の抱き合わせユニットで500円てどうなんだろ。
4桁ぐらいなら欲しいかな。
小規模な所が製品化か、いい流れだね。 500円なら電源込みの1ワイヤー制御にまで落とし込んで欲しい所。
ダイナミック点灯しとるがな
483 :
774ワット発電中さん :2011/10/30(日) 14:41:33.02 ID:n2lh2C6G
なんで74HC595でやらないの?
だよな、I2Cって、回線インピーダンスも高いし、手続きも要るし、 多桁LEDの駆動になぜふさわしいのかわからない。 どうしてもPICを使いたいなら、SPIで通信した方が良いと思う。 俺がPICでやるなら、 シリアルならHC595+8pin PIC、 パラレルならHC573+16F88などの18pin PICだな。 もっと楽ちんなのは、CPLDだけど、20桁×7セグメント=140るので、 XC95256、XCR3256以上になるね。
そんな配線したくねー シリアル通信すら面倒なので、無線で送る
>484 今となっては74HCって割高なんだよ。8回路系のなんて用途が限定されるのに 1個100円以上する。速度が必要ないなら安い多ピンのマイコンの方が向いてる。
74HC595ならバラでも20円辺りで買えるから 多ピンマイコン数個よりは安いんじゃないかと
それ私も知りたい
DigiKey辺りだと1個50円弱で買えるみたいだけど 必要な時に送料\2000払ってまで買うのはもったいないし、かと言って \7500以上購入で送料無料だからって用途も未定なのに買いだめするのも もったいないし… >487 でも1個20円なら買っといてもいいですね。ぜひ教えてください
>>474 どうしてもスタティック点灯じゃないと駄目、って事じゃなければ
それが一番良さそうだね。
493 :
436 :2011/10/30(日) 23:39:56.81 ID:6ViJUr6G
関連も含めてたくさん情報をありがとうございます。 いろんな方法がありそうですね 超初心者の自分にはIOが14個あるPICを20個使うのが一番誘惑されるのですが レベルシフターが一般的ならそれを試してみようと思います 用途はいつも同じような計算をする計算機みたいなものです。 a/b*c=xみたいな計算でそれぞれが5桁でどれを入力するか表示するかで 表示切替ボタン設けたくないので、20個の7セグを並べたいです。 なぜダイナミック点灯はだめかというのは肉眼でもちらつきそうに思ったからです 撮影用途ではないです。 テレビでちらつかない7セグが映るとすごく気になります。業務用の機器とかは標準なのかな?
あら、HC595はシフトレジスタだった。 でも、所詮HCだから、LED直接繋ぐような使い方は向いていない。
ACがいいと?
PICワンタイム(OTP)マイコンって 何で1回しか書き込めないの? そちらの方が消えにくいとか? 誤動作し難いとか?
>何で1回しか書き込めないの? ワンタイム(OTP)マイコンだから。
>>495 >でも、所詮HCだから、LED直接繋ぐような使い方は向いていない。
おいおい、HCなら十分にLED直接駆動できるよ。
東芝のTB62777とかなら、LEDの制限抵抗無しでOK。
外部抵抗1本で、まとめて電流調整できるよ。
>497 ファームウェア更新を考慮する必要がない製品量産用。
>>500-501 ありがと
そんな物ですか?
コストですか・・・
てっきり、ノイズでプログラムが消えにくいとか
プログラムの保持年数が長いとか
いろいろ考えて悩んでしまったよ?w
>>498 俺だって、日本人なので日本語くらい読めるw
PIC16F84でZigBeeの文字列送受信できる?
>>504 できるけど、なんで今、化石PICの16F84(A?)を使わなきゃいけないの?
化石と入っても秋月で割高で売っているのは人気のある証拠。
>>497 紫外線消去型のEPROMを載せたマイコン(窓付き)が元になってて、窓を無くしたのがワンタイム。
フラッシュROMが出来る前の技術で作られてます。
書き換えできないと不便な用途(デバッグ不十分で出荷されるとか?w)には向かないから
フラッシュROMタイプが重宝されるようになった。
普通は、マスクROMマイコンを使った製品の量産試作とかで使用する。
PIC16F1827で作ったプログラムをピン数が足りなくなったので16F1938用に書き換えて書き込みしようとしています。 Target Device ID (00000000) does not match expected Device ID (000023a0). こんなエラーが出てPICkit3からプログラムを書き込み出来ません。 何が悪いのでしょうか?
PICが種類ごとに持っていて読みだし可能なデバイスIDを読み出してみたら00000000で PIC16F1938として期待される値000023a0と違う つまりID読出という基本的なやりとりがPICkit3とターゲットのPIC16F1938との間でできていない とか
秋月は16f84しか使えない無能なオワコンエンジニアから搾取しているだけ 教科書と同じものしか使えないゆとりか 新しい物が覚えられない老害なんだろw
秋月にしては設定価格がやけに高いよね。 労咳プライスか。なるほど。 もしかすると店頭クレーム対応度が価格に反映されてんのか。
>>512 オワコンって何?
変な省略語を使って、自慢気に語るのが、
おバカさんって感じだね
さすがにオワコンを全く知らないというのはどうかと 略称をバカにしたいなら、もっと気の利いた切り返しが欲しい まあ、オワコン自体がアホいんだどさ。 そもそも「オワコン」の中にある「コンテンツ」を把握して使ってるやつってもう居ないだろ、これ。
16F84Aが高いのは高くても売れるからだと思うな。商売ってそんなもんでしょ?
>>510-511 ありがとうございます。
とはいうものの、どうすればいいのかさっぱりです。
英文のはMPLAB IDEは自分のバージョンより若いので既に解決済みの問題と思われ。
>>517 単純に結線が間違っているだけ。電源供給の有無。って事じゃないかなぁ?
単純な構成(5本結線)をブレッドボードで作ってみると他の影響を排除
できるので原因究明が早くできる可能性はあるかと。
>>516 学校で教材として使っている場合も多いし
PICKITって買ったことないけど、ICSPできないデバイスを秋月で扱ってるの?
>>518 そうですね。どうやら結線が悪いようです。
試しに1本ずつピンを外していって変化を調べたところ、
なんと全て外したき、PICkit3を完全に外した時、
まったく同じTarget Device ID (00000000) does not match expected Device
ID (000023a0).
とでました。なんともゆるいエラー表示だなあと思いました。
配線が悪いのだと思いますが、それほど複雑でもないし間違えようも無いと思うし、
案外、ブレッドボードでなくて基板に起こすと直ったりするのかなと。
>521 2個あるVSSの片方しか繋いでいないとか? 適当だけど
PIC16F84 チョベリグ!!o(*'▽'*)
524 :
774ワット発電中さん :2011/10/31(月) 19:54:35.58 ID:uYUcoj9Q
PIC16F88 も、チョベリグ!!o(*'▽'*)
>>522 いやそれが2個あるVSSの片方だけにしたら直りました。www
VDDの反対側のVSSだけにしたら上手く繋がりました。
何故なんでしょうかね?VSSが2つあるのはそもそも何故なのか?
それだけでなく基板にも起こしました。
ブレッドボードではうまく行かなかったです。
で今度は違うエラーに悩んでいます。
プログラムすると
The following memory regions failed to program correctly:
Debug Executive
Programming failed
などと出ます。1827ではこんなことは無かったのに1938にしただけでこんなになるなんて。
>>525 配線VSSの件、何か変な気がする。予備のデバイスあれば試したいところ。
デバイスの選択が違っている気もするし、もしかしたらプログラムメモリサイズ
ぎりぎりでDebugルーチンが組み込めなかったり。推測だけど。。
プログラミングの他、イレーズやブランクチェックも駄目なの?
>>526 プログラム時
Programming...
The following memory regions failed to program correctly:
Program Memory
Address: 00000000 Expected Value: 00003080 Received Value: 00003fff
Programming failed
イレーズ時
Erasing...
Erase device complete
ブランクチェック時
Blank Checking...
The following memory regions failed blank check:
Program Memory
Address: 00000003 Expected Value: 00003fff Received Value: 00000fff
Blank check failed
こんな感じですね。
それから
2つ目のVSS、この場合19番ピンですが、これをGNDに繋いだ途端にPICkit3のSTATUSランプが赤く点灯する事からして
利用は判りませんがこれはPICkit3に結線するべきではない気がします。
>>527 家にもまだ少し残ってます。16F84Aと秋月ライターだったのは4年前かな。
プログラム書き直すたびにICソケットに抜き差しするからそのうち脚が折れて使えなくなって、
そのために沢山予備を持っていた。
あと、12F683と675。安いから沢山在庫買ったけど、今はF1PICがあるし、
わざわざ不便な旧シリーズの8ピンはもはや使う事もないだろうな。
>>528 ターゲットの電源電圧は大丈夫?
パスコンは?
ケーブルの長さは?
Vpp, PGC, PGD に余計な部品をつけてない?
STATUSランプは点滅の仕方でエラーを表示するみたいだけど?
電源の安定のためVssを両方つなぐのが正解だと思うよ。
2つのVssの間に電流を流すような使い方はだめだよ。
PIC16F628、PIC16F648、 PIC16F877、PIC16F877A、 PIC16F887 PIC18F(全て) も、チョベリグ!!o(*'▽'*)
>>525 > 何故なんでしょうかね?VSSが2つあるのはそもそも何故なのか?
>>530 > 電源の安定のためVssを両方つなぐのが正解だと思うよ。
俺もPIC内の電源を安定にさせる為と習った。Vssが2つあるPICは、
Vss2つ両方つなぐ様にしている。少し疑問に思っていたけど正解だったんだ。
>>530 >>532 今は余計なものを排除して、5×7センチの基板に最短で配線してPICkit3と16F1938を繋いでいます。
パスコンはVDDと反対側のVSSそして、もう一つのVSSに繋いでいます。
この状態でもう一つのVSSとPICkit3を繋ぐと以下のエラーが出ます。
The overcurrent logic has detected a fault condition on
either VPP or VDD. Please disconnect your circuit check
MCLR or VDD for a short circuit and then reconnect. Also,
ensure that your target current requirements do not exceed
the specified limits.
Failed to properly connect to PICkit 3
というエラーが出ます。
>533 電源端子を間違えている位しか想像がつかないから いっそ画像アップしてみては?
>>528 とは別人ですが、同じような状況がおき、解決策が見つからず、苦戦しています。
どなたか解決策をご教授いただけませんか?
症状はPICKIT3で18F27J53にプログラムを書き込むと以下のエラーメッセージをはいて止まります。
Connecting to MPLAB PICkit 3...
Firmware Suite Version.....01.26.68
Firmware type..............PIC18FJ
Target detected
Device ID Revision = 1
Programming...
configuration memory
Address: 1fff9 Expected Value: ff Received Value: f7
Failed to program device
ググったところ、同じような現象が起きている方がいましたが、根本的解決はできなかったようです。
ttp://broadbeans.blog.so-net.ne.jp/2011-07-28 ttp://broadbeans.blog.so-net.ne.jp/2011-08-17 環境はMacOSX(Lion),MPLABX 7.02です。
いつもVSSは片方しか繋いでないな 単にレイアウトの自由さの為に複数あるとしか思ってない
>>533 >The overcurrent logic has detected a fault condition on either VPP or VDD.
過電流検出回路がVPPまたはVDDのどちらかの障害状態を検出しました。
PICkit 3からVDDを供給しているなら、それがPICkit 3の電源供給能力を超えている。
または、VPPがPICkit 3の電源供給能力を超えている。
PICkit 3の回路図を見ると電流というより電圧でチェックしているみたいだから
PICkit 3が頑張っても期待した電圧に上がらないということだと思う。
テスタで当たってみた?
後は、チップを外した回路をテスタで導通チェックした後に、別のチップを試してみるぐらいかな。
>>535 CONFIG1HのBit3は0のはずなのに1を書き込もうとしているね。
チップの方で強制的に0にされているのかも。
>>533 もしかして、MCLRとVDD接続してる?抵抗付き?
単独書き込みならMCLRとVDDの接続を外してもいけるはず。
>>538 datasheetをみてみたところ、CONFIG1Hのbit3には何も設定されていませんでした。
この場合、具体的にはどのように修正すればいいのでしょうか?
>>540 どんな言語を使っているかわからないけど、コンフィギュレーションの設定をすればよいと思うよ。
それで、使われていないビットに正しい値が設定されるはずです。
VssやVddが複数あったら全部つなげよ。
新デバイスが載ってないが、こうして見ると結構パターンあるな たかが5本、されど5本 複数Vdd/Vssは全部繋ぐべきなの?
>>516 プロセスが古くてダイが大きく、安く作りたくても作れないんでしょ。
>>543 > 複数Vdd/Vssは全部繋ぐべきなの?
当たり前じゃん。さらに全部にパスコン入れとけ。
ピン配列を見れば、IC屋が「ここはこう使ってほしい」と語りかけてくるもんだ。
>>546 同意。
なぜ「全ピンつながなくてもいい」と思えるのだろう。
意味があって複数本出してあるのに。
簡単なことだよ。 どこかに間違いがあるだけ。
そうそう。
>>525 みたいなのが半端な試作して、微妙に動かなくて手に負えなくなりますように
いろいろやって悩んで苦労して少しずつ分かってくるんだろ。 今までVssだと思ってたpinがちがうpinだったりしても、疑わない事には解決しないからな。
アナログ系デバイスだと全部の電源ピンを接続しないと使えないものもあったと記憶している。 NCはGNDにつないではいけないという注意があったりするのでデータシートは熟読しないと危ない。
>>541 コンフィギュレーションをいじってみたところ、いくつかの項目をコメントアウトすることで動作しました。
言語はC18です。
コンフィギュレーションはマイクロチップが配布しているUSB-HIDサンプルの18F47J53のものをそのままコピーして使用していました。
一部コメントアウトを行い、検証したところ、CONFIG1Hで設定されるCP0とCPDIVのコンフィグを行うとエラーが出てくるようです。
最終的なコンフィギュレーションを記述します。
コメントアウトしてある場所が問題のコンフィグです。
#pragma config WDTEN = OFF //WDT disabled (enabled by SWDTEN bit)
#pragma config PLLDIV = 4 //Divide by 3 (12 MHz oscillator input)
#pragma config STVREN = ON //stack overflow/underflow reset enabled
#pragma config XINST = OFF //Extended instruction set disabled
// #pragma config CPUDIV = OSC1 //No CPU system clock divide
// #pragma config CP0 = OFF //Program memory is not code-protected
#pragma config OSC = HSPLL //HS oscillator, PLL enabled, HSPLL used by USB
#pragma config FCMEN = OFF //Fail-Safe Clock Monitor disabled
#pragma config IESO = OFF //Two-Speed Start-up disabled
#pragma config WDTPS = 32768 //1:32768
#pragma config DSWDTOSC = INTOSCREF //DSWDT uses INTOSC/INTRC as clock
#pragma config RTCOSC = T1OSCREF //RTCC uses T1OSC/T1CKI as clock
#pragma config DSBOREN = OFF //Zero-Power BOR disabled in Deep Sleep
#pragma config DSWDTEN = OFF //Disabled
#pragma config DSWDTPS = 8192 //1:8,192 (8.5 seconds)
#pragma config IOL1WAY = OFF //IOLOCK bit can be set and cleared
#pragma config MSSP7B_EN = MSK7 //7 Bit address masking
#pragma config WPFP = PAGE_1 //Write Protect Program Flash Page 0
#pragma config WPEND = PAGE_0 //Start protection at page 0
#pragma config WPCFG = OFF //Write/Erase last page protect Disabled
#pragma config WPDIS = OFF //WPFP[5:0], WPEND, and WPCFG bits ignored
#pragma config CFGPLLEN = OFF
>>554 C18のバグっぽいな。
18F47J53と18F27J53のヘッダファイルの違いかな?
新デバイス情報な 32bitコア(MIPS32-M4K)PGMEM128KB RAM64KB OTG有 28PIN-SPDIPタイプ PIC32MX250F128B 0.8mmピッチの44PIN-TQFPタイプ PIC32MX150F128D Microchip チョベリグ!!o(*'▽'*)
16F84って時代遅れなのかよ(´・ω・`)
559 :
のうし :2011/11/01(火) 21:10:13.00 ID:DM39161U
なのに10F2xx系は別の意味で先端かも‥ ちとしたことですごく上手くやってくれた。
>>557 廃品種になっていないのだから一定の需要はあるのでしょう。
ただ、新しい品種で使われているプロセスは使われていないから
ダイの大きさが大きく値段が下げられないのだと思います。
一覧で見ると温度範囲と電源範囲が違うんだよね。
>>552 いやほんとその一言で気が付きました。
今までVSSだと思っていたものがVDDで、VDDと思っていたのがRB0でしたww
16F1827がたまたまVDDとVSSはピンの真ん中に並んでいたもので、
1938もそうだろうと完全に思い込んでいてデータシートを何度見ても1つずれていることに気が付きませんでした。
それにしても、それならそれで相応しいエラーメッセージをはいて欲しいものです。
IDが違うとかそんなエラーってないでしょうがwww
なんて見苦しい事を言ってみる。
皆さんどうもありがとうございました。
>>561 接続ミスしてもデバイスもPICKIT3も壊れなかったん?
563 :
534 :2011/11/01(火) 22:45:43.58 ID:Slhr1ZVH
>561 まあ、わかってよかったね。 でもID 0のエラーはしょうがないとしても>533のエラーは電源端子を疑うべきだよ。
>>562 そうですね。PICはたまに逆さセットとかしても壊れた事ないですし、簡単には壊れないようですね。
>>563 仰るとおりです。
そんなことよりCCSCのサンプルのLCD.cとソフトウェアUARTを仕込んだらRAM不足って言われてカナシス。 6桁分の7セグも仕込みたかったんだが、無理なのか16F59… ネタで購入したのをやっと使えるようにと思った俺がバカだったのか…。
>>557 保守品だよそれ。簡単にディスコンにされると、業務では困るからね。
新規でそれを使うって言うのは、今更秋月のスーパーAKI−80で新規プロジェクトを作れと言っているようなものだな。
まさか、PIC16F84しかわからないっていうゆとり乙とかいうオチじゃないよな?w
(内蔵機能や番地などが変わるとお手上げって言う例)
>>565 そこまで低機能なPICの場合、アセンブリ言語で組むだろ常考
>567 ソフトウェアUART組むのめんどくさい。 誰かがやってくれるんなら使うけど…程度だなぁ。 (それでも上手くいくかどうか…) 割り込みも無いただの表示機だからホントにムリポならtだのLEDドライバにでも仕立て上げるかな。 ウインカーが内側から外側に流れるような表示になるとかそんなのにでも。 まあとりあえず、ソフトはぶー垂れてるけど、ハード組んで見るか。
>>566 ディスコンなら、代わりのおすすめ品種が表示されるよ。
>>568 ん?と思って秋月見たら型番違いだけど16F57は70円なんだね。
サンプルライブラリを細工すればRAM問題解決しそうな気がする。
LCDや7セグを含めるのだから受信するだろうけど、受信バッファを抑えれば何とかなりそう。
16F59は128byte持っているけど、バンクあたり16byte。
バッファサイズを16以下に抑えれば何とかなりそうな気もする。
>>561 >それにしても、それならそれで相応しいエラーメッセージをはいて欲しいものです。
それを行うためには、追加の回路が必要になるけれど、
ほとんど1回しか使わない回路にチップ面積を使うのは無駄です。
Memory Programming Specificationを調べればわかるけど、
単純な信号のやりとりしかしていないから
正常な接続であることが前提になっているのですよ。
16F59か…よほど値段が安ければ使うかも。 ソフトは制約多いよ。特にスタック2層はキツイ 40ピンにしては安いのがウリだったんだろうが むしろ最近は安いのを探すと、大抵新しいのになるのな
おまえらPICで普段なにしてるん?
おれは仕事
PICの仕事って年収どれぐらい見込めますか?ピンキリなのは判りますが
>>561 乙乙、わかってなにより
で、Hi-TECH Cの良いガイドない?本でもWEBでも良いけど
これはみておけみたいな奴をお願します
>>575 あなたの技術力も営業力もわからんのではなんとも言えない
>>566 おまえ、たまにはまともな事言うんだなw
>>575 PICはメカ系が多い印象。
こうも円高が続くと、海外が多い産業機器メーカーは辛いだろうな。
580 :
576 :2011/11/02(水) 12:46:52.24 ID:20+eZdjl
う〜む、リファレンスページ紹介来るかと期待したが甘かったかw これ↓が方言なのか知りたいのだが日本語の説明ってありますか? bit SW_UP @ ((unsigned)&PORTB*8+3); R&C時代の初めてのCしかしらんと見た事もない予約語に悩まされる 大抵は検索すると何かしら出て「初めてのC」の改版数に驚かされるw 「bit型(構造体なしで書けるの?)変数SW_UP定義」であろう事は処理から読み解けるが、 @?なんだアットマークって(これがHiTECHの方言なのか、組み込み系では一般的記述なのか?) 符号無しでFSRのPORTBに8倍?して3を足す?なんのこっちゃ 多分これも@の続きなのだろうけど何故8倍、何故+3? 部分抜きのテキストで元ネタがどこの何か分からないのが辛いが PICの練習問題だろうから、ポートBのビット3(2?0オリジンかも?)にはSW_UPが接続されているのであろう 予想は出来ても答えはわからん、お試しするとして。。。あ、Lちかすればいいか でも@の明確な意味が知りたい(何故8倍の+3なのかも) ご存知な方教えてくだされ
>>580 それはCCSC独自の書き方じゃね?
HiTechでもそういう書き方するのか?
1バイト=8ビットで、PORTBの3ビット目ということだろう。
番地0ビット0から数えたビット番号をアドレスとして与えてるように見えるが。
582 :
576 :2011/11/02(水) 13:38:52.58 ID:20+eZdjl
>>581 ありがとう、なる程読み方はあってたのか
@を使って書いてあったがHiTECH C のヘッダ内にも多数ある
CCSCも書いてあるとすると組み込み系の標準的書き方なのかもしれない
ANSI-C?ではちと見つけられなかった
プリプロセッサ句も強力なものが多いようだけど
1つずつ読み解くしかないかな
文法説明の日本語が欲しいけど英語しかないのかもしれない
>>580 付属のヘッダファイルを開いてみたらHI-TECH Cにも @ はあったよ。
volatile unsigned char STATUS @ 0x003;
volatile bit CARRY @ ((unsigned)&STATUS*8)+0;
でも、HI-TECH C? for PIC10/12/16 User’s Guide に説明がない!
@ は、bit の時だけ8倍してビット位置を指定している。
コンパイラメーカー間で互換性を高めようと努力しているみたい。
>>583 何故0x08でなく、8なのか?
一見さんじゃなくても、慣れないと分かりづらいな。
>>584 ソースは短い方がコンパイルが速くなる。
やり過ぎは禁物だけどね。
8倍より3ビット左シフトの方がわかりやすいという人もいるかも。
その程度の違いだと思うよ。
*8 って、勝手に <<3 に変換してくれるんだろうか。 <<:3
>>586 たいていのコンパイラはシフトで最適化してくれるけど、その展開方法は様々。
リストファイルを開いて・・・びっくり!なんてのもある。
あとコンパイル時に定数を計算してロケーションを指定するもののようだから、 最適化もへったくれもなさそうだが。
590 :
のうし :2011/11/02(水) 18:59:39.68 ID:We7xKi94
>>588 どーも独自なようだけどmanual.pdfに記述を見つけられなかった
探し方が悪いか
で疑問は「*8がシフト3ビット」ではないのよ<それは分かるけどそれだと
>>583 の
> volatile unsigned char STATUS @ 0x003;
> volatile bit CARRY @ ((unsigned)&STATUS*8)+0;
STATUSがアドレス0x003なのはメモリマップの通り、でも@って何?
そしてキャリービットが0ビット目なのもドキュメント通り
するとこの*8は?そしてここにも@がいる
C言語の仕様で@を探したが見当たらず、Hi-TECHのマニュアルからも付けられず
そこでご歴々に質問したのです、これはどういう風に読むの?
あわび
>>592 @ は at と読めばよいと思う。
volatile unsigned char STATUS @ 0x003;
「volatile unsigned char」型の変数「STATUS」はアドレス「0x003」にあります。
volatile bit CARRY @ ((unsigned)&STATUS*8)+0;
「volatile bit」型の変数「CARRY」はアドレス「((unsigned)&STATUS*8)+0」にあります。
&STATUS == 0x003 == 0b0000000000000011
0x003*8 == 0b0000000000011000
-------------AAAAAAAAAAAAABBB
A はアドレス
B はビット位置
てか質問主はなにが問題なの? コンパイラ付属のライブラリが、そのコンパイラ専用の表現使ってるだけの話じゃないの? @はpragmaみたいなものだと思えばよろし。
>>555 C18のバージョンを3.72から4.00にしたところ、コメントアウト部を有効にしても書き込み成功しました。
教えていただき、ありがとうございました。
>>594 詳しい説明をありがとう
でも変でね?volatile bit CARRY @ ((unsigned)&STATUS*8)+0; をバラすと
型 volatile bit
変数名 CARRY
謎 @(このコンパイラ固有の何かだとするとどういう意味なのか?読み(展開されるイメージ)はどうなるのか?)
(unsigned)&STATUS アドレス0x003の格納アドレス?
*8 &やキャストより優先?格納アドレスを3ビットシフト?どっちだっけ?
+0 釈然としないけど多分0x003の0ビット目を意味する
で、マニュアルにはbool型はなくbit型でやりますよ、あと書いてある
つまり1ビットのデータ型bitをインプリメントしている
疑問は
・@は説明が無いので何をしているのか不明のまま
・何故3ビットシフト?ビット位置はあるバイト(8ビット)の0ビット目ではないのか?>この場合キャリーだから
説明のアドレスは最初から0x003なのだからシフトする理由が分からない。
この書き方で何故ステータス(0x003)の0ビット目(キャリーフラグ)を指し示すのかわからない。
です。
>>595 何かの理由で 構造体ビット指定でなく(bit修飾子がビット操作専用で早いらしい)上記記述なのは良しとしても
3ビットシフトの意味がわからない
なんと書けば良いのか、とにかく他で@なんて修飾見たことないので悩んだだけ
チョンプロ書いてデバッガで展開を眺めて調べてみます
>>595 それが読めるのと読めないのとでは違いが大きい。
バグがヘッダファイルに起因するものか自分で確認できる。
メーカーによるバグの修正を待つ必要もなく自分で直すこともできる。
>>599 それもあるけどもっと端的に「ヘッダと同じ記述は可読性を上げる」
と予想し易い >同じコンパイラを使う人なら、メーカ提供のヘッダを無視ってのもね〜
記述として展開が有利になる可能性もある
後は自分の意図した動作は書き方1つでどうとでもなる
こういう瑣末な事も良く咀嚼した方が確実って事かな?
そしてわかった、PIC固有のバンクのせいか>それだけ書いてくれれば直ぐわかったのにー
3ビットなのは例の「プログラム域とデータ域を区別するビット」があるからか?
short a=&PORTA;
この展開をみて良く分かった
勉強になりました!さ、コーディングしよ
自己レス 3ビットなのはバンクが1〜8まであるからか… そんな大きなPIC使ったことないからわからんかったわー
ダメだ、死にそうw 3ビットじゃない、8ビット「分」ずらしたいのか bit演算子を使うと単位がビットだから3ビットずらさないとバイト扱いにならない(アドレスはバイト) ははは…はぁ。
>>598 >*8 &やキャストより優先?格納アドレスを3ビットシフト?どっちだっけ?
それはCの基本だから説明しないよ。
>+0 釈然としないけど多分0x003の0ビット目を意味する
そうだよ。
>で、マニュアルにはbool型はなくbit型でやりますよ、あと書いてある
boolは論理値を記憶するためのものです。
1ビットであるという縛りはなくintと同じでも何ら問題ない。
1ビットを記憶するためのbitとは意味が違うのです。
> ・@は説明が無いので何をしているのか不明のまま
変数名と絶対アドレスを結びつけている。
別のCPU用のコンパイラでは定数をポインタにキャストしている場合もある。
でもそれはポインタなんだな。
> ・何故3ビットシフト?ビット位置はあるバイト(8ビット)の0ビット目ではないのか?>この場合キャリーだから
ビット位置も指定しないとbitの絶対アドレスを指定したことにならないからです。
理解できないなら、単純化した8x8のマス目を書いてマス目を特定するための番号を0から振ってみてください。
604 :
774ワット発電中さん :2011/11/02(水) 23:58:03.95 ID:BTMDme0y
cc5xでもbit型とか@が使われてる。でもルネサスのH8系コンパイラではそのような表現方法はない。 bitや@はC標準の記述方法ではないのでcc5xでもbit型は使わずビットフィールドを定義して使ってる。 ビットフィールドは互換性がない、などとよく言われるけど定義部分だけをちょっと修正すれば多くの 処理系で使えるのではないか。
>>588 のリンク先読んだか?
1 Absolute objects って所に、「変数とかの定義のあと @ アドレス、って書くとそのアドレスに置くよ」って
書いてあるだろ?
難しくシフトとか考えなくても、8倍したらそのレジスタまでの総ビット数になって、ビット番号足せば総ビット番号になるじゃん そこまでわかれば@はただの番地指定だとわかるはず 演算子の優先度すらわからない状態でここまで引っ張って、1バイト=8ビットだから8倍だと言われてるのに勝手にバンクのためだと決めつけて、挙句「言ってくれれば良いのに」とか見ててイライラしてくる
PICのCが嫌われる所以がわかりますたw
608 :
774ワット発電中さん :2011/11/03(木) 06:39:42.25 ID:/Nj8sIXw
超初心者です。質問させてください。
http://www.ucapps.de/のmidi mergerの 16F88をつかったものを作ろうとしています。
aki-pic2を使ってhexファイルを16F88に書き込んだのですが、
その後Unsupported Part(ID-3FE0)と表示されるようになってしまいました。
これは、hexファイルに問題があるんでしょうか?
回路を組んだところ、一応動いてはいるようです。
あと、この16F88は、もとに戻せるんでしょうか?
>>608 検索すると書き込み時の電源電圧に問題があるとそうなると書いてある。
>>607 マイコン用のCって、どれもこんな感じだよ。
>>607 アセンブラの方がエンジニアの貴重な時間とエネルギを浪費する悪
PICがCで開発出来る様になった事は、非常にありがたい技術進歩
>>608 > あと、この16F88は、もとに戻せるんでしょうか?
もとに戻せるよ。安心して
いつもは16F886でPICkit2とHITEC-CでICDでデバッグしてんだけど 昨日16F88でICDしたらメチャ遅い。体感で5倍は遅い。なんで?こ うゆうものなの?何か間違ってる?
>>611 まともに使える人にはそうだろうが、
まともに規格もわかってない、マニュアル類も読めない、そんな奴には
混乱のネタが増えるだけだ、というのが昨日の流れでよくわかった。
PIC16f88は1ワード転送しては書き込みして数ミリ秒待つことを繰り返す PIC16F886は8ワード転送しては一括書き込みして数ミリ秒待つことを繰り返すという書き込みモードにも対応している だから5倍遅いという体感は納得できる
勘違いレスだったかも
>>615 解説サンクス
じゃあ16F886で作り込んで、出来たら16F88に移し、16F88上で最終調整
する方法にするよ。情報提供サンクス。助かった
618 :
lenovo x61 バッテリーです :2011/11/03(木) 10:59:41.77 ID:weOrKlZg
11/3(木)10:59で投稿が停止しているように見えるが この投稿が通る事は投稿制限されている訳ではなさそうだ。
なかなか面白いこと言うね。
秋月の12Fだけど値段下がった? 円高で安くなったのかな
>621 いつの話をしてるんだ >11-13
623 :
774ワット発電中さん :2011/11/06(日) 22:55:10.85 ID:gV7O76SV
後閑先生の本をみながらC30でCCS-Cのようなdelay_us()関数を作ろうと思っています。 #define CLOCK 80 void delay_us(int usec) { usec = (int)(CLOCK * usec)/40; while(usec) { asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); usec--; } } とやってみたんですが ストップウォッチで見たところ、delay_us(1);からぬけたら1.75us経っていました。 こんなに誤差出るものですか? CLOCKは80Mhzです。
ストップウォッチにそんな精度はない
delay_us(1)
delay_us(10)
delay_us(100)
delay_us(1000)
あたりの精度を測って、なぜ比例しないかを考えるんだ。
ヒントは
>>625 あとは自分がよく使う値でちょうどいい結果が出るように、
/40 のとことか NOP の数を調整するとか、
1us専用の deleat_1us() を別仕立てで作るとかしてもいい。
ありがとうございます。 精度はかってみました。 ずれがどんどん大きくなっていきました。 とりあえず使うかわからないけど、delay_1usを作ってみます。 スタック退避というのはよくわからないけど、 while文のときに条件分岐?があるから、その分時間を食ってしまうということでしょうか。 CCS-Cのときはこういう風にならなかったのは、コンパイラがそういうところで優秀だったからでしょうか。
タイマー割り込み使えば?
>>627 コールとリターン、戻りアドレスを覚えるスタック待避。この3つの時間を考慮してるかい?って話じゃないか?
分岐条件によっても時間が変わるから、汎用にするには相当テクがいるから、1つずつ専用関数作った方が早い。て話じゃないか?
CCSやHIの関数は、スタックや分岐ステップ数を計算している。 がんばれ( ̄◇ ̄;)
タイマ割り込みも考えましたが、めんどくs(ry ちょっとしたディレイにタイマつかうのはなんかなあと思ったのでやめました。 勉強はしてみます。 コールとリターンは考えましたが、スタックってのは考えませんでした。 スタックもよくよく考えてみます。 汎用があったら便利!って思ったので作ろうと思ったけど、今までやってきたことでも 大体同じ数値つかってきたから、汎用はいらないかもしれませんね。 計算してるんですか。 なんかすごいことやってるんですね。 とりあえず、dsPICだとLEDぺかぺかのさせてるだけなのでいろいろ試してみます。 ありがとうございました。
タイマー使ってもただで高精度は出ない 精度を出す動機と仕様設計がなければねぇ
精度が要るなら水晶+カウンタに落ち着く
PICKIT3を使ってて、書き込み時は機能しているみたいなんだけど ボタンを押すとSTATUSが赤く点滅して動作しないんだよね・・・ 回路設計ミスとプログラムのデバッグはしたんだけど、 他の原因とかありそうだったら教えて頂きたいです。 ちなみにプログラムはLED点滅、使用PICはdsPIC30F4012です
回路設計ミスをしたんだったら、まずそれを直すべきだと思うんだが
636 :
634 :2011/11/07(月) 15:06:27.24 ID:vwtW4HTZ
>>635 あぁ、すまん。回路の確認はしたってこと
テスタでPICに電源が供給されていることも確認した
637 :
774ワット発電中さん :2011/11/07(月) 15:37:21.00 ID:CbsSdDat
先輩方に質問であります。 dsPIC30F3012 を使って、シリアルデータを受信して そのデータに応じてデータを返す装置を作ってるんですが、 (データ数)+(データ列) 的なデータ構造なので、 (データ数)を受信してからその回数だけデータを受信するように forで回しています。 データがおかしいときに、ハングしてしまう可能性があるので ループで戻ってこないときにWDTでリセットしたいのですが、 そのWDTリセットで、I/Oは初期化されないですよね? ゴミデータが出てしまうといやなので。 マニュアルのどこかに(初期化される/されないが)書いてあるでしょうか? よく見たけれど分かりませんでした。 よろしくお願いします。
>>637 マニュアルに書いてあっても、何の担保にもならないよね。エラッタ出されてお終いだし
>>637 データがおかしい時にハングしないようなソフトを書くべき。
その上でWDTをONにする。
FORは良くないと思うな。
>>638 つまり、“実機で確認”ってことですかね。
マニュアルなんて信用しないっと。
そういう進め方もあるでしょうけど。
>>639 >>640 うーん、そうなんですけど。
パケット的にデータが来るので、データの終わりかどうかを認識するのに
タイマーが一番簡単なんですよ。
しばらく待って、データが来なければ最初に戻ればいいだけなので。
とりあえず、実機で確認します。
諸氏方、どうもでした。
WDTはハードリセットと同じ動作だよ 逆にI/O初期化されないWDTってあるのかな?
>>634 TABLE 6-2: PROGRAMMER-TO-GO OPERATION FEEDBACK CODES
>>637 データシートに次のような欄があるよ。
Value on POR, BOR
Value on all other Resets → WDT はこっち。
>>637 データシートの次の章にはリセットされるレジスタ値の一覧がある。
Power Control/Status Register (PCON)
646 :
774ワット発電中さん :2011/11/07(月) 23:15:43.57 ID:Q/OJhlEV
ご教授願います。 PIC16F688にて、 RA0をアナログ入力、RA1〜RA5を出力ピンに設定しているのですが、 電源を入れると、プログラム的に出力していなくても、RA1〜RA5から常時6V程出力しています。 PIC自体が壊れてしまったのでしょうか?
>>646 PICって5.5までじゃなかったっけ?
>>646 出力の設定あってる?
あとはI/Oの初期化終わったあとでLowにしてみるとか
それとRA3は入力専用
>>647 定格2〜5.5V
絶対定格−0.3〜6.5V
>>646 >RA1〜RA5から常時6V程出力しています。
電源電圧より高い電圧が出てる?
電源電圧と同じ電圧じゃない?
>プログラム的に出力していなくても、
出力ポートにセットし、
Hにセットしてる? Lにしてる?
それによって、自動的に答えが出ない?
650 :
646です :2011/11/08(火) 00:06:58.73 ID:so/XM20O
>>647 6VをVDDに供給していました。
いまは、ハードを組み替えて5.10V程度まで落としましたが
現象変わらずです。PICが完全にダメになったのかもしれません。
>>648 プログラムを確認しましたが、出力の設定はあっていると思います。
>>あとはI/Oの初期化終わったあとでLowにしてみるとか
やってみようと思います。
設計値には余裕があるから6Vで壊れることはそうそうないけどな。 ソースは3年間6Vで運用してる俺。まだ無事。
”壊れている”どうかわかりにくい場合ってあるよね。 交換できるのがあればすぐに確認できるんだけど。 出力に切り替えただけでは出力の状態は不定。 出力してない=Lにしている のだと思ってたけど 本当にポートへの出力を一度もしていなければHが出ててもおかしくない。
>>650 引用で恐縮だけど、
・・>>あとはI/Oの初期化終わったあとでLowにしてみるとか
・・ やってみようと思います。
スレに書き込む前、最初に試すところだよ。
654 :
774ワット発電中さん :2011/11/08(火) 09:59:50.72 ID:gfoX/TUl
>>651 PICは結構タフにできてると思う。メーカーによってはちょっとした過電圧で壊れるマイコンもあるね。
電源ON直後に出力ポートをHまたはLを確定させる意思があるなら ポートにpullup、pulldownを施した上で RAに出力してから出力ポートに切り替えるよなぁ
>>645 どうもありがとうございました。
30F3012 のはまだ見つけていませんが、
Microchipの他のシリーズのものは見つかりました。
探して確認します。
>>642 こういう知ったかぶりが一番困るんだよね
℃素人って、自分の能力の無さを棚に上げて恥ずかしげも無く書き込むなぁwww まあ、無能だから気が付いてないんだろうけど
氷片ですか
ていうかさ、ゴミデータが出るとヤダとか言いながら ハードリセットや電源ON時の対策取ってないわけだろ? 明らかに頭足りて無いじゃん。
足りてないってより「無い」って言ったほうが正しい。
>>657 まったくね。
>>659-660 電源投入時は、相手方が安定するまで
HWリセットが入っているので問題ないです。
ハードで対策も取っているし。
PICは使いたくないけど、要求なので仕方ないんですよ。
もうお金もらっちゃったし。
>>661 やっぱり仕事か。
仕事でそのレベルは酷すぎるぞwww
PICの問題じゃなくてお前の頭のレベルが。
>>661 あまりにも無能で理解できなかったみたいだから念のため書いておくが
>>657 に書いた「℃素人」とは
>>661 の事だから、勘違いしないように。
仕事って言うか、お手伝いなので。 他の人はもっとレベル低いよ。
わざわざPICを指定する発注者が誰もここを見ていないとでも思っているのかい?
MikroCのプログラムをpic basic pro に書き直せませんかね ネットでps/2テンキーを使った電卓があったので作成したらプログラムがmikroCだったのでpicbasicで作らなくてはいけなくて困ってます
>>666 元がC言語ならPIC用のCコンパイラ探して移植した方が早いよ。
HI-TECH C Liteとか。わざわざPICbasicにするよりも近道かも
と悪魔のささやき
>>667 pic basicを必ず使わないといけないので困ってるんですよね
Pic16f88の6、7番ピンにps/2 テンキーを接続し液晶表示器に接続してます
1桁同士の簡易電卓でいいんだけどまったくわからないわ・・・
お手伝いだとか、他人のレベルだとか、 言い訳すればOK。
>>668 どこのを参考にしてるかしらないが、MikroCはPS/2ライブラリがあったはずだからそれつかってんじゃないのか?
その場合はライブラリの中身見にゃいけないから全く参考にならん。
一応MikroCはasm出力するはずだから、アセンブラが使えるなら参考にできるかもな。
まぁ、出来るところからやればいいと思うがな。
回路ができてるなら先に表示の方を作ったほうが良いんじゃないか
作らなくてはいけなくて、とかセコイ理由捏造すんなよw 既に骨身に染みてるだろうが、独自仕様basicなんて糞の役にも立たないから C言語でも始めたらどうよ 両方判れば自分で移植もできるだろ
>>673 捏造じゃなくてpic basic proを使った工作を提出する課題なので役に立たなくてもしないといけないんです
2chを使う課題、ソーシャルって奴ですかね。
>>674 丸投げ乙。
添削ぐらいならまだしも、ソース写して提出するような奴の手伝いするやつはおらんだろう。
とにかくそのサイトはmikrocのライブラリ使ってるから参考にはならん。
課題ならPS/2の通信仕様ぐらいわかってないと例え提出できてもどうしようもない。
>>674 もっと敷居を下げて、LEDチカチカじゃ駄目なん?
多分丸写しだからPS/2は課題と全く関係ないな どのみち電卓すら作れないんじゃアキラメロン
初心者です。 MPLAB C18のことでお伺いしたいのですが、こちらで質問させていただいても よろしいでしょうか?
>>677 表示器も使わないといけないので電卓思いついて調べたんですよね
pic basic proがまったくわからないんです
講義でもled点灯とカウントアップしか教えてもらってないので
679で書きこませていただいたものです。 質問させていただきます。 MPLAB C18で入力が反映されず困っています。 PICには18F452、デバッグにはICD3を使用しています。 以下のプログラムでICD3から書き込み、デバッグで実行し、Delay10TCYx(10)でブレイクポイントを貼ってPORTDの内容をSpcial Function Registar用のウォッチウィンドウで確認しています。 最初にRD0に5Vを与えて確認するとPORTDは00000001と表示されています。 次に、ブレイクポイントで止めてRD0に0Vを与えて再び実行し、確認してもPORTDは00000001のままです。 そこで、RD0に0Vを与えたまま「Debugger」->「Reset」->「Processor Reset」をクリックし、再度「Run」するとPORTDは00000000と更新されました。 以下のプログラムではダメなのでしょうか? このような基本的なことを聞いてしまい、申し訳ありません。 教えていただけると助かります。
>>680 課題なんだからpic basic proを勉強して
>>672 のソースを参考にしながら
自分で書くのが正解だろ。近道はない。
すみません。プログラムがありませんでした。 #include <p18f452.h> #include <delays.h> void main(void) { unsigned char ucData; TRISD = 0xff; TRISE = 0xff; while(1) { ucData = PORTD; Delay10TCYx(10); //ブレイクポイント用 } } 投げ捨てないように頑張りたいと思います。
>>680 PS/2キーボードをいきなり使おうとするのは無謀。
せめてLCDとスイッチ入力が出来るようになってからにしろ。
テストつーことでスイッチを押した回数をLCDに表示するプログラムでも作ってみれ。
応用すればストップウォッチぐらいは回路そのままでもつくれるぞ。
>>684 ダメ元だけど、ブレークポイント用の呼び出しを1行追加。都合2行にして、
双方の行にブレークポイント設定し、実行してみて。
ん、表現が変だった。 Delay10TCYx(10); //ブレイクポイント用 Delay10TCYx(10); //ブレイクポイント用 って感じにして、双方の行にブレークポイントね。 BP2つ設定できたっけ? 駄目なら、ブレーク後にステップアウトで命令行を動かしてみて。。
RCDライタというものを使ってPICに書き込んでいるのですが 16F84Aと88は書き込みができるのですが その他のPICで書き込めたことがないのですがどうしたら良いでしょうか パソコンにはPCIスロットにRS232Cのボードを入れてつないであります。 サイトで調べると持って色々なものに書き込みできるようなのですが・・
>>661 WDTじゃなくてタイマ割り込み使うのが筋じゃね
>>672 IO部分だけCソース流用して、メインはbasic使って関数呼び出しすればいいんじゃね?
>>688 電圧・電流不足とかでPICによって書けたり書けなかったりする
そんなときはチャージポンプ用コンデンサの容量変更で書けたりもする
691 :
774ワット発電中さん :2011/11/08(火) 20:32:23.18 ID:y+cSIl8m
>>688 PICkit2を買った方が幸せになれる。
>>688 675とも相性が良くなかった。
書けるときは問題なく書ける。書けないときはしつこくやってると書けたりする。
最新版相当で作った。並のポートなら、あれで電圧は十分保てる。
>>664 > 仕事って言うか、お手伝いなので。
金貰っておきながらお手伝いって・・
その上2chで質問。
ちっとは責任持てよw
>>685 オルゴールで再生数をカウントするものを自力でがんばって作り直して見ます
PICkit3は?
>>688 確認用のLED外したら書き込める事があった
ダメモトでやってみ
>>687 お返事ありがとうございます。
試して見ましたが、状態は変わりませんでした。
ただ、TRISE=0b00000111;としたところ、入力の状態が反映されるようになりました。
原因がよくわかりませんが少し前進した気がします。
ありがとうございました。
>>697 REGISTER 9-1: TRISE REGISTER
R-0 R-0 R/W-0 R/W-0 U-0 R/W-1 R/W-1 R/W-1
IBF OBF IBOV PSPMODE ― TRISE2 TRISE1 TRISE0
bit 4 PSPMODE: Parallel Slave Port Mode Select bit
1 = Parallel Slave Port mode
0 = General purpose I/O mode
PIC16F1827からI2Cで24LC512のEEPROMにデータを ページモードで書き込みしようとしています。 ネットなどには1ページ単位で、24LC512の場合には128バイト毎に Stopコンディション発行で書き込みすると記述されていますが、 これは1ページの最大データ内(128バイト以内)であれば、128バイトに 達しなくても、Stopコンディションで書き込みを終了しても いいのでしょうか。(例えば16バイト毎など) データシートには、1ページ辺りの最大バイト数を超えると、 最初に戻って上書きされるので注意を要する、と記述されており、 1ページは最大128バイトと記載はされていますが、128バイト毎 という記載はありませんでした。 どなたか教えて頂けると助かります。
自分が24LC256(バッファサイズ64byte)とか 24LC64(バッファサイズ32byte)用に 16bit整数(2byte)の読み書きや32bit整数(4byte)の読み書き の関数とか作って動作確認したときは特に問題は無かった つまり アドレス+2byteのデータ転送後STOP発行で正常に書き込めたし他のデータを壊すこともなかった アドレス+4byteのデータ転送後STOP発行で正常に書き込めたし他のデータを壊すこともなかった つまり24LC512の場合で言えば128バイトの範囲内なら16バイト毎とかokということじゃないかな 1byte毎の書き込みもページメモリを1バイトだけ使ったページライトモードでの書き込みといえるし
素直にpickit買うのが幸せへの一番の近道
>>643 ありがとう。とりあえずエラーではなくなったです、
pickitが完成度が高くて安くて入手性も良いので、逆に自作してやろうと
10F200から10F222に置き換えた際 内蔵オシレータがデフォルト8MHzになってたのに気づかず… みんなも気をつけてね
706 :
774ワット発電中さん :2011/11/11(金) 13:10:43.70 ID:HWXjVh7h
PICユーザーは他社のマイコンとうまく使い分けてる人も多いと思うのでちょっとお聞きしたい。 FPGAで使われるマイコンにNiosIIというのがあります。タイプがいくつかあってeバージョンは PICとまったく同じようにレジスタへのリード・ライトでIOを操作できます。しかしfバージョンは パイプライン処理やキャッシュメモリ内蔵型の高性能タイプでレジスタへのアクセスではIOを操作できない みたいです。ARMその他、高性能の部類のマイコンは上のfバージョンのようにPICなどとは異なる コーディングが必要ですか? また、現在のPCではIOに直接アクセスできず、デバイスドライバを通して、ということになってるけど 上のfバージョンと同じような状況からそのような方法になってるのかな?
>>706 高性能タイプってのが何を指すのかわからないぐらいだだっぴろい気がするんだが。
PCがIOアクセスできないんじゃなくて、WindowsがIOアクセスさせないようになってるだけ。
OSの定めた手順を守らせるのは、ハードの差異を吸収して互換性を確保する上での定石。
>>706 PICはメモリマップドI/O、ARMも同じだけど、ビット操作を別のメモリ空間に割り当てているみたい。
上位ARMだとメモリ管理と特権モードで使用が制限される場合がある。
I/O空間が別のマイコンも古くからあるけどNiosIIは知らないからね。
>>706 OSがあるなら、その約束を守ったコーディングが必要です。
そうでなければ、I/Oを直接操作する部分とやりたいことを分離するのが普通でしょう。
I/Oを直接操作する部分は、異種マイコンごとに異なっているのが普通なので作り直しになります。
Nios だったら FPGA スレで聞けばいいのに・・・
ロボットで画像処理が必要になったとかで、 急にPIC(32MX除く)だと足りないって感じたかわいそうな人なんだろうけど
713 :
774ワット発電中さん :2011/11/12(土) 20:53:04.13 ID:mqsohKAo
>706 アセンブラで書かないから予測が出来ないでそういったはめになる!
書き込めなくなってしまったので助けていただきたいです。 状態は以下の通りです。 PCで接続を確認すると、ライターのシリアルまで判別できる 電源供給により以前書き込んだプログラムが実行される(PC、外部共に) 以上から、ライター・PICどちらも機能していると判断できると思うのですが、 プログラムの書き込み、読み込み、削除等、一切受け付けません。 解決策を知っている方がいましたら、ご教授お願いいたします。よろしくお願いいたします。
PICを交換して駄目ならライターを買うか自作するかすれば解決。
>>714 ライタの種類がわからない。
受け付けないだけでは何が起こっているかわからない。
PICの載っている回路がわからない。
接続ケーブルの破損や回路の変更でライタがPICを制御できなくなっているのでは?
>>714 ターゲットもデバッガも問題ないという自分の判断を信じるべき。
スイッチいれる時は手首のスナップを効かせないとだめ。
PICは指先で動くようなヤワな石じゃない。
>714 Vppが死んでるんじゃない?
>>714 それだと、PC-ライタ間の通信と、PICのコアが動いてることしかわからん。
ライタの書き込み信号と、書き込み信号の伝送線路と、PICの書き込みポートについては動いているかどうかわからない
例えば、RA0として、 オンになった時に割り込みを掛けて、その割り込みの中でタイマーをスタートさせる。 次に、RA0がオフになった時に割り込みを掛けて、その間の時間を記憶する。 時間はだいたい0.1秒〜3秒の範囲内です。 なんども繰り返す割り込み処理の中で、その平均を求めて、 平均の約2倍の時間が掛かった時にフラグを立てる。 通常処理の中で、そのフラグを確認した時に特定の処理をする。 という事をしたいのですが、タイマー0とか1とかどんなタイマーを使えば良いのか、 タイマーに詳しくありません。 何方かのアドバイスをお願いいたします。
>>720 16bitタイマーを外付けの32kHzで駆動。8分周すれば16秒まで計れる。
RAはPOS/NEGエッジで割り込みしたいんだろ?オフでTMR1リスタートしてオンで読めばいい。
タイマー読んだ後の移動平均とか2倍判定は他の親切な人に聞いてください。
あと、オンとかオフとか定義次第でどっちか判らん表現する奴は氏ね。RISEとかFALLの方が判りやすいよ。
>>720 タイマーをスタートさせる必要なんて無い。
時計で経過時間を計るのにそんなことしないだろ。
CCPのキャプチャモードを使えば、立ち下がりエッジごとや立ち上がりエッジごとに、タイマ1を保存してくれる。
>>721 ありがとうデス。
明日、秋月に行くので外付けの32KHzの何かを買ってきます。
漠然としていたものにクリアに回答を戴き感謝感激です。
>>720 最初キャプチャと思ったんだけど0.1〜3秒だと計測する時間が長すぎる
キャプチャの立ち上がり割込がかかったときにカウント開始、立ち下がり割込でカウント終了みたいな感じにして
タイマー割込で時間の計測をするとか?
>>723 クロック内蔵なら外付けクロック買わなくてもいける。
精度を求めなければ。という条件は付くが。。
「32KHzの何か」という時点で必要な部品が揃わない気がする。
726 :
720 :2011/11/13(日) 22:30:32.51 ID:YBTqScJU
やりたいことはモーターの回転時間を監視して、通常の2倍の時間が掛かった場合に警報を鳴らす。 と言うものです。 モーターの動作時に、モーターの+極の電圧が立ち上がるので、その時に割り込み処理の中でタイマーをスタートさせて、 モーターの停止時に、モーターの+極の電圧が立ち下がるので、その時に割り込み処理の中でタイマーを読み取る。 タイマー値が通常の2倍になった時に、フラグを立てます。 通常処理は只只、フラグが立つまでループさせておき、 フラグが立ったら警報を鳴らしてまたフラグが立つまでループするという繰り返しです。 引き続きアドバイスありましたらよろしくお願いいたします。
>>726 モーター・・・
なんか信号の取り方から心配になってきた
まさか+極を直接繋ぐつもりじゃないよね?
728 :
720 :2011/11/13(日) 22:42:48.13 ID:YBTqScJU
>>727 その辺りよく考えています。判りやすく簡素に書いただけです。
pickit3のライタソフトでデバイスの自動選択が出来ないって仕様ですか?
>>724 クロック周波数が書かれていない。
最大で16ビットのタイマ+3ビットのプリスケーラだから、それにあわせてクロック源を用意するのは当然のこと。
使い方を見る限りでは、タイマ0のオーバーフローをカウントして、ポートBのピン変化割り込みでキャプチャしても充分な精度がありそうだね。
>>729 ベースラインだと、デバイス選択を確認するためのデバイスIDがないみたいだね。
まあ、作ったソフトとデバイスをあわせることができないほどだと、どうしようもないと思うけど。
>>716 ー719
レスありがとうございます。
ご指摘いただいた点をチェックして、まだ自力で解決できない様だったらまた来ます。
そういえばPickit2のコンフィグ値が合わないのが気になってた 動作するから仕様かバグかな?ともやもやしてた 気になっていくつかのデバイスで照らし合わせた pickitt2だと無効なビット表現が違うんだね へんな日本語ですまん
734 :
720 :2011/11/14(月) 08:20:47.29 ID:+kFiiaOQ
PICkit2とPICの間の通信はSPI?I2C?
>>734 本国サイトに仕様が掲載されてるけど。
まずは、公開されている情報を読破した方がよくないか?
736 :
774ワット発電中さん :2011/11/14(月) 13:14:32.65 ID:BaZd8Skz
まあ、なんでも公式ドキュメントを読めってのも。他に調べなきゃならないことは山ほどあるわけだから。 PICのICSPはクロックとデータ(in,out共通)の2線式なのでSPIではないと思う。 I2Cかその他の規格かな。プログラマを自作したことがあるけどだいぶ前なので詳細は忘れた。
どちらかというとSPIに近いんじゃないかな SDOとSDIで信号線を共用したSPIて感じ 基本的に[コマンド]+[ワードデータ]の単位でやりとりされて [コマンド]は必ずプログラマからターゲットの向き [コマンド]には書き込み系と読みだし系があって 書き込み系の場合は[コマンド]に続く[ワードデータ]はプログラマからターゲットの向き 読みだし系の場合は[コマンド]の後にプログラマ側はデータ線を入力に切り替える一方 ターゲット側は読みだし系の[コマンド]を認識してデータ線に[ワードデータ]を出力してくる まあそんな感じ
タイミングを定義すればPS/2みたいな2線もあるわけで
740 :
729 :2011/11/14(月) 21:34:07.83 ID:5l5FGVVZ
>>731 レスありがとうございます。
pickit2では出来ていたのに・・・
うぃ。 Vcc同士、GND同士も牡忘れなく
>>742 回答ありがとうございます 助かりました。
タイマー割り込みについて教えて頂きたいのですが、 dspic30f4012にて、割り込み時間をきっかし1秒にしたいので クロック・プリスケーラ・カウンタ?の値をそれぞれ 512k・256・512に設定したのですが、どうも1.1秒ぐらいの間隔になっています カウンタ?の値はいくつにすればよいのでしょうか? ものすごい初歩的で申し訳ないのですが、宜しくお願いします。
745 :
774ワット発電中さん :2011/11/15(火) 11:40:56.81 ID:XYNDrnax
>>744 マイコン全体に言えることだけど、「毎割り込みを正確に一定の間隔にする」という考え方は
あまりしないな。割込み処理の開始にはレジスタ退避処理などでレイテンシがあるし、他の割込み
と併用していれいれば待たされることもあるし。
それを考慮した上で、適切なタイマーの設定値についてはdsPICは使ったことがないので他の回答者
にまかせる。
>>744 クロック周波数もわからんのにどうしろと。
それにクロックのソースが正確じゃない可能性もあるし、割り込みもフリーランさせずに割り込み時にタイマー値を設定するようなプログラムだとタイマー値設定するまでのステップの誤差を考えないと目的の時間にはならない。
ともかく情報が少なすぎる。後出ししても回答側もあなたにもメリットないぞ。もっと詳しく
きっかり1秒ならGPSの信号使ってみるとか?
1.0秒の精度で良いならタイマーの数値の調整で何とかなるけど、1.00秒以上の精度を要求するなら、 32.768KHzの水晶発振器を分周して使うべき。
749 :
744 :2011/11/15(火) 13:03:05.18 ID:8/GpeGhi
>>745 動作は10秒程度でリセットするので、数ms程度の誤差なら考慮しない予定です。
>>746 クロックは512kか10Mがあります。
>>747 ー748
それが一番簡単ではないかなーと思ってるんですがね。既存のものでやってみたいのです。
あと今確認したら遅れではなく、早かったです。0.95秒くらいでした。
>>749 すまん。クロック書いてあったな。
割り込み退避処理の誤差を考慮しない場合でも計算上タイマー値500じゃないのか?
その設定だと長くならないか?
>>749 まず10msくらいの割込タイマーを作って、それを100回まわして約1秒のタイマーを作る。
具体的には10ms割込のたびにカウンタを+1してそれが100になったらフラグを立て、カウンタをリセットする。
メインルーチンでフラグをチェックしてフラグが経ったら1秒経過したことになるので、フラグはクリアして、1秒処理ルーチンへ。
10msx100回で0.95秒くらいなら、カウンタを105にしてみる。
この辺はカットアンドトライで調整シル。
752 :
744 :2011/11/15(火) 13:22:40.17 ID:8/GpeGhi
>>750 520ぐらいでも少し早い感じでした
てかきっかり1秒といっておきながら、誤差は〜とか矛盾してますね
一旦他の方法を考えてみます。
みなさんレスありがとうございました。
>>740 PICkit2で出来てたならベースラインじゃないだろ
ちょっと早いとか遅いってなにで測定したのか 気になったけどまあいいや
32768Hzの信号を32768分周すれば1Hzになる 20000000Hzの信号を20000000分周すれば1Hzになる dspicは詳しくないんだが timer2/3の32bitタイマーのピリオドレジスタにシステムクロックの周波数を設定して 一致割込発生させれば正確な1秒になるのでは?
1秒を手動(目視+ストップウォッチとか)で計りたいなら、10秒ごとに100秒まで10回とかいうふうに計って 誤差が伸びていかないor縮んでいかないなら1秒がちゃんと出てる とかいうようなやり方しないと、いつまでたっても手の誤差を計り続けることになるな。
一般的な成人の場合、目で認識→脳で判断→神経に伝達まで 約0.3秒って聞いたことがあるけどそれを測定すればいいんじゃね dsPICにはそんな機能があった気がする
普通にロジアナで測らないの? 持ってないなら、100円のストップウオッチにSSRかTR繋いで、ポートに繋げば良いのに・・・
なんでロジアナ?
オシロのはなしじゃなかろか。
誰もが一度は作る“周波数カウンター”の出番
1秒ならPCのソフトオシロで充分だよ。
>>744 その1.1秒ステップのPICを持って光速の1.487倍まで加速してこい。
地球時間の1秒とほぼ同じになるはず。
一瞬物理板に入ったかと思ったw
というか、よくよく見たら、物理的に超光速は不可能だけどね 言いたいことはわかったけど
>>763 どういう計算?
早くなることってあるのか。
>>766 たぶん、近光速(亜光速)運動してるPICの時間の進みは
地球に比べて遅くなる
ということを言いたいんだと思うよ
光速の1.487倍で地球での1秒になるとして実際に処理をするPICが1.1秒では・・・・
>744 原発振の誤差は置いておくとして、その設定なら 512000(512kHz) ÷ 4(f/4固定) ÷ 256(P/S) ÷512(PR) = 0.9766Hz → 1.024秒 にならない? 素直にPRの値を500にすれば誤差を置いておけば1秒にならないか?
>>753 「デバイスの自動選択」という部分がみそだと思う。
IDEが指定するデバイスがPICkitに伝えられる。
HEXにはデバイスの指定はない。
PICkitは可能ならデバイスIDで正しいPICか確認している。
HEXだけで書き込むならデバイスを指定したか?
デバイスが判らないとデバイスIDを読み取れないかも?
間違ったデバイスの時にVPPに正しい電圧が供給されるか?
>>753 PICkit 3 Programmer-To-Goというスタンドアロン書き込み機能が追加されているから、それかも。
PWMのついてないPICで内蔵オシレータ、50/50のDUTYで方形波出そうと思ったら、 100khzくらいが限度かな。
bsf GPIO,0 nop nop bcf GPIO,0 goto $-4 内蔵4MHzなら 166KHzか。
そんな感じでした。
クロック直
10k-50kHzくらいで、DUTYを20-80くらいをADの半固定から ソフトで自由に設定したかったのですが、CCPないと厳しそうです。
777 :
774ワット発電中さん :2011/11/16(水) 15:47:16.10 ID:j/n3mvF3
PIC24FのDIP品(28ピン)に ・LCD ・4*4キーパッド(マトリックスタイプ) ・XBee ・いくつかのLED ・ICSP つけようと思ったらもうピンが全然足りない感じなんですけど、表面実装タイプにしないと なんともなりませんか?
>>777 足の数と面実装の関連がサッパリ判らない。
面実装にすると足増えるの?
>>777 ピン数増やすとフラット品しか無いのだろう
そういうことなら28pinを最初にかかなければ… さておき キー、LCD、LEDはシフトレジスタ(しりぱら、ぱらしり)でもぶらさげれば、全部数珠つなぎで、入力3本、出力3本、とかいうこともできそうだ。
40ピンのDIPじゃ駄目なのか?
>>777 LCDはシリアルで、テンキーはUSBでつなぐ。
>>777 マイコンありきじゃなくて、機能からマイコンを選択しないの?
とりあえず簡単に削減できるのは、LCDを4bitアクセス(文字タイプと想定)、
LEDはシフトレジスタ(数による)かな。
LCDはSPI接続の種類もあるよ。
>>783 探してみたけど、dsPIC30Fしか見あたらなかった。
786 :
炬燵熊猫 :2011/11/16(水) 19:48:36.53 ID:4tUKEUn4
>>777 キー入力、表示制御用にPIC一個使ってシリアル通信したほうがいいかもね?
信号線はCK,Di,Do,RESETくらい?
>>777 LCDってキャラクタ?グラフィック?
LCDをI2C 2
キーボードをマトリックス 8
XBee 2
ICSP 3
I/Oが24個あるとして15個しか使ってないから9個のLEDが制御できる
LEDもマトリックスにしてもいいけどソフトがわかりにくくなりそう
ICSPは入出力とかぶっても、トグルスイッチに繋がっててHighやLowと直接繋がってるとかじゃなければわりと大丈夫な気がする
XBeeフロー制御無しはつらくね? 無線だぞ?
趣味レベルでPICをはじめに当たって、Pickit2を買うかPickit3買うか悩んでるけど お勧めなライターは? どこかに比較表なんかないのかな?
pickit2じゃないかな?ロジアナ付いてるし何かと便利
>>789 これから発売されるチップをいち早く使いたいというのでなければPICkit2で
いいんじゃね。両方持ってるけどPICkit2ばかり使ってる。
ET2011でMicrochipのブース見た帰り道で発見した事がある。 Microchipとみなとみらい線は色違いの兄弟 チラ裏スマソ。気付いてしまったら脳裏から離れなくて、つい。
モスバーガーは従姉妹?
USARTのRXピンの処理について教えてください。 PICとPC間をUSARTで通信したいのですが、 常時接続ではなくて必要な時にコネクタで接続して通信しています。 この時RXピンはプルアップしておいた方がいいのでしょうか? しなくても問題無くは動いているのですが、入力ピンをオープンで放置しておいても 大丈夫でしょうか?
ICのデータシートをよく読んで。 不安なら外部でプルダウンする
RS232ドライバがレベル決めてくれるでしょ
797 :
794 :2011/11/18(金) 11:11:28.68 ID:W8x3SCjy
>795 データシートもう一度読んでみますね。 プルアップじゃなくてプルダウンですか。ダウンでないといけないですか? >796 それは接続中ですよね? 接続していないときにプルアップとかで電位を固定しなくて大丈夫?って質問です。
798 :
774ワット発電中さん :2011/11/18(金) 11:39:26.51 ID:UiMT/axh
電波テロ装置の戦争(始)エンジニアさん参加願います公安はサリンオウム信者の子供を40歳まで社会から隔離している オウム信者が地方で現在も潜伏している それは新興宗教を配下としている公安の仕事だ 発案で盗聴器を開発したら霊魂が寄って呼ぶ来た <電波憑依> スピリチャル全否定なら江原三輪氏、高橋佳子大川隆法氏は、幻聴で強制入院矛盾する日本宗教と精神科 <コードレス盗聴> 2004既に国民20%被害250〜700台数中国工作員3〜7000万円2005ソウルコピー2010ソウルイン医者アカギ絡む<盗聴証拠> 今年5月に日本の警視庁防課は被害者SDカード15分を保持した有る国民に出せ!!<創価幹部> キタオカ1962年東北生は二十代で2人の女性をレイプ殺害して入信した創価本尊はこれだけで潰せる<<<韓国工作員鸛<<<創価公明党 <テロ装置>>東芝部品)>>ヤクザ<宗教<同和<<公安<<魂複<<官憲>日本終Googl検索
>>797 あんたの説明が足りないから
PIC-PC直結で答える人もいる
間に何か挟んで内科医?
それならプルアップだけど
32KHzの水晶発振子からクロックを取ってタイマー1のカウントアップをしたいのですが、 T1CONレジスタの入力種別は専用発振回路なのか外部入力なのかどちらでしょうか? それから、PICのメインクロック自体は8MHzの内部クロックですが、 この水晶発振子はどのピンに接続したら良いのでしょうか?
PICの種類は?
RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 の各端子に32KHz水晶発振子の2本足をそれぞれ接続する RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 の各端子とGND間に47pF程度のコンデンサをそれぞれ接続する 外部クロック入力を選択する; TMR1CS: Timer1 Clock Source Select bit 1 = External clock from T1CKI pin (on the rising edge) 0 = Internal clock (FOSC/4) オシレーターイネーブルにする T1OSCEN: LP Oscillator Enable Control bit 1 = LP oscillator is enabled for Timer1 clock タイマ1をONする PIC16F887とかの場合はね
>>802 PIC16F19839の場合どうすればいいかわかる?
間違えたw PIC16F1939だな。
>>803 表 16-2: クロック ソースの選択
TMR1CS1 TMR1CS0 T1OSCEN Clock Source
0 1 x System Clock (FOSC)
0 0 x Instruction Clock (FOSC/4)
1 1 x Capacitive Sensing Oscillator
1 0 0 External Clocking on T1CKI Pin
1 0 1 Osc.Circuit On T1OSI/T1OSO Pins
まぁ、16F1XXXシリーズアレルギーは、仕事だと潰れるのみか。 877厨や84、628厨はどうせPLLの設定とかわかっていなかったり、 最大クロックでした使ったことなかったりするでしょw 趣味だったらさっさとArduinoに移りなよw
4MHz入れてぶん回す以外なにがあるんだよ
>>772 プログラム領域全てに
bsf GPIO,0
bcf GPIO,0
bsf GPIO,0
bcf GPIO,0
・
・
・
と書くのが最速
cvasm16をつかってアセンブルしようとしているのですが "use of unknown symbol GP1" と表示されて、ピンを指定することができません PIC10F222を使おうとしているのですが GP1を何に書き換えればいいですか? GP0〜GP3まで教えてください お願いします
>>812 定義ファイル読めばいいだろ。てかcvasmフォーラム逝け
>>813 定義ファイルが見当たりません そもそもアセンブリの勉強もせずにオープンソースを流用しているだけなので
たぶん初歩的なことすらわかっていません
どうか助力をお願いします
>>815 例題見れば答えが見つかるかと。
もしかしたら、マニュアルよまず、いきなりcvasm16?を落として使ってるの?
仮定の話だけど、自分でレジスタ定義してね!ってことになりそう。
その場合の疑似命令の文法は・・・マニュアル読んでよ。としか言いようがない。
オープンソースなら誰かが定義したのがアップされている。に一票。
>>816 "他のも見てみる"に助けられました
解決しました ありがとうございます !
>>814 ラッチの付いてるPICは使えば良いだけ。
それ位考えろよ。頭が無いのか?
4つほどある
俺より多いじゃねーか。俺は2つしか無いぞ
下の頭がわがままなんですね。わかります。
PICでPORTAのRA0をオンならオフに、オフならオンに変更したいのですが、 MOVF PORTA,TEMP MOVLW B'00000001' XORWF TEMP,W MOVWF PORTA こんなのしか思い浮かびません。 ただ、これだと他のRA1〜RA7も道連れになるのが気に入りません。 XORを使ってもっと良い方法は無いでしょうか?
>>822 道ズレになるのは確かだけど、割り込み処理(があると仮定して)のポート操作と競合しなければ無難かと。
ビット反転命令は・・・無かったよね。たしか。
BSF/BCF使っても内部的にはPORTA全体を読んでから書き戻してるんだし、それでいいんじゃない? F1xxxなら MOVLW B'00000001' XORWF LATA,F MOVLB入れたら4ステートだけど。
>>823-824 ありがどうございます。
>BSF/BCF使っても内部的にはPORTA全体を読んでから書き戻してるんだし、それでいいんじゃない?
そうでしたか。なら他に方法はなさそうですね。
ラッチレジスタが無い状態で、同じポートの他の位置で出力設定になっていると、色々面倒。
ラッチレジスタ使えるなら、
>>824 がイイ。
ラッチレジスタが無いならポートを読まずにTEMPをメインにすべき。
MPLAB IDEのprojectウインドウにあるBuild AllのしたのMakeって何をするためのものですか?
>>822 ラッチレジスタ使わなくていいなら
MOVLW B'00000001'
XORWF PORTA,F
の2行。
>>822 「道連れになる」というのが理解できませんでした。
何が問題点となっているのか、教えていただけないでしょうか。
(PICのこと、まだちゃんと理解できてないものでして…)
>>828 変更したファイルだけビルドする時に使う
16F1938でタイマー1を水晶発振子で動かそうとしていますが、内部クロックで動作してしまいます。 T1OSOピンとT1OS1Iピンに35KHzの水晶発振子を繋いでいます。 水晶発振子の両足はそれぞれ68PFのコンデンサを経由させてGNDに落しています。 タイマー1のオーバーフロー割り込みが掛かるとRB5をオンオフさせて、オシロでその周期を測定しています。 その結果、1.902Hzとなり、計算するとこれは内部8MHzのクロックでプリスケーラー8で動作しており、 外付けの水晶発振子でカウントアップできていないのです。 そこで、T1CONレジスタのT1OSCEN,T1SYNC,TMR1CSの各ビットを色々と変えながら試しています。 専用発振回路か外部入力(同期)のどちらかの設定だと思うのですが、解説本を読んでも、どちらなのかハッキリ判りませんし、 色々と試してもどれも同じ結果になります。 どのような原因が考えられるでしょうか?
外部入力設定でかつ専用発振回路onになってるのかな
設定はT1CONレジスタで行い 7-6ビット 10 = Timer1 クロック源にピンまたはオシレータを選択する T1OSCEN = 1 の場合: T1OSI/T1OSO ピンの水晶振動子 bit 3 T1OSCEN: LP オシレータ イネーブル制御ビット 1 = 専用のTimer1 オシレータ回路を有効にする データシートを見ると、7-6ビットが未使用ではなくて上記のように追加されていました。 ここにB'00'を設定しておいたので、内部クロックを指定したことになっていました。 あらためて、 T1OSI/T1OSO ピンの水晶振動子にするために、 T1CON レジスタをB'10001011'としました。 しかし、今度はタイマー1がカウントアップされなくなりました。 素直に水晶発振子が動作していないと考えるのが妥当と思います。 ここで、水晶発振子を取り出してクロックを刻むかテスト回路を作りたいのですが、 すみません、どんなものを作れはよいかアドバイス戴けないでしょうか?
水晶発振子にコンバータと周辺回路を付けて発信させて出力はLEDでいいんじゃないの? 35KHzでも目には判別効かないと思うけど…。
>>830 PICはPORTの状態を読み出す時、出力設定のピンも
(外部につながっている)ピンの状態をそのまま読み出す。
外につながっている回路によっては、出力バッファの状態とは違う値をとってくる場合がある。
たとえば、PORTAを読み出してPORTAに出力する
MOVF PORTA,F
だけでPORTAの出力が変わるかもしれないということ。
システムクロックを外部クロックのLP オシレータ モードにして問題になっている 35kHz水晶を接続してLEDチカチカプログラムを走らせてみるのが一番確実な発振有無の確認方法のような気がする 個人的には68pFは値が大きすぎる気もする 15p 18p 22p 33pあたりでどうなるか
>>836 様
>>830 です。納得しました。
出力の場合でも外の回路によっては違う値を取る場合があること(この場合があるということ)と、
出力命令の動作仕様から、
意図したものと違う出力に切り替わる場合があるということですね。
勉強になりました。お礼申し上げます。
>>838 です
書いてる途中でミスにより書き込んでしまいました
× (この場合があるということ)
○ (この場合があるということを見落としていました)
連投すみません
PIC書込み機持ち歩きたいんですけど、マッチ箱サイズとかたばこサイズでケース入りのライター無い?
>>840 用途が?だけど、PICkit2とか、実装されているボタンを押せば書き込みできるんじゃなかった?
事前にデータの登録が必要。希望する大きさではないけど、用は足りそう
>>840 RCDライターとかどうよ?
シリアルポートじゃないと書込みできないけど
>>837 レスどうもです。
>個人的には68pFは値が大きすぎる気もする 15p 18p 22p 33pあたりでどうなるか
手持ちが無いので週末に秋葉原に行ってみます。
個人的にタイマ1に32kHz水晶付けたのは初期のPIC16F877の頃だけだけど その時は47pFでうまくいった PIC16F877のデータシートにはタイマ1外付け水晶のコンデンサ値例が載っていて 32kHzのとき33pF 100kHzのとき15pF 200kHzのとき15pF となっている あと手持ちのPIC16F887のクロックモードをLPにして32kHz水晶付けて試したら12pF〜68pHまですべて発振okだった PIC16F887のタイマ1では試してない(ブレッドボード配線になってしまうから) PIC16F1xxxは持ってないから試せない
846 :
ご教授願います :2011/11/25(金) 23:41:41.53 ID:os6AAbXe
仕様している参考書に、 「I/Oピンがアナログ入力モードになっていると、I/Oピンの電圧はHレベルでも0と読まれてしまう」 と書いています。 現在、PIC16F688にて、RA0をアナログ入力ピンに設定しそこにLM35DZを繋いで電圧を入力しているのですが、 この入力は常に0になってしまうということでしょうか?
>>846 データーシート読もうぜw
16F688のI/O PINのブロックダイアグラムを見るとA/Dコンバーターへはそのまま接続されていますが
ポート入力は、インプットラッチの手前にANDゲートがあってアナログ入力モードだと強制ゼロになるようになってます
つまりアナログ入力モードのPINは
A/Dで読めばアナログ値が読め、ポートを読むとゼロが読めるということです
ブロックダイアグラムってそうやって読むのか
仕様書など文章で書かれているとなかなか伝わりにくいけど図示するとすっきり理解される好例だね。
>>832 >T1OSOピンとT1OS1Iピンに35KHzの水晶発振子を繋いでいます
データシート見ると、
>専用の32.768 kHz 低消費電力オシレータ回路が、
>T1OSI ( 入力) とT1OSO ( アンプ出力) の間に内蔵さ
>れています。この内部回路は、外付けの32.768 kHz 水
>晶振動子と使います。
と書かれているので、35kHzではだめかもよ?
32Kで動いて35Kで動かない、そんなタイトな回路を想像できないな
PIC16D193Xのデータシートには >LP オシレータ モードでは、内部インバータ アンプ >のゲインが最も低く設定されます。3 つのモードの >うち、消費電流が最も少ないのがこのモードです。 >このモードは、32.768 kHz の音叉型水晶振動子( 時 >計用水晶振動子) の駆動専用に設計されています とありtimer1のオシレーター回路も同じだと類推すれば 発振回路にとっての負荷として特性が時計用水晶振動子 と大きく違うとまずいということはあるかもね 発振周波数の違いと言うより
PIC16F193X
854 :
774ワット発電中さん :2011/11/27(日) 00:42:51.60 ID:BSu89EIB
>>847 様
ご説明ありがとうございます。おかげさまで理解できました。
855 :
774ワット発電中さん :2011/11/27(日) 00:48:51.43 ID:BSu89EIB
連投失礼します。 PIC16F688でAD返還後、ADRESHとADRESLに格納された値を10進数に直す計算式を調べていたところ、 work=(ADRESH*256)+ADRESL; work=(work *500)/1024; work=work/5; という式をみつけたのですが、どうしてこの式で10進数に変換できるのかが理解できません。 work=(ADRESH*256)+ADRESL;は、ADRESHの値を右に格納しているということだけはわかるのですが・・・
例えばA/D変換値1023(10進数)は1111111111(2進数)あるいは3FF(16進数)と表現することもできる 3FF(16進数)=(3*16^2+15*16+15)(10進数)=1023(10進数) となる 16^2(10進数)=256(10進数) である A/D変換値1023は ADRESH=3(16進数) ADRESL=FF(16進数)と8bitずつに分離格納されているから そのままでは扱いにくい work=(ADRESH*256)+ADRESL; とすれば10bitの値として扱えるようになる いってみればこの式のみが「10進数に直す計算式」なのでは? work=(work *500)/1024; work=work/5; の2式は基準電圧が電源電圧の5Vで それに関しての変換式のように見えるがよくわからない
857 :
774ワット発電中さん :2011/11/27(日) 02:31:12.01 ID:BSu89EIB
>>856 様
レスありがとうございます。
work=(ADRESH*256)+ADRESL; で10進数になっているというのはわかりました。
この式の引用元には、LM35DZの出力をPIC16F688でAD変換後、変換データを室温(気温)に戻すと書いていました。
work=(work *500)/1024;
work=work/5;
この二つの式は、work=(ADRESH*256)+ADRESL;で0〜1023の10進数に直したあと、
室温に変換するための式ということでしょうか?
私の知識不足でわかりづらい説明、質問になってしまい申し訳ありません。
work=(ADRESH*256)+ADRESL; 基準電圧が5Vなら5V*(work/1024)でA/D変換値から電圧値(V単位)が計算できるから work=(work *500)/1024; は整数演算の精度を考慮して計算の順番を入れ替えていたり 5Vを値500に見立てているだけで本質的にはこの式のみで電圧値への変換は完了している LM35DZは出力電圧1Vのとき100℃だから 100℃のときのA/D変換値は(1V/5V)*1024=205 work=(work *500)/1024; に代入すると work=(205 *500)/1024=100 となって温度の値になっている だから最後の work=work/5; は余計と思われる
ちょっと式を変形して work=(work*1000)/1024 work=work/10 と書けば、意味がわかるかな?
基準電圧が1Vなら計算精度のために500で計算して最後に5で割ったという解釈もできるか
ま、このクラスのマイコンで割り算を安易に使うのは Cしか出来ない℃素人って事を曝け出してると解釈するべきだな。
まあそれは次のステップだろう 変数や定数の型とかもね
863 :
774ワット発電中さん :2011/11/27(日) 10:43:50.47 ID:kg40AB9s
16F873でRB4をプルアップ設定にしてタクトスイッチをGND間に接続しています。 このボタンを押したときにリセットが掛かってしまいます。(正確にはリセットというより誤作動して0番地から再スタートするという印象) INTCONレジスタはCLRFですべて0にしましたが同じように誤作動しました。 何が原因でしょうか?
RB4が出力になっているってことはないよな ポートが正しく設定されているとして… タクトスイッチを押したときにRB4のPINがGND電位にしっかり落ちているかどうか? 中途半端な電圧だと貫通電流で誤動作起こすこともある
>>863 RB4を出力に設定していましたぁ。
という落ちでしょう。
>>861 なんで割り算を安易に使ってはいけないんですか?
桁あふれしてしまうからでしょうか?
有限桁の整数演算だからだよ。 掛けたり割ったりすると、簡単にデータが無くなってしまう。 割り算なら余りを捨ててしまうからだね。
割り算は遅いという問題もあるね。
>>866 使えばいいよ。
使ってはいけないと言う方がおかしい。
「マイコンで、C言語で、フロートによる割り算」の弊害は、
計算に時間がかかる
それだけです。
上手に使い分けすればいいだけです。
floatにするので、RAMを多少食います。
が、繰り返し計算が多いだけですので、ROMはさほど喰いません。
使い分けの出来ない人が、盲目的に「割り算はダメ」って言ってるに過ぎません。
胸を張って使えばいいです。
>>866 掛け算、割り算は、シフト演算子でなんとかならないか、まず考えよう。
ボクの作ったサーボシステムのゲインは x8 x4 x2 x1 x0.5 *0.25 *0.125
でしか設定できない様にしている。えっへん。
今は、そんなに意識せずに使ってもよくなってきてるよね もちろん、ROM, RAMがぎりぎりというハード的制約がかかってきた 時は考えないといかんだろうけど 速度的にも問題なく、余裕が有るのなら使えるものは使ったほうがいい
もう32bitでも値差ねーべよ
>>870 そんなことでドヤ顔されても困る。
x8 x4 x2 x1 x0.5 *0.25 *0.125 などの2のn乗で済む場合はいいけど、
1-2-5シーケンスの場合だったらどうするよ?
あるいは、AD1の結果/AD2の結果 とか。
マイコンの制御上では2のn乗で済む場合も多々あるけど、
人間とのI/Fでは、ほとんど通用しない。
まあ、余裕があるつもりで使って後からどうしようもなくなるというのもあるからね。
>>866 かまっちゃ駄目だってw
それはともかく「桁あふれ」は論外。開発言語に限らず演算途中でのオーバーフロー
は駄目でしょ。ってか「桁あふれしてしまう」と思った要因が知りたいところ。
昔のカメラのシャッタースピードみたいに、 実は128分の1秒だけど 125 と書いてあげれば まあなんとかなる……場合もあるでしょ。
>>876 でも、それは「ウソ」なんだよね。
嘘はだめでしょ。
誤差であってウソではないな
除算は特に遅いから、誤差が許せる範囲で近似して、何か掛けてから2^nで割る。
定数乗算は大したことないし、乗算器付きのPICもあるので合理的。
32bitマイコンでも除算器がないのはよくあるから割と高性能マイコンでも良く使うテク。
例:a/5≒a*51/256(256で除すのはバイト単位なのでシフト演算すらいらない)
>>878 意図せず生ずるものは誤差でいいけど
最初からわかってて設計してるのは果たして…
いずれにせよ、コンパイラが生成するコードを見て判断できるレベルの奴が、 自分で見て判断してやればいいことだ。 つまらんことしてわかりづらいコードにしてバグ入れ込んだら元も子もない。 定数での除算を固定小数点風の乗算にする、とかはコンパイラがやってくれる 最適化として最近はあたりまえになりつつあるしな。
881 :
774ワット発電中さん :2011/11/27(日) 22:13:17.06 ID:dVhGgKvy
>>858 様
>>859 様
詳しいご説明ありがとうございます。
おかげさまで理解することができました。
882 :
774ワット発電中さん :2011/11/27(日) 22:51:15.48 ID:98CN5Jla
初書き込みです。 USB実装のPIC18を使用してAD変換を通して回路の電圧をPC上に表示しようとしてるのですが、オススメの参考書などございましたら教えて頂けませんでしょうか。ちなみにC++を使用しています。
>>879 >意図せず生ずるものは誤差でいいけど
>最初からわかってて設計してるのは果たして…
シリアルの通信速度なんかだと、クロックを何分周すれば誤差がどれだけだからOK…
みたいな設計をしますよね?
それって何か問題なんですか?
実数割り算ルーチンが組み込まれるとコンパイルできなくなる
885 :
866 :2011/11/28(月) 00:45:48.76 ID:4MAlDInr
なるほど、演算に時間がかかってしまうのと、誤差が生じてしまうため
避けた方が良いということですね。勉強になります。
>>875 なぜ桁あふれにいたったか>
存在しないとは思いますが、10bitまで計算できるけど表示(保持)できるのは8bitまで
というマイコンがあったとしたら、符号とかでもバグになるんじゃないかなーと思ったので
例えば、15/7=2.1428571なのか、
0.042857142なのか
とか。もしかしたら、4.2857142とかにもなってしまうんじゃないかなーと、素人は考えました。
>>885 15/7=2 だね。
整数演算だから小数点以下は切り捨てだよ。
浮動小数点演算は、メモリ食いで遅いから本当に必要でなければ使わないね。
>>886 ありがとうございます。そういえばMPLABでクロックに小数点を使った時に変な色になりました。
デバッグでは反映されているのに、実行してみると何も変化していない様な気がしたんですよ。
まぁ、人間が認識できる速さのレベルなんてたがが知れてるとは思いますが、納得しました。
>>878 >誤差であってウソではないな
それはいかんだろ、設計的に知っていてやるのは。
>>880 の言う通り
>つまらんことしてわかりづらいコードにしてバグ入れ込んだら元も子もない。
この一言に尽きる。
定数の割り算なら、事前に逆数の乗算にできるけど、
float A = AD値1 / AD値2 というときは、そうも行かない。
結局floatを使って割り算するしかない。
思い出した。 昔、デジタル燃費計を作ったときに、結局割り算を使ったんだ。 323km / 27L とか 分母がドンドン変化していくので、困った。
ノウハウとして、割り算せずに済むならできるだけしない方がいいよねって話なだけで 決して割り算なんてやってはダメなんて誰も言ってない 割り算でしか解決できない問題を取り上げて「ほら割り算いるだろ(ドヤ」って言われてもねぇ・・・
>>888 >>889 >float A = AD値1 / AD値2 というときは、そうも行かない。
>結局floatを使って割り算するしかない。
もうちょっと勉強した方が良いと思う。
浮動小数点演算を使う前に固定小数点演算が使えるか考えた方がよいと思う。
固定小数点演算のライブラリが見つかりませんって言われるぞ
PIC使ってさ本当にfloatが必要な時ってどんなとき?
ロボ制御でクォータニオンを扱うとき
>>845 >>850-852 32kHzの水晶発振子で動作しました。
レジスタの設定も色々とありデータシートを何度も見ることになりました。
日本語のデータシートでなければきっと理解できなかったと思います。
最後に35kHzでも試しましたが、やはりダメでした。
ちなみに、コンデンサは15pFと68pFの両方で試してどちらも動作しました。
直列抵抗は無しです。
亀レスになりましたが、皆様ありがとうございました。
固定小数点演算は四則演算だけなら特別なものはいらないよ。 任意の桁に小数点があるものとして計算するだけだからね。
899 :
774ワット発電中さん :2011/11/28(月) 22:53:20.50 ID:FCVLrEz4
>>896 様
ありがとうございます。参考にさせていただきます。
900 :
774ワット発電中さん :2011/11/28(月) 23:34:07.64 ID:BQX0RRMX
3個同時点灯なら大きく間違ってはいない 個別点灯でも点灯/消灯が何かの情報を表現しているなら点灯個数によって各LEDの点灯時の明るさが変化するだけで害はない 各LEDの印加電圧/電流特性が同じなら抵抗が共通でも それぞれに流れる電流は3等分されるから互いに同じ明るさで点灯することが期待できる でも実際は各LEDの印加電圧/電流特性が互いに少し違うから 多目に電流が流れるLEDは明るめに点き少な目に電流が流れるLEDは暗めに点くことになる それを気にするかどうかの問題だ
903 :
774ワット発電中さん :2011/11/28(月) 23:54:55.84 ID:BQX0RRMX
複数のスレに同時に書き込むのがマナー違反だって今知ったスマン
904 :
774ワット発電中さん :2011/11/28(月) 23:58:23.40 ID:BQX0RRMX
>>902 回答ありがとうございます。確かに作っててLEDの明るさが変わるなぁとは思っていました。
ではスイッチの場合はまとめてもいいんですか?
905 :
774ワット発電中さん :2011/11/29(火) 00:05:02.46 ID:6fOAvOlo
電子工作入門者・初心者の集うスレ 37こっちに移ります
一端がGNDに接続されたスイッチと 一端が電源電圧に接続された抵抗とを直列接続し その接続点の状態をマイコンのポートで読みとる場合のことを行っているのであれば 複数のスイッチで抵抗を共通化すると マイコンから見れば 1つのスイッチがONされると 複数のスイッチ全てがONされたということになる つまり各スイッチのON/OFFを見分けられない 複数のスイッチのどれか1つでも押されたらマイコンが1つの動作をする という目的ならそれでも良いだろう
907 :
774ワット発電中さん :2011/11/29(火) 00:11:24.14 ID:6fOAvOlo
>>906 確かにww今考えたらそうでした。アホな質問してすみませんでした
908 :
774ワット発電中さん :2011/11/29(火) 00:14:54.63 ID:6fOAvOlo
3つのポートはそれぞれ入力に設定されていて ポートの状態を読むのなら 各スイッチがOFFのときは各ポートは高インピーダンスで不確定なポートの状態を読むことになる 各スイッチがONのときは各ポートは状態「GND」を確実に検出することができる でも各スイッチがOFFのときは各ポートは高インピーダンスで不確定なポートの状態だからスイッチONと検出されたりOFFと検出されたりする スイッチがONされていないのにスイッチONと検出されても良い用途ならそれでも良いだろう マイコンには入力ポートの内部プルアップ機能を持っているものがあるから利用できるならそれを利用するのが簡単確実だろう
910 :
774ワット発電中さん :2011/11/29(火) 00:28:17.34 ID:l9oGRb9C
マルチポストがマナー違反だとなってるけど、あるスレにポストしてレスがなければ他のスレにポスト したくなるのもわかる。私的にはだいたいポストから12時間以内にレスがなかった場合、それスレでは 回答は得られないと判断するが、他の人はそのあたりどのような基準をもってるのかな?
ではプルアップ抵抗をまとめることは出来ますか
出来る訳ないだろ
>>910 質問者が似たようなスレと思うようなスレは、同じ人が見ている可能性が
高いから、スレを変えても結果は同じでマルチポストだと思う。
>>911 出来るよ。意図した様に動かないかも試練が
>>910 12時間って、それより長い周期でしか見てない人もいるでしょ。
他のスレ行くなら質問閉じてからね。
>>911 8個とかまとまったやつがあるよね
何て言ったっけ?集合抵抗?
>>908 これでok?って何がokなんだ?
その抵抗は何を意図して入れてる?
>>911 「毎日似たような食事しかしてないんだろ?週1回にまとめろ」
920 :
774ワット発電中さん :2011/11/29(火) 11:50:01.06 ID:DGwwdHPE
16F84Aひとつでふたつの周波数を同時にカウントする事って出来ます?出来なければふたつ乗せれば行けますか?
遅い周波数ならポートの変化する時間を測れば入力ポートの数だけ周波数を測れるよ 周波数カウンタが欲しいなら秋月に売ってる1000円くらいのテスターに 10Hz〜10MHz測れる奴があるから2個買えばいい
922 :
のうし :2011/11/29(火) 13:41:40.86 ID:QpbzUas4
AY-ほげほげに、MMLを解釈するなんていう高度な機能を持ってるなんてものがあるのか?
AY-xxxxって、PSGのシリーズのことかしら? MML(のようなコード)をレジスタに投げるカタチにする埋め込みソースコード(ライブラリ)のことじゃないかしら? EX-ORで混ぜられる音情報って何かしら?
925 :
922 :2011/11/29(火) 15:09:08.30 ID:QpbzUas4
せめてFM音源にしようぜ
927 :
925 :2011/11/29(火) 15:11:10.83 ID:QpbzUas4
dsPICにそのライブラリはあるの? 実現はできそうだけど。
3和音のFM音源なら実現した例があるみたいよ
929 :
927 :2011/11/29(火) 15:42:44.03 ID:QpbzUas4
MOVWFとかDECFSZとか1つ押しただけで出るような専用のキーボードみたいなのってありますか?
キーに文字列も割り当てられるプログラマブルキーボードとかプログラマブルテンキーとかあるな
そういうキーボードをPICで
CCS-C(Ver4.120)を用い、PIC16F1939でEEPROMの初期値を定義しようとしています。 しかし、開始番地をどのようにしたら良いか分からず困っています。 例えば16F877の場合は→ #rom 0x2100={0x01} 18F系の場合は→ #rom 0xf00000={0x01} のように定義してできたのですが、16F1939ではどちらもダメでした。 あてずっぽで、0x4100とか0x8100とか色々試したのですがやっぱりできませんでした。 (コンパイルは通るのですが、PICkit2で読込み時に警告出ます) どなたかご存じの方はおられませんでしょうか?
934 :
774ワット発電中さん :2011/11/29(火) 20:44:37.52 ID:sBIQi/7D
PICkit"は確か標準では16F19XXや16F18XXには対応してなかったはず 書きこむにはマイクロチップのサイトからデバイスファイルを落とす必要があったかな
936 :
774ワット発電中さん :2011/11/29(火) 20:50:36.96 ID:b7ghICne
PIC16F193X/LF193X/PIC16F194X/LF194X/PIC16LF190X Memory Programming Specificationを見ると .hexファイルの1E000h-1E1FFhにマップされるって書いてある CCS-Cでどうだかは使ってないのでわかんない
アンドロイドってなんでょう?なにかのパワーアップアイテムとか?
任意の数の掛け算や割り算が出来るサブルーチンを以前何処かのサイトで見たのですが、 ご存知の方いませんか?
『1かけて2かけて3かけて4(し)かけたオ××はやめられない!』 『5かけて6かけて7かけて8(やっ)ぱり×××やめられない!』 『9かけて10かけて11ィかけて12(とに)かく×××やめられない!ア、痛かった!!!』
941 :
774ワット発電中さん :2011/11/29(火) 23:30:19.92 ID:EOpKPv9m
自作RCDライタとWinPicで(高電圧)書き込みはおこなえています。 秋月ライタで確認すると、確かに正しく最後まで書き込みはおこなえています。 しかし、読み込みができません。 正確に言うと表面上正常に読み込めるのですが、値が全部FFです。 書き込みができるんですから、何か簡単な間違いじゃないかと思ってるんですが、 何かヒントはありませんか? 読み込み中のVDDは4.9Vで一定しています。 まずどこをチェックすればいいですか?
書き込んだPICは正常に動作するんかね?
全部3FFFじゃなくて全部FFだからEEPROMを読み出してるとか
>>942 これでその部分は既に明らかにしています。
>秋月ライタで確認すると、確かに正しく最後まで書き込みはおこなえています。
946 :
774ワット発電中さん :2011/11/30(水) 00:00:35.60 ID:EOpKPv9m
>>941 ですが、
ハード面の製作不良だと仮定して、
書き込みOK、読み込み駄目の理屈を推測して頂けませんか
答え 自作RCDライタが不安定 以上w
じゃあ俺もその答えでいいやw
949 :
774ワット発電中さん :2011/11/30(水) 00:19:02.60 ID:mKiPpDBF
>>945 屈折してますね。さすがこんなレスに常駐している方です。
あと、さっきは
>>942 へのレスの内容が不適切でした。
あらためて適切なレスをしておきます。
>>942 あなたはファイルをバックアップしてベリファイに成功していても全然安心できない性格なんでしょうね。
コピーしたファイルを全部開いて自分の目で中身を全て確認しないと全く安心できない性格なんでしょうね。
iPodに音楽を持ちだしても、本当に持ち出しに成功していると信じられないんでしょうね。
全曲実際に聴くまでは信じられないんでしょうね。
それくらい
>>942 は的外れなレスです。
+ ; * ☆_+ : , xヾ:、__,..-‐‐:、、,へ.........._ く '´::::::::::::::::ヽ /0:::::::::::::::::::::::', みんな逃げてー = {o:::::::: :( ´Д`):::} ':,:::::::::::つ:::::::つ = ヽ、__;;;;::/ し"~(__)
キャーキャー!
funabashiさん並の良キャラ
突っ込みどころあるがヒントになりそうだから言わないでおこうw
>>946 コードプロテクトされているような気がする。
941様がそんな初歩的なミスをするはずがないだろうw
書けてんなら読めなくてもいいじゃんw つーか、きっとあそこがあれなんだろうなとは思う
RCDライタの構造からするとまあ推測はできるわな
>>946 注文通り推測したぜw
書けたプログラム通りに動作するなら読める必要なんてないよね CDRに音楽データ焼いて再生してみてちゃんと聴けたらそれでいいわけで CDRに記録されたデータをデータ列として確認するなんて無意味なのと同じだよ
書けるけど読めないなら、CTS線の配線間違いくらいじゃない?
おいおいw そんな簡単なことは言うまでもないだろう
MPLAB X IDE(beta)使ってる人いる? さっき使ってみたけど、まずまずじゃないかと個人的に思う 何よりもMacからも普通に書き込めたのがちょっと感動
秋月ライタで確認しただけで正常動作したとは書いていない きっと屈折している者の一人です 秋月ライタも不安定
屈折していたCTSの配線は直ったのだろうか
10f222用にcvasm16でアセンブラしようとしてるんですが "use of unknow symbol _INTRC_OSC_NOCLKOUT"と表示されてアセンブラできません 解決策ごさいませんか?
>>964 質問に答えが書いてあるじゃないか
"_INTRC_OSC_NOCLKOUTという未定義のシンボルを使っている"と表示されてアセンブラできません
1.使っちゃいけないシンボルを使ってるから使うのをやめる
2.使えるはずのシンボルが定義されていないバグがあるから、自分で定義する
3.その他イロイロ
アセンブラだからトラブルを回避するのに困るようなことはないでしょ
>>965 落ち着いて考えてみればそうですね
ありがとうございます そしてスレ汚し失礼しました
967 :
933 :2011/11/30(水) 18:42:14.38 ID:T/750XDm
>>935 >>936 アドバイスありがとう!
なるほど、確かにMemory Programming Specificationっていう別資料に書いてますね。
とりあえず #rom 0x01E000={0x01} とやって試してみましたがまだダメでした。
もうちょっと調べてから報告します。(もしもコンパイラのバグだったら泣く;)
ライタが調子悪いので買おうと思って秋月のページを見ているのですが、 PicKitが無難かなと思って見ているのですが、ICのソケットはどうなっていますか? 秋月プログラマーにはソケットがありますが、PicKitはどうやってICをつなぎますか?
ハンダ付け
>>968 www.picfun.com/PICkit2/PICkit02.html
>>967 EEPROMのアドレスはコードメモリのワードアドレス単位で指定するから、
.hexファイルでのアドレス1E000hは、コードメモリでは1ビットずれた0xF000に対応するはず。
973 :
933 :2011/11/30(水) 19:21:05.12 ID:T/750XDm
>>971 うわぁ!
#rom 0xF000={0x01} としたら16F1939のEEPROMに書き込めました!
ありがとうございました。もっと勉強します。
975 :
774ワット発電中さん :2011/11/30(水) 21:31:38.74 ID:PHXYty/l
>974 静電容量が絡んでなけりゃな。
PIC16F1xxx使いたくて HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.83 を877 887とかで試したら今まで俺が使っていたコンパイラ(Grich社製コンパイラ)より高性能じゃないか! 最適化省かれてるのに ふざけるな!
>>976 HI-TECH Lite版は最適化省かれるどころか、差し障りのない命令が加わってるよ。重く大きくなる感じ。
そのLite版がGrich社製より高性能って、Grich社製が気になる
何気なく書いた割り算とかが、シフトやANDに置き換わってると、 おお、と思う
HI-TECH C の Lite 版はひどいぞ 分岐に無駄なGOTOを追加してサイクル数とプログラムメモリを無駄に消費しやがる 最適化がないだけならいいけど、無駄なコード入れられるのはちょっと… CCS@16FやC18評価版だと逆アセンブルリスト見ながら人力で最適化して ある程度タイミングクリティカルなプログラムもCで書けるけど、 Hi-Techじゃ無理だw
>>979 無料の意味分かるのか?
無償提供に文句を言ったって無駄。
購入すれば問題の無い事。
最適化されなくてもうまく使えばアセンブラより生産性高い。
無駄なGOTOをわざわざ入れてる訳じゃなくて、場合によってはその前に別の処理が入るんだよ ループ処理を翻訳した直後ではそうなってる で、不要な部分を削っていくのが最適化
すいませんが、大きな桁数同士の割り算をPICでやりたいのですが、良い方法はありませんでしょうか。 たとえば 60000000/1176472 とかです。 何をやりたいかというと、エアモーターの回転数を細かく測りたいので、 基準の時間をつくり、一回転中に何回パルスが入るかをカウントして回転数を求めたいのです。 (よくある0.6秒間のカウント数を表示する方法では低回転の誤差が大きいので)
別アプローチとして割り算を使わない方法を考えるというのもある 0.6秒間のカウント数の表示ではrpmが100単位になってしまうということでしょ? 単純な加算やシフト演算で済むような計算式で加算平均を取って誤差をならしていけばいいと思う
具体的には2進数で計算しやすいように60/128秒単位で回転数を数えるようにする a = 60/128秒間の回転数 b = (b + a*128)/2 rpmの表示 = b のような処理はどうでしょ?
>>982 その程度ならそのまま割り算したってたいしたことないよ。
64ビットの型を知らないだけだったり
32ビット/32ビットを計算すればいいじゃん
ttp://orange.zero.jp/electronics/pic/pic.html 最大12000rpm、1パルス/回転なら200パルス/秒で5msec/パルス
32ビット/32ビットはHFINTOSCの8MHzで2msecかからないというところか、
1回転毎に計算しても間に合いそう
それより重要なのは時間分解能の設定だな
最大12000rpmで1rpm分解能を狙うなら、カウントクロック8MHz、
被除数は0x1C9C3800x2の0x39387000を俺なら選ぶ
加えて、精度がそこそこの外部クロックを使用するか、
またはHFINTOSCなら被除数をチューニングして校正するね
アドバイスじゃなく押し付けよくない
64ビット変数はいらない気がするが かえって計算時間の増加を招く逆アドバイスになったりして
200rpm以上は従来の方法、それ以下のときは延々と引き算繰り返す、でどう? 回転数低い(=更新も少ない)んだし、高々200回の引き算なら十分なんとかなるんじゃね?
パルス入力から数値更新までに高いレスポンスが求められる仕様ならお勧めしにくいな
うわぁ・・・ (;゚д゚)…
いっぱいレスが付いて驚きますた。
Cみたいにlongだのfloatだのがあれば良いのですが、
コンパイラも知識も無く、やっとこさ先日からMPASMで始めてまして、
>>987 さんのサイト見て感心している次第です。
>>990 さんの方法も考えてみましたが、果たして自分で出来るのか・・・と。
>>983 さんの方法、理解しようと奮闘中です・・・。
>>984 のは重み付け平均だな
定時間t0毎のサンプリングなら時定数2xt0の一次遅れフィルタとみなせるが、
パルス毎の計算だとどう見ればよいものか・・・
精度が数桁でいいのなら、分母・分子が共に16bit(unsigned short)に 収まるまで両方右シフトしてから割り算でどうかね。
桁が多いまま、というのは精度が高いという意味だけど、 そんな精度が得られてるとも思えないから、 意味のない精度を大事に保存して計算するのは無駄だな
回転数は時間で計測するから、意外に精度は高く得られる 仕様的に意味がないほどの高精度は不要だが
ああ、シフトしてしまうと肝心の低回転での精度が得られないのか 精度とか有効数字という浮動小数点的なものを整数でやろうとするから 最大桁に合わせる必要が出るんだな 一定時間毎のカウントじゃなくて、一定カウントに要する時間を測定すれば、 精度一定になると思う
>>992 >>984 の式は精度は出ないよ
0.6秒単位で測るより少しだけ精度が上がるのと(100rpmを下回るといきなりゼロになったりはしない)
その方式のプログラムをちょっと変えるだけで済むというのがメリット
数値は実際の回転変化より少し遅れた値になるけれど
そのぶん滑らかに変化する
数値表示だったらそういう処理を入れた方が見やすい場合もある
例では、直近までの平均値1/2+今のカウント値1/2で加算しているけれど
3/4+1/4とか7/8+1/8とかいう計算もできて、より滑らかな変化になる
でも今からゼロからプログラムを組むんであったらどの方法でもいいかな 作成前に詳細な仕様を決められる経験があるわけでもないので 細かいところはプログラムが動いてから考えればいいと思う
1000!!!
>>982 引き算してけばいいだろJK
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。