PIC

[ リスト | 詳細 ]

記事検索
検索

全3ページ

[1] [2] [3]

[ 次のページ ]

CD-Drive でCD Player

PICでCD-Drive のATAPI Commandを打てば動くだろう事は分かったのですが
ATAPIの細かいところは知らないので,CQ出版のATAPIの本を買いました。
一方で,Soft Control をどうするかググってみると,先人のソースが見つかりました。
MPUは違いますが,Assembler sourceなので大体分かります。
これを移植すればよいかと思って 色々夢想していました。

ググっている時に CD-ROM をCD-Player にコントロールするキットが e-Bayで出ているのを
見つけました。 $22くらい.  自分で組むと PICとか部品はまあ全部で1000円ちょっとで済むと
思うのですが,基板を起こすと それだけで20$越えるので, これだとkitを買った方が安そうです。
MPUがPICでないので、 修正とかは出来ませんけど。
ArduinoとLCDと 40pin cableと 付いて22$なら良いかと ポチってしまいました。

Chinaからですけど、問題無ければ年内には着く見込み。 そしたらちょっと遊んでみます。

DVD driveで CD-Player?

とあるところから DVD Driveを入手。  これを使ってsubのCD Playerでも作れないかと
ちょっとググって見ました。 IDE なので,PICから Commandを投げれば CD-のDriveとして
使えるらしい。 Driveには Audio Out とDigital Outが出ているので、 当然 Digital Outを
外付けDACにつなごうと。

IDEを制御する基板,マイコンのキットもあるようですが, 大したことをするわけではないので
PICでprogram を組もうかと, また無謀な考え。

とりあえず先人の知恵を拝借すべく 更にググると PICのAssembler source,AudunoのAssembler Sourceを発見。  これと ATAPIの資料を読めば 何だか簡単に作れる気がしてきました。(妄想癖ですね)

まだ CS8416のSoft Base コントローラも出来ていないのにねえ。

8416のCodeも書きながら,ATAPIのお勉強もすることにします。


Real Time Clock

到着した基板のうち RTCを組んでみました。
電池駆動なので 3.3V対応のLCDをつないだのですが、Back-Lightをつけないと
よく見えません。 Back-Lightに20mAとあるので 電池で動かすのは無理がありそう。
見る時だけ BLをONするようにしないと電池が保ちませんね。

イメージ 1

因みにPCB化する前に手配線で組んだものはこちら

イメージ 2

Universalの基板に RTC ICとPIC,それに 3V->5VのUp-converterを使いました。
電池が2-3週間しか保ちませんでした。

今回の基板は sizeが今ひとつ. まあ 上の汚い配線に比べれば大分良いです。
時刻合わせのタクトSWにチャッタリング防止を入れなかったので,時刻を合わせる時ちょっと厄介。
まあ頻繁に変更するわけではないのでそのままにしてあります。

来週くらいから DAI/DAC の制作に取りかかることにします。


RTC-Clock のProgram

不完全ですが、RTC-clockの管理Programを添付します。 (一部のみ)
RTCチップ から 1s毎に割り込みをかけて 年/月/週/日/時/分/秒を読み込んでいます。
割り込み以外はSleep。 RTCがI2Cなので、 I2Cで読み/書きをしています。
ここの部分は自力で書きましたが、他の LCDの設定とか、 BCD/Binaryの変換とかは
PICのサイトを参考にさせていただいています。 LCD設定は自分で書けそうですが
BCD/Binaryの変換は このcodeは書けませんね。 読んでとても参考になりました。
でもまだ自分では書けそうにない。 LCDの表示用にBinaryから ASCII変換は書きましたけど,
BCDへの 変換とか、逆変換は こんなに綺麗には書けません。

もしmoochyさんの参考になれば嬉しいです。
と,ここまで書いて asm fileの添付の仕方が分かりません。 どうしましょう。

ちょっと長いですけど I2Cの部分を貼り付けます。 他の部分は Fileの添付方法を調べてから
また載せることにします。

Data SheetのI2C MasterのTiming Chart に従って 各statusを読みながら
処理をしています。


;***********************************************************
; I2C routine
;***********************************************************
;In W=IIC device address +R/W
;data Write to slave device
;
I2STAT
BANKSEL SSP1CON2
BSF SSP1CON2, 0 ;SEN=1 start condition
STATW_C
BTFSC SSP1CON2, 0 ;SEN=0 ? Start ready check
BRA STATW_C
RETURN
;---------------------------------------
I2ADW ;I2C Slave address W
BANKSEL SSP1BUF
MOVWF SSP1BUF
BANKSEL PIR1
BCF PIR1, 3 ;SSP1F Flag clear

BANKSEL SSP1STAT
DATW1:
BTFSC SSP1STAT, 0 ;Data sent check
BRA DATW1

BANKSEL PIR1
ACKW1:
BTFSS PIR1, 3
BRA ACKW1

BANKSEL SSP1CON2
BTFSC SSP1CON2, 6 ;ACK flag check
GOTO IICERR ;error
BANKSEL PIR1
BCF PIR1, 3
RETURN
;---------------------------------------
I2REG
BANKSEL SSP1BUF
MOVWF SSP1BUF
BANKSEL PIR1
BCF PIR1, 3

