Re: spi介面的問題
|
||||
---|---|---|---|---|
資深會員
|
Eigen 說的沒錯 如果 SSPCON 沒設對 SPI module 怎麼也不會動. 我一開始設錯 就卡在 bf 那邊. 後來改正後就pass 了
我把 SCK input/output 設錯 照跑無誤 會不會你的 C compiler 沒支援 6422 或你的 p18c6422.h 有問題 要不你用個 inline assembly 去設 SSPCON 的值 注意 Register Page 要選對
發表於: 2007/11/28 13:03
|
|||
|
Re: spi介面的問題
|
||||
---|---|---|---|---|
資深會員
|
用 SSPIF 來判斷會不會好些
另外有 collision 偵測到後 要 clear WCOL... SSPCON 你如何設定
發表於: 2007/11/27 18:43
|
|||
|
Re: 關於PWM的頻率和占空比
|
||||
---|---|---|---|---|
資深會員
|
PWM 占空比 = (CCPR1L:CCP1CON<5:4>) /(4(PR2 + 1))
你寫的第二式應為 PWM 脈衝寬度 = (CCPRXL:CCPXCON<5:4>) •TOSC • (TMR2 預分頻值) 你所謂改變 PWM 周期 是改變哪個參數 若改變 PR2 由公式即知 PWM 占空比會跟著受影響 若改變 TMR2 預分頻值 或 Tosc 則不會
發表於: 2007/11/23 18:17
|
|||
|
Re: 關於AN957裡面的問題
|
||||
---|---|---|---|---|
資深會員
|
ActualSpeed = SPEEDMULT/timer3avg;
AcutalSpeed 由 timer3 的值換算而來 timer3avg 指加權平均值, 前平均值加新值除以2 timer3avg = ((timer3avg + timer3value) >> 1); 展開後為 Timer3[n]/2+ Timer3[n-1]/4 + Timer3[n-2]/8 + .... ============================ SPEEDMULT 是轉換系數 須根據 system clock 和 timer3 clock , motor pole number來求得 #define SPEEDMULT 2343750 -- SensoredBLDC.h system clock: Fin = 8Mhz -- SensoredBLDC.h timer3 clock: T3CON = 0x0030; // timer3 internal Tcy/256 clock -- init.c // AN957 speed S = 60/(P/2*T) rpm P: the number of poles of the motor. T: the time(seconds) for one electrical cycle 須從 Fin, timer3 求出 S: ActualSpeed ============================ DesiredSpeed = ADC1BUF0 * POTMULT; // value for speed control #define POTMULT 4 // pot to speed ratio 1023* POTMULT 馬達的最大轉速, POTMULT 設越大最大轉速越高
發表於: 2007/11/23 17:54
|
|||
|
Re: PIC18F4550 I2C 的address 問題___part 2
|
||||
---|---|---|---|---|
資深會員
|
我想可檢查以下幾點
PIE1<SSPIE> 要設為 1 SSPCON1<SSPM3:SSPM0> 跟 start/stop bit 中斷有關 GCEN 是用在當有 address 0 的訊號時用的 若沒用應設為 0 還有 SSPIF 要設為 0, 中斷後也要還原為 0 (clear) 或許把你的程式 post 出來, 要不很難知道...
發表於: 2007/11/23 16:32
|
|||
|
Re: 如何讓兩個CPU使用SPI通訊(master & slave)?
|
||||
---|---|---|---|---|
資深會員
|
對於 SPI 的簡介可參考Wiki
裡面提到 CPOL,CPHA 對應 CKP, Not CKE CKE := Not CPHA CKE = 1 指資料在第一個 edge 有效 CKE = 0 指資料在第二個 edge 有效 所以 當 CKE=1 時需設 SS enabled, -> SSPM<3:0>=0100 也就是說 SS 接腳必須用 (not optional), 詳見後述 當 CKE=0 時 SS 可用可不用 SS 接腳可做其他用途 (optional) 若是用 Synchronous Slave mode 則必須設 SS enabled, -> SSPM<3:0>=0100 不管 CKE 值為何 若 SS enabled, 當 SS pin 為 high 時 SPI 的 shift counter 會歸零 所以萬一資料傳到一半 SS pin 忽然變為 high 再變為 low 則資料從 bit7 開始傳起 --------------- SSPM<3:0>=0100 使用 SS pin (Slave mode) SSPM<3:0>=0101 不使用 SS pin (Slave mode) --------------- 簡單來講 SPI 的傳輸 全靠 SCK 來控制 一有 clock 就開試運作 若 CKE=1, 因 slave 並不知道何時將資料 放到 SDO 接腳 若在第一個 edge, Master 就讀資料就有問題 所以須靠 SS (slave select) 來幫助 當 slave 的 SS 變為 low 時, slave 就知道要開始傳輸資料了 在 SDO 就會先放 bit7, 所以當第一個 clock 的第一個edge時 SDO 已有資料準備好 若 CKE=0, 因 clock 一有變化(第一個edge) slave 就知傳輸要開始 於是就把資料 bit7 送到 SDO 在第二個 edge 時就已 ready, 因此並不需用到 SS pin
發表於: 2007/11/23 15:43
|
|||
|
Re: 想用16f877 寫兩組pwm
|
||||
---|---|---|---|---|
資深會員
|
這顆本來就有兩組PWM 只是它用TIMER2 當基準周期
你用 CCPR1X, CCPR2X 來控制 duty cycle 若要較複雜的控制 要找有 ECCP 的控制器 可惜 PIC16 最多指提供一組 ECCP...
發表於: 2007/11/5 9:06
|
|||
|
Re: 暫存器如何使用
|
||||
---|---|---|---|---|
資深會員
|
你可參考中文手冊
page 7,8 有設計圖 可以看出 W 暫存器跟哪些功能連接 page 15 有W 暫存器簡圖 page 33,34 有一些指令跟 W 暫存器 有關 page 159, 161... 有詳細指令使用說明 表22-1 有說明哪些暫存器代號與 W 暫存器的關係 跟表22-2 配合使用 我想理論上 C 應會自動配置適當的暫存器使用 不過你如能了解其基本構造 可對這微處理器更了解
發表於: 2007/11/5 8:47
|
|||
|