終於有機會玩玩 ARM® Cortex™-M0+ , FRDM-KL05Z,

這東西跟Microchip真的差異很大, 光是將已有的sample code 要燒到IC 上就搞了兩天...@@

PS: 根本不是用燒的, 是用貼上(Ctrl+V)的....

先來看看FRDM-KL05Z上的架構,

Target MCU : MKL05Z32VFM4…..不用$0.5

iamqq 發表在 痞客邦 留言(0) 人氣()


AN1310

High-Speed Serial Bootloader for PIC16 and PIC18 Devices

使用此範例時, 若clock source為INT RC ,需注意Internal Oscillator Frequency Select bits的設定.在程式中除非define USE_MAX_INTOSC,才會更改OSCCON,否則將以default INT RC來執行,

以PIC16F1937為例, default為500kHz, 應該是太慢,PC端會連不上 device(bootloader not found),

若不開啟USE_MAX_INTOSC, 可在程式中加入紅色code

iamqq 發表在 痞客邦 留言(0) 人氣()

deep sleep
在有XLP功能的MCU,可以透過deep sleep 來讓MCU達到最省電的狀態,進入方法如下:
//Way 1.
asm("disi #4"); 
asm ("bset DSCON, #15");  

iamqq 發表在 痞客邦 留言(0) 人氣()

  • Jul 05 Tue 2011 11:35
  • PSV

簡單說變數宣告auto_psv, 就是讓compiler把 const的變數都放在同一個 psv中(同一個32k), 所以auto_psv不能跟address同時使用

且宣告成autp_psv ,並不是不需要PSVPAG=__builtin_psvpage(xxx), 若const太多, 多到超過32k, 還是得在access前"手動"變更PSVPAG

小於32k時不需要,是因為都在同一個psv裡,(之前以為宣告成autp_psv, 就可以不需PSVPAG=__builtin_psvpage(xxx)...@@)


而在ISR宣告時

iamqq 發表在 痞客邦 留言(0) 人氣()

在PIC18F2xK20,MCU可以用內部的 OSC.搭配PLL來跑到64MHZ(16MIPS),但在SCS的選則要注意不能選1x,否則PLL是無開啟的

bit 1-0 SCS<1:0>: System Clock Select bits
1x = Internal oscillator block
01 = Secondary (Timer1) oscillator
00 = Primary clock (determined by CONFIG1H[FOSC<3:0>])..............//can enable PLL

iamqq 發表在 痞客邦 留言(0) 人氣()

for more detail ,psl reference MCU4101 Lab 5& 6

//ADC Single
 OpenADC10( ADC_MODULE_ON | ADC_IDLE_CONTINUE | ADC_FORMAT_INTG16 | ADC_CLK_MANUAL | ADC_AUTO_SAMPLING_ON | ADC_SAMP_OFF ,
      ADC_VREF_AVDD_AVSS | ADC_OFFSET_CAL_DISABLE | ADC_SCAN_OFF | ADC_SAMPLES_PER_INT_1 | ADC_ALT_BUF_ON | ADC_ALT_INPUT_OFF ,
      ADC_SAMPLE_TIME_31 | ADC_CONV_CLK_SYSTEM | ADC_CONV_CLK_32Tcy ,

iamqq 發表在 痞客邦 留言(0) 人氣()

  • Oct 29 Fri 2010 09:23
  • DISI

在16Bit的MCU中,並無提供一個GIE的控制元來對所有的interrupt enable or disable,不過有instruction可以做到相同的事情
DISI #lit14  ;Disable Interrupts for k instruction cycles
DISI可以將優先權1~6的中斷給禁止一段時間,但不能禁止TRAP或是優先權7的中斷源(IP7 & trap also can interrupter main-routine)
DISI #0 ;中斷復原

ps:建議不要直接去操作DISICNT Reg.,DISICNT為0時,無法寫入新值(需用DISI指令)

iamqq 發表在 痞客邦 留言(0) 人氣()

I2C_SLEW control.bmp

PIC18F46J50
EEPROM:24lc02B
Ru=3.6k    //pull-up
I2C speed:400kHz (INTOSC:4MHZ  SSPADD=4)
SLEW_OFF    SSPxSTATbits.SMP=1;

iamqq 發表在 痞客邦 留言(0) 人氣()

在PIC32中若要得正確的pb_clk,除了要先填適當的congig bit之外,在程式中亦需執行下列function

// Configure the device for maximum performance but do not change the PBDIV
// Given the options, this function will change the flash wait states, RAM
// wait state and enable prefetch cache but will not change the PBDIV.
// The PBDIV value is already set via the pragma FPBDIV option above..

iamqq 發表在 痞客邦 留言(0) 人氣()

在MPLAB IDE下有一個可以觀察變數的視窗"watch"
一般來說所有的變數都可以在此視窗下被看見,除了Reserved Memory 或是 Local Variable:

解決 Reserved Memory 的問題是在 MPLAB IDE 下有個 "Release & Debug" 的下拉視窗 :
如果要用 ICD2 or Real ICE Degubbing 的話,該選項就要選擇 "Debug" 後重新 Build All 再燒錄,
這樣 Linker 才可以將除錯要用到的資源保留下來這樣才不會跟你的程式衝突(共用RAM的問題)。如果

iamqq 發表在 痞客邦 留言(0) 人氣()

1.若無#define USE_AND_OR則
          OpenTimer1((T1_ON & T1_IDLE_CON & T1_GATE_ON & T1_PS_1_8 &
                          T1_SYNC_EXT_ON & T1_SOURCE_INT), PR1_VALUE);

2.若有#define USE_AND_OR則
          OpenTimer1((T1_ON | T1_IDLE_CON | T1_GATE_ON | T1_PS_1_8 |

iamqq 發表在 痞客邦 留言(0) 人氣()

CSM (for mTouch)是利用MCU對key-pad上的雜散電容做充放電,然後在依固定時間中去做充放電次數的判斷來看是否有KEY被按,當人按KEY時,電容值變大(並聯),充放電次數就減少

之前一直以為Vcc的大小會影響充放電(這是對的),當Vcc較大時,充放電次數會較小,(因為要充到較高的VIH,時間久),反之較大.
不過實際上的測量卻剛好相反,數據如下

PIC16F723 SS ,@8ms TIMER2,key-pad 1x1cm,壓克力厚度約4mm

                  未壓KEY時Counter             壓KEY時Counter            變動

iamqq 發表在 痞客邦 留言(0) 人氣()

1 2 3
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。