BANKSEL SSP1STAT
DATW2:
BTFSC SSP1STAT, 0 ;Data sent check
BRA DATW2

BANKSEL PIR1
ACKW2:
BTFSS PIR1, 3
BRA ACKW2

BANKSEL SSP1CON2
BTFSC SSP1CON2, 6 ;ACK flag check
GOTO IICERR ;error
BANKSEL PIR1
BCF PIR1, 3
RETURN
;---------------------------------------
I2WT
BANKSEL SSP1BUF
MOVWF SSP1BUF
BANKSEL PIR1
BCF PIR1, 3

BANKSEL SSP1STAT
DATW3:
BTFSC SSP1STAT, 0 ;BF sent check
BRA DATW3

BANKSEL PIR1
ACKW3:
BTFSS PIR1, 3
BRA ACKW3

BANKSEL SSP1CON2
BTFSC SSP1CON2, 6 ;ACK flag check
GOTO IICERR ;error
BANKSEL PIR1
BCF PIR1, 3
RETURN
;---------------------------------------
I2STOP
BANKSEL SSP1CON2
BSF SSP1CON2, 2 ;PEN=1 stop condition

STP_C:
BTFSC SSP1CON2, 2 ;PEN=0 Stop condition End ?
BRA STP_C

BANKSEL PIR1
BCF PIR1, 3
RETURN

;
;data Read from slave device
;
;---------------------------------------
I2RSTAT
BANKSEL SSP1CON2
BSF SSP1CON2, 1 ;RSEN=1 repeat start

DATR22:
BTFSC SSP1CON2, 1 ;RSEN=0 Restart sent check
BRA DATR22

BANKSEL PIR1
BCF PIR1, 3
RETURN
;---------------------------------------
I2RD0
BANKSEL SSP1CON2
BSF SSP1CON2, 3 ;RCEN=1 Receive Enable
DATR30:
BTFSC SSP1CON2, 3 ;RCEN=0 ? Data Receive check
BRA DATR30
BANKSEL PIR1
BCF PIR1, 3

BANKSEL SSP1BUF
MOVF SSP1BUF,W ;Received data
; MOVWF xxxx

BANKSEL SSP1CON2
BCF SSP1CON2, 5 ;ACKDT=0
BSF SSP1CON2, 4 ;ACKEN=1

ACKR3:
BTFSC SSP1CON2, 4 ;ACKEN=0 ACK finish?
BRA ACKR3 ;

BANKSEL PIR1
BCF PIR1, 3
RETURN

;---------------------------------------
I2RDN
BANKSEL SSP1CON2
BSF SSP1CON2, 3 ;RCEN=1
DATR31:
BTFSC SSP1CON2, 3 ;RSEN=0 ? Data Receive check
BRA DATR31
BANKSEL PIR1
BCF PIR1, 3

BANKSEL SSP1BUF
MOVF SSP1BUF,W ;Received data
; MOVWF xxxx

BANKSEL SSP1CON2
BSF SSP1CON2, 5 ;ACKDT=1 NO-ACK
BSF SSP1CON2, 4 ;ACKEN=1

ACKR33
BTFSC SSP1CON2, 4 ;ACK finish?
BRA ACKR33 ;

BANKSEL PIR1
BCF PIR1, 3
RETURN
;---------------------------------------

IICERR
BANKSEL SSP1CON2
BSF SSP1CON2,2 ;PEN=1 stop condition

STPW_Loop
BTFSC SSP1CON2,2 ;PEN=0 ? stop condition end ?
BRA STPW_Loop

BANKSEL PIR1
BCF PIR1, 3
Return

全然ブログの更新をしないうちに新年になってしまいました。
年末にちまちまRTCクロックをdebugして、やっと時刻設定出来る様になりました。
少しだけ不具合が有りますけど,動作上問題無いのでこれで終了.
難儀したのは、 変数を色々と使っていますが,変数領域がBank0でないといけない。
割り込みとか使っていても、変数を参照するたびにBank0に戻さないと正常に動かない。
初めは Program Listとにらめっこしながら考えていて、どう見てもおかしな所がない,
と、自信を持っていたのですが,本質的なところで前提条件を満たしていませんでした。

ロータリーエンコーダーの時にも似たようなことが有ったのに,学習できていませんでした.

次からは気をつけないと。

これで I2Cの通信Routineも出来たし、 Interrupt On Change も動いたし。
次の目標は DAC+soft  VR。 WM8740をSoft modeで動かし,且つVRも DACの
attenuator を使おうというもの。  個々のSoftは書けたので,後はそれぞれを纏めて
DACとして作る予定。

いつになったら出来るか分かりませんが、 先人の助けを借りながら、基板制作,Soft制作に
入ります。

全3ページ

[1] [2] [3]

[ 次のページ ]


よしもとブログランキング

もっと見る

[PR]お得情報

CMで話題のふるさと納税サイトさとふる
毎日お礼品ランキング更新中!
2019年のふるさと納税は≪12/31まで≫

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事