男うちごはん

エイ!っいと適当に作る料理の紹介
男うちごはん のつもりが状況変化!
食育になりそうな事項のup

PIC12F683 AD変換色々 アセンブラ編

2018年04月18日 07時40分42秒 | PIC12F683

そして、アセンブラです

素人の動作確認用のアセンブラですから、まあ、参考程度に!   雨降って寒いです。

OSC内臓だし、AD付きだし、遊ぶのには面白いPICですね! アンテナSD330のコントローラSDC-1でモータコントロールをPWM制御できれば、CRなしで回路を組めるとな

しかし、 はじめての×× って本(××=PIC)は、初めてでは解らない! 本当に解らない 周りに聞く人もいないし!(愚痴)

アセンブラです

;list p=12F683
 INCLUDE "p12F683.inc"

 __config _BOD_ON & _WDT_OFF & _MCLRE_OFF & _INTOSCIO
 
 ORG 00h
 ;******
T1 EQU 020h
T2 EQU T1+1
T3 EQU T2+1
M1 EQU T3+1
M2 EQU M1+1
M3 EQU M2+1
;*****************************************
;AD変換付きに飛ぶ  ここの飛び先で動作を代えています
; GOTO ADC  ;AD変換テスト用
 GOTO ADCSWOUT ;ADシリアル出力
; GOTO PWMADC          ;PWMADCAD変換PWM動作に飛ぶ
; GOTO AD0145  ;GIPO3=0  01=01/45=23  GIPO3=1 01=45/45=67

 ;*******************
 
 ;**********************
 ;LEDチカチカ PICテスト用
    BCF  STATUS, RP0
    CLRF GPIO
    MOVLW H'07'
    MOVWF CMCON0
    BSF  STATUS,RP0
    CLRF ANSEL
    MOVLW B'101000'
    MOVWF TRISIO
    BCF  STATUS,RP0
 ;*****************************************  ;

;    GOTO  ADCSWOUT1
LOOP
   BTFSC GPIO,5
   GOTO  LOOP2
   BSF  GPIO,2
   GOTO  LOOP3
LOOP2
   BCF  GPIO,2
LOOP3
   BSF  GPIO,4
   CALL  TIM20uS
   BCF  GPIO,4
   GOTO  LOOP
;*****************************************
ADC
   CALL  ADCSET

   CALL  ADLOOP
   CALL  TIM01 
   GOTO  $-2
;AD変換付き  GP2がアナログ入力
 
;Initialize
ADCSET
   MOVLW b'00000111' ;コンパレータモード OFF
   MOVWF CMCON0
   BSF  STATUS,RP0 ;バンク1へ
   MOVLW b'00001100' ;GP2、GP3を入力設定
   MOVWF TRISIO
   MOVLW b'10000000' ;プルアップ無し
   MOVWF OPTION_REG
   MOVLW b'00000000' ;割り込み設定無効
   MOVWF IOC
   MOVLW b'00000000' ;プルアップ無効
   MOVWF WPU
   MOVWF b'01110000' ;OSC=8MHZ
   MOVWF OSCCON
   MOVLW b'01010100' ;AD変換速度とAD入力端子 ANS2設定
   MOVWF ANSEL
   BCF  STATUS,RP0 ;バンク0へ
   MOVLW b'00001000' ;GP2=AN2 ADFM=left
   MOVWF ADCON0
   BCF  INTCON,GPIF
   RETURN
  
 ;**************************************
 
 ;AD変換
ADLOOP
    BSF  ADCON0,ADON
    CALL TIM20uS
    BSF  ADCON0,GO
    BTFSC ADCON0,GO
    GOTO $-1
    MOVFW ADRESH
    MOVWF M1
    RETURN
;****************************************
;データ出力 GP4スタートビット、GP1クロック+データ
ADCSWOUT
    CALL ADCSET
ADCSWOUT1
   CALL ADLOOP
;    MOVLW b'10111011'
;    MOVWF M1
startt
    BCF  GPIO,4
    BCF  GPIO,0
    CALL TIM20uS
    BSF  GPIO,4
    CALL TIM20uS
    BCF  GPIO,4
    CALL TIM20uS
T10
    CALL SHIFT
T11
    CALL SHIFT
T12  
    CALL SHIFT
T13  
    CALL SHIFT
T14  
    CALL SHIFT
T15  
    CALL SHIFT   
T16  
    CALL SHIFT 
T17  
    CALL SHIFT
   

   
    GOTO ADCSWOUT1
;*************************************
SHIFT
    BSF  GPIO,0
    CALL TIM20uS
    BCF  GPIO,0
    MOVF M1,W
    ANDLW b'00000001'
