2013年12月30日 星期一

新唐M0 NUC100_ADC



NuMicro™NUC100/NUC120 包含 一個128通道逐次逼近式 類比– 數位轉換器(SAR A/Dconverter). A/D 轉換器支援
三種操作模式:

1 單一(single:
在單觸發模式下, A/D 轉換僅僅在指定的單一通道中執行一次,運作流程如下:
1.  ADCR ADST被軟體或者外部觸發輸入置位時,A/D轉換開啟
2.  A/D 轉換完成, 轉換值將存儲在與通道相對應的A/D資料寄存器中.
3. A/D 轉換完成, ADSR ADF 位置位. 若此時ADIE 位置位, 將產生ADC插斷要求.
4. A/D轉換期間,ADST 位維持為1. A/D 轉換結束, ADST 位自動清0 A/D 轉換器進入idle模式.ADST位被清為 ADST位置1,否則A/D 轉換器可能無法正常運作.


2 單週期掃描(single-cycle scan) :

在單週期掃描模式下, ADC會對所有指定的通道進行一次採樣與轉換,且從編號最小的通道開始.運作
流程如下:
1.  ADCRADST被軟體或者外部觸發輸入置位時,A/D轉換從最小編號的通道開始.
2.  每路A/D 轉換完成後, A/D 轉換數值將裝載到相應資料寄存器中.
3.  當被選擇的通道數 都轉換完成後,ADF ADSR 寄存器)置1. 若此時ADIE 1, A/D 轉換完成後,將產生ADC插斷要求.
4. AD轉換結束後,ADST位自動清零,A/D轉換器進入idle狀態,轉換值將存儲在與通道相對應的A/D資料寄存器中.若在轉換過程中,ADST位元被軟體清為零,則無法保證儲存在A/D數據寄存器中的資料之正確性. ADST位被清為0後,至少要等一個ADC時鐘,才能再將ADST位置1,否則A/D 轉換器可能 .
無法正常運作

單週期掃描模式下使能通道時序圖


3 連續掃描模式(continuous scan).

模式, A/D轉換器會重複對所有指定通道執行轉換. 操作如下:
器中.
換完成後. 使能的最小編號通道將開始新的轉換.
在連續掃描
1.  ADCRADST被軟體或者外部觸發輸入置位時,A/D轉換從最小編號的通道開始.
2.  每路使能的A/D 轉換完成後, A/D 轉換數值將裝載到相應資料寄存
3.  當所有被使能的通道依序完成一次A/D轉換時,ADF ADSR[0])置位. 若此時ADIE
置位, 將產生ADC_INT插斷要求.A/D
4.  只要ADST保持為1,就重複步驟2到步驟3. 當清ADST 0, ADC 控制器將完成當前轉換,
但無法保證最小編號使能通道的轉換結果資料之正確性.
例:使能通道(0, 2, 3 7)連續掃描的時序如下圖:

使能通道連續掃描時序圖

 A/D 轉換可由軟體設定和外部STADC 管腳開啟.



ADC 時鐘發生器
最大取樣速率達600 KHz. ADC有三個時鐘源,可由兩位ADC_S(CLKSEL[3:2])選擇, ADC 時鐘頻率按如下公式進行8位預分頻:
ADC時鐘頻率= (ADC clock source frequency) / (ADC_N+1);
8-bit ADC_N 在寄存器CLKDIV[23:16]中設置.
通常來說,軟體設置ADC_S ADC_N 獲得16 MHz 或稍低於16 MHz的頻率.


自校正
當晶片上電或者ADC的輸入類型在單端輸入與差分輸入之間轉換時,就需要做ADC自我校正以最小化轉換誤差。用戶置位CALEN( ADCALR 寄存器) 使能自身校正功能.運作過程需要127 ADC 時鐘完成校正. 完成校正後內部硬體會自動置位元CAL_DONE. 其時序圖如下:


*   類比輸入電壓: 0~Vref (Max to 5.0V)
*   12位解析度和10位精確度保證
*  多達8 路單端模擬輸入通道或4路差分輸入
*  最大ADC 時鐘頻率16 MHz
*  高達600KHz SPS 轉換速率

*  三種操作模式
單一觸發模式:  A/D轉換在指定通道完成一次
單週期掃描模式:A/D轉換在指定通道完成一個週期,轉換順序從最小號通道到最大號通道
連續掃描模式:  A/D持續執行單週期掃描模式直到軟體停止A/D轉換

