Hatena::Groupecrafts

Chuckの電子工作

趣味の電子工作を中心に書いています。音関係工作はg:emusic:id:Chuckどうぞ。


検索エンジンより飛んでこられたかたで、お探しのキーワードが見つからないかたは、↑の検索をご利用ください。

2008-06-10

PICkit2

$10で買ったもののぜんぜん使わずに放置しっぱなしのPICkit2ですが、

404 - ファイルまたはディレクトリが見つかりません。

なる記事があるようで、今後が楽しみです。

ただ、今となってはあんまりPICのアセンブリ言語を触ろうという気になれないところがペケです。

ChuckChuck2008/06/12 15:49う、2/2が出たので読んでみたら大した記事じゃなかった…

Lynx-EyEDLynx-EyED2008/06/16 00:35この前,自分で書いたはずの16F877Aのアセンブラコード読んだら理解不能でしたorz

ChuckChuck2008/06/20 08:17そうなんですよね。PICのアセンブリ言語コードは、書いているときはいいんだけれど、ちょっと経つと自分にとって暗号文書です。全行にコメントを入れるはめに陥っています。

suikansuikan2008/06/21 08:5520年前、初めて下についた上司の書いたアセンブリプログラムは、びっしりとコメントが書いてありました。各行に英語で「うまくいくかなぁ?よっしゃ、うまくいった、あっちで作業!」のノリのいいコメントがちりばめてあって感心したものです。

ChuckChuck2008/07/01 08:12そういうコメントを私も書きたい…

トラックバック - http://ecrafts.g.hatena.ne.jp/Chuck/20080610

2008-02-22

vs戦

no title

ワンチップマイコンのテーマでブクマが88も付くなんてすごい。

元の記事を書かれた方は有名な方なのかしら。

単著のない私が昔に書いたAVRをお勧めした記事はこちら 2004-08-12 - Chuckの電子工作 - Ecraftsグループ。その時点よりもデバイスの入手性も性能も上がってきていて嬉しいかぎり。

Lynx-EyEDLynx-EyED2008/03/03 21:09PICはやめたくないけどAVRも好きです。ATmegaもw
でも、MPLAB C30の期限過ぎた後の最適化の悪さには閉口です…

ChuckChuck2008/03/04 08:28併用しましょう! といいつつPICを最近いじっていません。PICKit2 も開封しただけ…
そうですか、C30は試用期限を過ぎて最適化が止まるとそんなに悪いコードを吐きますか。

トラックバック - http://ecrafts.g.hatena.ne.jp/Chuck/20080222

2006-01-29

PICでも面白い本がありました

CQ出版の紹介ページ

PICマイコンの基礎とセンサ活用入門

↑内容見本あります。

PICでも面白い本がありました。

というとちょっと失礼だけれど、PICを取り上げた本は初心者指向性を持っているものが大半な印象がありました。8pin PICに特化したりC言語での開発を学んだところで習作の域を脱するのが難しく、自分のアイディアを実装にまで落とし込むまでに深い溝を感じるんじゃないかなぁ、と他人事ながら思っていました。オブジェクト・ドリブンでなんでも調べる人はともかく、習得モチベーションからアプリを探るようなタイ*1だと特に…

この本はもう一歩進める上で必要になるハードウェアの回路やソフトウェアの技術をまとめてあります。なかなかこういうコンテンツWEB上に見られませんから、出版社の企画の面目躍如といったところでしょうか。

ワンチップマイコン入門本 をこなしてサンプル程度が読み書きできるようになった → 実アプリケーションに進んだが、ポートから制御しようとしたらつまづいた

みたいな流れを踏んでいる人にはいいのではないでしょうか。

どうしてこんな電気・電子回路リテラシーからやらねばならんのかというムキもあろうかと思いますが、「“PIC”先にありき」な入門も最近は多いように見えますよ、いろんな掲示板を眺めていると。

*1:定年した人が余暇に「ひとつ電子工作でも」と言っているような事例。

suikansuikan2006/02/01 12:09DIPマイコンに関してはこういう本の需要が大きいでしょうね。しかしこういう本を書くというのは知識と著述技量と使命感の全部を持ってないといけませんね。大抵、持ってるひとは会社がそんな暇をあたえませんけど。

ChuckChuck2006/02/03 08:57おっしゃるとおりです>「全部を持って」。どんな分野でも入門からちょっと頭を抜けたところっていうのが色々と難しいのですよね。

トラックバック - http://ecrafts.g.hatena.ne.jp/Chuck/20060129

2005-04-30

色で電圧を表現する

| 08:04

現在 EDN のリンクが間違っているようで…

http://www.ednjapan.com/content/issue/2005/04/idea/idea04.html

これで記事参照できるはずです。

写真を追加

↓の写真を追加しました。

外付け部品はパスコン三色LED+その電流制限抵抗3本、加えて、入力に使っているあるピンのプルアップ抵抗。

アナログ入力をオープンにしておくと浮遊電位で色々色が変わります。

色で電圧を表現する

できた(たぶん)。