;    MOVWF M1
    MOVWF GPIO
    CALL TIM20uS
    BCF  GPIO,0
    RRF  M1,1
    CALL TIM20uS
    RETURN
   
;*************************************
;PWMADC
PWMADC
    CALL ADCSET
PWMLOOP
    BSF  GPIO,1
   
    BSF       GPIO,0
    CALL ADLOOP   
    CLRF M2
PWMLOOP1
;    CALL TIM02
    DECF M2,1
    DECFSZ M1,1
    GOTO PWMLOOP1
    BCF  GPIO,0
    BCF  GPIO,1
PWMLOOP2
;    CALL TIM02
    DECFSZ M2,1
    GOTO PWMLOOP2
   
    GOTO PWMLOOP
;*************************************
AD0145   ;GIPO3=0  01=01/45=23  GIPO3=1 01=45/45=67
AD0145SET
    CALL ADCSET
AD0145OUT1
   CALL  ADLOOP
   BTFSC GPIO,3
   GOTO  AD0145OUT3
AD0145OUT2  
   CLRF  GPIO
   MOVF  M1,W
   ANDLW b'00000011'
   MOVWF GPIO
   RLF  M1,1
   RLF  M1,0
   ANDLW b'00110000'
   IORWF GPIO,1
   GOTO  AD0145OUT1
AD0145OUT3  
   CLRF  GPIO
   SWAPF M1,1
   GOTO  AD0145OUT2
;***************************************
   
TIM20uS
;    MOVLW D'1'
;    MOVWF T1
;TIMLOOP1
;   DECFSZ T1,F
;    GOTO TIMLOOP1

    NOP
    NOP
    RETURN  
;********************************************
TIM01
    BSF  GPIO,4
     DECFSZ  T1,F
    GOTO  TIM01
    BCF  GPIO,4
    RETURN
;**********************************************
TIM02
    MOVLW H'01'
    MOVWF T1
    DECFSZ  T1,F
    GOTO $-1
    RETURN
END

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PIC12F683 AD変換色々

2018年04月18日 07時23分29秒 | PIC12F683

野菜の苗を植えたり、種撒いたり、真剣に百姓を休み休みやってます

ピーマンプロジェクト 右が 茄子プロジェクト  まっすぐじゃないとこが味?????

休み休みの休みの時間でいじくっているPIC なんとかなってきました。4月16日UPの問題点も解決したし

GPIO3の”0”/”1”で、 GPIOの0,1,4,5ビットへAD変換のデータを0~3/4~7ビットを出力する

LEDは、左から012345ビットです。手前のボリューム回すとピラピラとLEDが点滅します。ちゃんと2進進行してます

GPIO3=”0”の出力

GPIO3=”1”の出力

毎回ポートをクリアにしているので、こんな波形が出ます たとえばGP3=”1”でAD1回してデータ固定して、GP3=”1”、”0”で読み出しすれば、配線数は多くなるが、データを渡すことが出来る

アナログ入力でPWM出力してます

周期が遅い! 140mSくらい  おまけに0Vになると波形が50%50%になる(ソフト処理してない)DCモータの速度制御くらいは出来るかも

LED点灯(参考にならないけど)

アナログデータをシリアル出力

上がスタートビット 下がデータです 連続2個パルスが出ているとこがデータ”1”、1個がデータ”0” 左からビット01234567です。受信側は考えていません。1個2個式にしとくとデバッグが楽!

LED点灯(参考にならないけど)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

動作が変です!

2018年04月16日 06時51分12秒 | PIC12F683

奥さん大変です PIC12F683の動作がおかしいです! 変です!

GP3は入力、GP2はアナログ入力に設定して、GP0,1、4,5の4ビットでGP3の”0”と”1”で8ビットデータ(AD変換データをもくろんでいる)を切り替えて表示しようとしましたが。

解決:レジスタの使い方を間違えていました。

   タイマ時間のレジスタ(繰り返し数)とデータのレジスタに同じ名前を使ってました。そりゃそうだよね、こんな現象が出てたら、とっくに問題になっている

 

1ビットだけ出力が”0”のままになります。

以下は、確認のために簡単にしたアセンブラです。色々試してますが、ダメです。

T1=b’11111111’にしても0で出力されます 回路図のミスはありません。

ADCSWOUT
    CALL ADCSET   初期設定しているルーチン 説明略
ADCSWOUT1  
;   CALL ADLOOP
    MOVLW b'01011010'
    MOVWF T1
    BCF  GPIO,0
    BCF  GPIO,1
    BCF  GPIO,4
    BCF  GPIO,5
   BTFSC GPIO,3
    GOTO SW47

  