*  A/D轉換開始條件
 軟體向ADST 位元寫1
 外部pin STADC

*  每通道轉換結果存儲在資料寄存器內,並帶有valid/overrun標誌

*  轉換結果可和指定的值相比較,當轉換值和比較寄存器中的設定值相等時,用戶可以選擇是否產生一個插斷要求

*  通道7 支援3輸入源:外部類比電壓, 內部帶隙(bandgap)基準電壓和內部溫度感測器輸出

*  支援自身校正功能以將轉換誤差最小化

2013年4月22日 星期一

Samples

上個月申請的TI 元件,收到了!
 1    TLC59116 - 16-Bit Fast-Mode Plus (FM+) I2C Bus Constant-Current LED Sink Driver

 2    ADS1248 - Precision 24 Bit ADC with integrated Low Noise PGA (48nV at a Gain of 128)

 3    TPS27082L - PFET Load Switch with Adjustable Slew Rate, Fast Transient Isolation & Hysteretic Control

其中ADS1248號稱是最popular的 24 Bit ADC , 有空再慢慢測試

2013年3月3日 星期日

2012年8月31日 星期五



流星燈只需MCU 一隻IO角 , 目前mcu是mpc82e51 晶振12mhz ,LED驅動IC是TM1804可聯級擴充



2012年2月28日 星期二

Atmega匯編筆記一


; PORTB 接LED 令LED一顆點亮 來回跑

.include "m16def.inc"
.def    count   =r18
;***** Code
rjmp RESET ;Reset Handle
RESET:

ldi R16,low(RAMEND); Load low byte address of end of RAM into register R16
out     SPL,R16 ; Initialize stack pointer to end of internal RAM
ldi R16,high(RAMEND); Load high byte address of end of RAM into register R16
out SPH, R16               ; Initialize high byte of stack pointer to end of internal RAM
                ;51 的STACK REGISTER 寬度是8BIT
        ser     R16         ; 也可用 ldi r16,$ff
        out     DDRB,R16    ; 設PORTB 全為OUTPUT
     
main_loop:
        ldi     R16,$00     ;也可用 clr R16  ;clear r16
        sec                 ;設 c flag
        ldi     count,$08
loop1:
       call    delay
        rol     r16        ;左移
        out     PORTB,R16  
        dec     count      ; 相當51的 DJNZ COUNT,LOOP1 AVR裡,沒這方便的指令,但51的DEC並不會影響FLAG喔
        brne    loop1      ; Z FLAG不為1(就是COUNT不為零) 分歧到LOOP1

        ldi     R16,$00
        sec  
        ldi     count,$08
loop2:
       call    delay
        ror     r16        ;右移
        out     PORTB,R16
        dec     count
        brne    loop2

        rjmp    main_loop  ;Loop forever
   
delay:   ;延時
        ldi     r19,$01
        clr     r20
clr     r21
delay1:
        dec     r21
brne    delay1
dec     r20
brne    delay1
dec     r19
brne    delay1
ret


;--------------------------------------------------------------------------------------------
; 匯編查表
.include "m16def.inc"
;***** Code
rjmp RESET ;Reset Handle

RESET:

ldi R16,low(RAMEND); Load low byte address of end of RAM into register R16
out     SPL,R16 ; Initialize stack pointer to end of internal RAM
ldi R16,high(RAMEND); Load high byte address of end of RAM into register R16
out SPH, R16               ; Initialize high byte of stack pointer to end of internal RAM
                ;51 的STACK REGISTER 寬度是8BIT

main_loop:
        ldi     zl,low(asc_table*2) ;左移一次 空出 z0(bit) ,atmega 1個位址的flash rom 寬度為2bytes=1word
        ldi     zh,high(asc_table*2);而z0 =0 會指向low byte ,z0=1 會指向high byte
        add     zl,r16
        lpm     r16,z  ; r16<--(z) , zh:zl= r31:r30
        nop
        nop    

        rjmp    main_loop  ;Loop forever
asc_table:
        .db  $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$41,$42,$43,$44,$45,$46      
       

2012年1月25日 星期三


用搖桿的香菇頭做輸入參數介面,驅動七段顯示器是用MAX7219

2011年10月6日 星期四

合泰 2011新品發表會

這次参加的人很多,照片是大家都去用餐時拍的所以沒人, 我個人對上圖"觸控"很有興趣,
它是把原先要做在pcb上的銅箔,改做在HTN的玻璃上,看起來很簡潔