もともとはEDNのこの作例を参照しようとしていたものですが、私の所有していないコンパイラで作られていたので、パラメータも替えてアセンブリ言語スクラッチから書きました。回路図ソースから類推してください。リクエストがあって元気だったら描きます。

そもそもはアナログシンセLFOを色で表現してみたいという考えから作ったものです。PIC一発ではだめでアナログ信号の前処理が必要になりますが、いろいろ考えてみたものの、+5Vのほかに正負電源を用意しないとうまく動かなさそうです。

しかし、PICはなんとなく書きにくい。いや、書いたはいいけどあとで読み直すのがイヤになるニーモニックであるなぁと常々思います。ペリフェラルの初期化もなんかこの順序でないとうまくいかなかったりするものもあったりするようでしたが、とりあえずは動けばいいので追求はしていません。なんか力が入っていないですな。

はじめからEDNのソースが流用できないと気づいていれば、AVR+GCCで書いたものを…

愚痴はともかく、以下ソース

;
;	PIC12F675 LED Voltmeter
;
;	Apr., 29, 2005 Chuck (http://ecrafts.g.hatena.ne.jp/Chuck/)
;

list		p=12f675		; list directive to define processor
#include	<p12f675.inc>	; processor specific variable definitions

__CONFIG	_CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 

PWM_FRAME	equ		d'41'
bRED		equ		0	; GPIO bit 0
bGREEN		equ		1	; GPIO bit 1
bBLUE		equ		2	; GPIO bit 2
bADFLG		equ		0	; AD_FLAG
bLOGIC		equ		1	; LED 0:source/1:sink from GP3

; variables
	CBLOCK	 H'20'	;
	WTEMP
	STATUSTEMP
	frame_cnt
	color_out
	red
	green
	blue
	red_tmp
	green_tmp
	blue_tmp
	ad_tmp
	flag
	ENDC

; objects
	org	0x000
	goto	INIT
	org 0x004
;	goto	ISR

ISR
PUSHD
	movwf	WTEMP		;SAVE CONTEXT
	swapf	STATUS, W
	clrf	STATUS
	movwf	STATUSTEMP	;
T0ISR
	nop
	bcf		INTCON,T0IF		; clear timer0 interrupt
	movlw	d'256' - d'64' + d'12'	; 64d cnt, ovhead 15
	movwf	TMR0
	decfsz	frame_cnt,f
	goto	LED_PROC
	movlw	PWM_FRAME		; reset frame counter
	movwf	frame_cnt
	bsf		flag, bADFLG
	movf	red, W			; reset RED_tmp
	movwf	red_tmp
	movf	green, W		; reset GREEN_tmp
	movwf	green_tmp
	movf	blue, W			; reset BLUE_tmp
	movwf	blue_tmp

LED_PROC
PROC_RED
	movf	red_tmp, F
	btfss	STATUS, Z
	goto	PROC_RED_ON
	bcf		color_out, bRED
	goto	PROC_GREEN
PROC_RED_ON
	decfsz	red_tmp, F
	bsf		color_out, bRED

PROC_GREEN
	movf	green_tmp, F
	btfss	STATUS, Z
	goto	PROC_GREEN_ON
	bcf		color_out, bGREEN
	goto	PROC_BLUE
PROC_GREEN_ON
	decfsz	green_tmp, F
	bsf		color_out, bGREEN

PROC_BLUE
	movf	blue_tmp, F
	btfss	STATUS, Z
	goto	PROC_BLUE_ON
	bcf		color_out, bBLUE
	goto	PROC_COLOR
PROC_BLUE_ON
	decfsz	blue_tmp, F
	bsf		color_out, bBLUE

PROC_COLOR
	movf	color_out, W
	btfsc	flag, bLOGIC
	comf	color_out, W
	andlw	b'00000111'
	movwf	GPIO

POPD
	swapf	STATUSTEMP, W	;RESTORE CONTEXT
	movwf	STATUS
	swapf	WTEMP, F
	swapf	WTEMP, W
	retfie

INIT
	bsf		STATUS,RP0		; Select Bank 1
	call	3FFh			; Internal RC calibration
	movwf	OSCCAL
	movlw	b'10001000'		; T0CS, PreScaler for WDT
	movwf	OPTION_REG
	movlw	b'10100000'		; GIE/T0IE
	movwf	INTCON
	bcf		STATUS,RP0
	clrf	TMR0
	clrf	GPIO			; GPIO cleared
	movlw	h'07'			; comparator dsabled
	movwf	CMCON
	bsf		STATUS,RP0
	movlw	b'00011000'		; Fosc/8, AN3 enabled
	movwf	ANSEL			;
	movlw	b'00100000'		; GP5 pull-up
	movwf	WPU
	movlw	b'00111000'		; GP5, GP3 input, GP2-0 output
	movwf	TRISIO
	bcf		STATUS,RP0		; Select Bank 0
	clrf	flag

	movlw	b'00001101'		; A/D left, Vdd ref, AN3
	movwf	ADCON0

	movlw	PWM_FRAME		; PWM frame counter set
	movwf	frame_cnt
	clrf	flag
	movf	red, W			; reset RED
	movwf	red_tmp
	movf	green, W		; reset GREEN
	movwf	green_tmp
	movf	blue, W			; reset BLUE
	movwf	blue_tmp

	btfsc	GPIO, GP3		; if GP3, sink LED current
	bsf		flag, bLOGIC	;    (if bLOGIC, sink)
	clrf	TMR0

MAIN_LOOP

	btfss	flag, bADFLG		; test A/D asserted?
	goto	MAIN_LOOP

;	bsf		ADCON0, ADON
	bsf		ADCON0, GO
AD_WAIT_LOOP
	btfsc	ADCON0, GO_DONE
	goto	AD_WAIT_LOOP
	bcf		flag, bADFLG
	movf	ADRESH, W
	btfss	GPIO, GP5		; if GP5, default pattern
	sublw	d'255'
	movwf	ad_tmp
;	bcf		ADCON0, ADON

REGION6
	movlw	d'214'
	subwf	ad_tmp, W
	btfss	STATUS, C
	goto	REGION5
	movwf	blue
	movlw	PWM_FRAME
	movwf	red
	movwf	green
	goto	MAIN_LOOP	

REGION5
	movlw	d'172'
	subwf	ad_tmp, W
	btfss	STATUS, C
	goto	REGION4
	movwf	green
	movlw	PWM_FRAME
	movwf	red
	clrf	blue
	goto	MAIN_LOOP	

REGION4
	movlw	d'130'
	subwf	ad_tmp, W
	btfss	STATUS, C
	goto	REGION3
	movwf	red
	clrf	green
	clrf	blue
	goto	MAIN_LOOP	

REGION3
	movlw	d'126'
	subwf	ad_tmp, W
	btfss	STATUS, C
	goto	REGION2
	clrf	red
	clrf	green
	clrf	blue
	goto	MAIN_LOOP	

REGION2
	movlw	d'84'
	subwf	ad_tmp, W
	btfss	STATUS, C
	goto	REGION1
	sublw	PWM_FRAME
	movwf	blue
	clrf	red
	clrf	green
	goto	MAIN_LOOP	

REGION1
	movlw	d'42'
	subwf	ad_tmp, W
	btfss	STATUS, C
	goto	REGION0
	sublw	PWM_FRAME
	movwf	red
	movlw	PWM_FRAME
	movwf	blue
	clrf	green
	goto	MAIN_LOOP	

REGION0
	movf	ad_tmp, W
	movwf	red
	sublw	PWM_FRAME
	movwf	green
	movlw	PWM_FRAME
	movwf	blue
	goto	MAIN_LOOP	


REGION_END
	goto	MAIN_LOOP


	END

junnekojunneko2005/04/30 21:26こんちは。自分も数日前にPICでアセンブラを組んでましたが、「訳わかんねー」と叫び出して、連休明けに解読できるように一々コメント入れてからGWに入りました。

ChuckChuck2005/05/01 15:22こんにちは。なるほど>コメント
趣味のPICなのでいいのですが、仕事だったらこのデバイスは選ばないです。もっとも、そもそもパフォーマンス的にミートしないのですが。

トラックバック - http://ecrafts.g.hatena.ne.jp/Chuck/20050430

2005-04-29

トラックバック - http://ecrafts.g.hatena.ne.jp/Chuck/20050429

2005-04-27

PIC12F675 を弄ってみています

| 20:19

久しぶりのPICなのですっかり忘れています。

データシートの DS41190C を見ながらアーキテクチャとペリフェラルとニーモニックを参照して組んでいます。

で、嵌ったところ。

どこにもそんな説明は見当たらないし、A/D conversion STATUS bit なんて説明があるのでアレなんですが、Figure7-1 はそんな感じの図面になっていて、実際 ADONフラグを立てないと MPLAB SIM は進みませんでした。

データシート以外にも見ないといけないのかなぁ…

加えて、

  • A/DコンバータのADON と A/Dコンバータを起動する GO/DONE は別サイクルでないといけないらしい

ということのようです。こちらはデータシートに記載がありました。

追記

・I/O 1本あたりの sink/source 電流は 25mA

・GPIO 全部で sink/source 電流は 125mA

じゅうぶん、じゅうぶん(ニヤリ)

追記2

さらに注意すべき点として、

  • アナログ入力とするピンでも、TRISIOで入力としておく

ANSELだけではダメ。けっこう最後まで嵌りました。これを忘れていてオープン時にプルアップされているような症状が出ていたため、信号源の出力インピーダンスを疑っていました。

r0r0r0r02005/04/28 00:24さては、じわっとコントロールしてMFSHに搭載する気ですね?

ChuckChuck2005/04/28 07:05ふっふっふのふ。お楽しみにー。

r0r0r0r02005/04/28 22:42そしたら僕のS&Hに拡張CV用ジャックなるものを搭載しようかなw

トラックバック - http://ecrafts.g.hatena.ne.jp/Chuck/20050427