ADCON1
    BTFSC T1,0
    BSF  GPIO,0
    BTFSC T1,1
    BSF  GPIO,1
    BTFSC T1,2
    BSF  GPIO,4
    BTFSC T1,3
    BSF  GPIO,5
    GOTO ADCSWOUT1
SW47
   
    BTFSC T1,4    ここが動作しない 他の方法も試した
    BSF  GPIO,0   セットされません
    BTFSC T1,5
    BSF  GPIO,1
    BTFSC T1,6
    BSF  GPIO,4
    BTFSC T1,7
    BSF  GPIO,5
    GOTO ADCSWOUT1

とりあえず。AD変換後のデータをLED点灯でデータとしてみようとしただけなんだけどね

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PIC12F683評価ボード

2018年04月13日 07時21分08秒 | PIC12F683

PIC12F683評価ボードです

AD用のアナログ入力も1個 自称ほぼ完ぺきです!

PICはゼロプレッシャーソケット

ロータリーSWは、ICSPとPICの切替(混合するとトラぶったから、あっさりと切替)

ショートピンでスイッチを切り離すようにして、I/Oを区別している。また、そこでチェック端子としても使える

LED点灯は、I/Oどちらでも点灯  万一、出力信号がスイッチに流れることを懸念してスイッチに直列に抵抗をいれている

これでつなぎっぱなしにしておいて、ロータリーSWで切り替えながら、書き込み⇒動作⇒変更⇒書き込み⇒悩む⇒変更⇒書き込みって簡単だぜぇ

回路図

なんと! 秋月電子さんありがとう! 謝!  一度部品が行方不明になって、2回も購入したぜ 苦笑!

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PIC12F683事始め

2018年04月08日 09時47分06秒 | PIC12F683

8PINのPICも遊んでみようかと、やっとこさ動作したので

たよりにしたのが

意外とたよりになりません(苦笑) PIC16F84Aでなんとか出来ていたから、この本でもなんとかなった

この手の、はじめてうんぬんの本って、初めての人には無理! ってなとこがありますね

あと、ローマ字の アイ と数字の1 同様に エル と 1  オー と ゼロ  アイ と エル わかるように書け! ってことですかね まあ、これで一時は挫折した。

このプログラマー(プロの美人?)を使っているのですが、説明書にPIC12F683は、対応していない(軽く挫折)

そこで、ICSP仕様で書き込むようにしました。

なんとか、PIC統合開発環境MPLABが、PIC12F683を認識して、簡単なプログラムをHEXファイルに変換するまでに試行錯誤と試行錯誤

そして、ICSP仕様で書き込もうとしたら、奥さん大変です。書き込みエラーになります。回路に間違いありました 後述 号泣

対応してないはずなのに、ソフトの右側のコネクタの画にここにPIC12F683刺せっていう画が 

奥さん!半信半疑でこの画の通りにPIC12F683刺して、書きこんでみましたともさ  奥さん喜んで下さい、対応してないはずなのに無事書き込めました 喜びの舞!

なんとも不思議なことでしょう

とりあえず、LEDピカピカです(苦笑)

下側に、スイッチ、光っているLED、消灯LEDが並んでいます。

スイッチを押すと無事2個目のLEDが点灯 おめでとう!(とうぜんだけどスイッチ入力端子、違う端子で出力でLEDピカピカ)

点灯しっぱなしのLEDの方は、

①ビットセットとビットクリアで一瞬点灯させてます

そして、

②ループ命令で時間作って点灯もさせてみました

まあ、とりあえず動作したってとこです。

D330のコントローラSDC-1のモータ低速駆動のタイマ回路をこれで作り替えようかと検討中(IC555のCR発振回路では、極端なデューティ比のON/OFFが出来ないので)

同様に、A/D変換の入力で、デューティ比を変更できるモータコントローラも出来るんじゃねぇって検討もしたいなっと

お約束:動作するしない、入門の本が解る解らないは、私個人の感想ですので、貴方がこれで使えるか!は別問題です。なお、素人ですので、質問に答えることもできませんので、採用される場合は自己責任でお願いします。

*****************

ICSP仕様で書き込み

 プログラマA+側  PIC12F683側ピン

   GND      8ピン

   VCC      1ピン

   CLK      6ピン

   DAT      7ピン

   VPP      4ピン(10KΩでVCCにプルアップ)

です。 

PICKIT3のマイナーなやつだと回路図もあちこちUPしてますが、はじめてシリーズで推奨(たぶん)してたのがA+だったので、初めてから苦労! 

ブレットボードも今後使いかってよくしていく予定です。さてはて!    

**なんでGPIO 0~5 なんだ! PORTA 0~5 でいいんじゃねのか?と思うのは私だけ?????

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする