:::

論壇索引


Board index » All Posts (ranger75th)




請教有關I2C 與TIMER的問題
#11
新會員
新會員


請教各位先進.

我使用的編譯器是Hi-Tehc Pro9.65. 晶片是16F887

目前在開發板上DEBUG模擬時. 常常會用到2.3個TIMER
雖然"感覺上"各TIMER運作正常. 但是在WATCH欄位總是覺得怪怪的.
TIMER1.2應該是暫存器溢位時中斷. 但是使用中斷點觀看暫存器欄位總是亂數.
單步執行指令時TIMER暫存器增加數值也是亂跳.
TMR1.2IF永遠都是1.

所以想請問TIMER即使不是外接震盪器而是內部時脈. 但是他依舊持續記數. 不管DEBUG時中斷點停下與否?


第二個問題是:
目前改實驗硬體支援的I2C. 照DATA SHEET FIGURE 13-7說明:
接收到開始信號時 SSPSTAT的開始位元為1
檢查SSPSR預暫存器到第7位元時是否與SSPADD<7:1>相符
是的話就自動幫我丟出ACK. 進入中斷.

雖然有進入中斷. 但是MASTER卻都沒有收到過ACK訊號. 由於我讓MSATER丟出0X01的訊息. 所以令SSPADD為0.

void init_ssp(){
GIE = 1;
PEIE = 1;
SSPIE = 1;

//SSPMSK = 0X00;
SSPADD = 0X00;
SSPM3 = 1;
SSPM2 = 1;
SSPM1 = 1;
SSPM0 = 0;
SSPEN = 1;
CKP = 1;
}



static void interrupt isr(void)
{
if (SSPIF == 1){
RD0 = !RD0;
//while(!BF);
RD1 = !RD1;
AA = SSPBUF;
SSPIF=0;
}
}

能請問哪裡我的觀念錯誤嗎? 謝謝

發表於: 2010/1/19 15:34
頂部


Re: 新手求問 16F887 I/O
#12
新會員
新會員


因為我程式是用mplab sim來模擬PIC16F1936. 但是我手上唯一有的實物就是PIC16F887. 所以只是把原本的程式定義稍稍改變一下就拿來用.

另外.當我使用示波器接在RB2.RB3時. 開關dipSW的動作. 卻又正常了. 並不會關掉開關時電壓還是hold住的情況. 我是不是該找外部的電路圖來看?



另外不知道能不能並在一起詢問:
之前爬文曾經有人發生過change of interrupt的旗標RBIF無法消除. 有前輩查看數據手冊時發現硬體構造中的問題. 要重新讀過PORTB一次才能清除.

如今類似的情況也發生在pic16f1936的change of interrupt旗標. Data Sheet上並沒有寫明資料. 請問前輩當時是怎樣去找到這些腳位.暫存器的電路邏輯圖呢?

發表於: 2010/1/6 16:02
頂部


新手求問 16F887 I/O
#13
新會員
新會員


請教各位先進. 目前想要使用change interrupt來做I2C

程式寫完以後在MPLAN SIM上模擬正常時. 打算拿APP001來DEBUG. 發現用來當SDA.SCL的兩個開關.RB3正常反應. RB2則像一隻偷油吃的老鼠...一上去就永遠下不來了

我又另外寫了一個檢查用的精簡程式. 發現SIM模擬還是正常. 但是這一次 RB2.RB3兩個再WATCH上完全沒有反應 (但是很奇怪是. RB3開關打開以後還是可以發生change interrupt).

Data Sheet看上好久. 也實驗很多次.還是搞不懂. 能有前輩能指教我觀念哪裡疏忽了嗎? 謝謝.


下面是我用來實驗問題的程式...使用的是PIC16F887
#include <htc.h>

#define SDA RB3
#define ANS_SDA ANS9
#define TRIS_SDA TRISB3
#define IOC_SDA IOCB3

#define SCL RB2
#define ANS_SCL ANS8
#define TRIS_SCL TRISB2
#define IOC_SCL IOCB2

#define READ 1
#define WRITE 0
#define TURE 1
#define FALSE 0
#define HOW_MUCH_TIME 5

/***********************I2C函式.整理好後會丟到I2C.C********************************************/
void InitI2C(void);

long int Rise_Interrupt, Work_Interrupt;
void main(void)
{
GIE = 1;
InitI2C();
while(1){
}
}


/***********************組件區******************************************/
void InitI2C(void){

TRIS_SDA =1;
TRIS_SCL =1;
ANS_SDA = 0;
ANS_SCL = 0;
RBIE = 1;
IOC_SDA =1;
IOC_SCL =0;
RBIF = 0;
}

/*************************中斷向量表******************************************/

static void interrupt isr(void) // Here be interrupt function - the name is
{

if(T0IF){
if(!TRIS_SCL)
SCL = !SCL;
T0IF = 0;
}

if(RBIF){
if(!IOC_SDA&&IOC_SCL){
Rise_Interrupt =1;
}
if(IOC_SDA&&IOC_SCL&&!SCL){
IOC_SDA = 0;
}
if(IOC_SDA&&IOC_SCL&&!SDA){
IOC_SCL = 0;
Work_Interrupt = 0;
}
if(IOC_SDA&&!IOC_SCL&&SCL&&SDA){
IOC_SDA = 0;
IOC_SCL = 1;
Work_Interrupt = 1;
}
SDA =SDA;
RBIF = 0;
}

}

發表於: 2010/1/4 18:42
頂部


Re: 請教 MPLAB SIM的問題
#14
新會員
新會員


謝謝Ryang您的提醒. 該章節說明:
ANSEL0=1時. 數位INPUT. PULL UP. RAIE等等功能都會中斷.
如果直接在程式裡RA0. RA2寫入一個值. 也是出不來的. 所以不是模擬器的問題. 當時我光是認為關掉ADC enable bit就可以了事 0rz.

先前我確實沒有注意到ANSEL類比數位選擇. 只是感覺該關的都關了. 現在還是一樣的狀況. 所以到現在還在龜起來沉思中.

發表於: 2009/12/28 17:05

Edited by ranger75th on 2009年12月28日 18:06:19
頂部


Re: 請教 MPLAB SIM的問題
#15
新會員
新會員


感謝BBL的提醒
我改採用RC0.RC1純數位接腳以後.
Logic Analyzer視窗上確實出現波型

另外我也注意到當使用PORTA.B等跟AN共用的腳位時
出現了下面的警告:

Pin(s) (0x02) on PORTA can not be stimulated due to being controlled by the A/D converter

依照警告與這網頁的說法:
http://www.microchip.com/forums/printable.aspx?m=419512

所以我想說ADCON裡面把enable bit =0. 想說這樣應該代表所有腳位都沒有類比輸入. 結果是失敗的...
有沒有辦法挽救呢? 畢竟16f887上AN腳可是天殺的多....

發表於: 2009/12/25 10:30
頂部


請教 MPLAB SIM的問題
#16
新會員
新會員


請教各位先進

目前我使用的IDEv8.0. 當我想要使用stimulus功能來模擬某腳位信號. 結果不管是同步信號 或是非同步信號. 都無法成功模擬

好比方說:
使用Pin/Register Action功能
Time Units 選擇cyc
row1: Time(des)=1, AN0.AN1 bin值分別是1.0
row2: Time(des)=2, AN0.AN1 bin值分別是0.1
勾選Repeat after 3(des) Apply後存檔設定

我以為程式Build後執行應該可以在Logic Analyzer上觀察到週期信號. 結果什麼反應都沒出現. 就是clock simulus. asynch功能模擬也都沒成功過. 請問設定上哪裡出錯了?

發表於: 2009/12/25 9:42
頂部



« 1 (2)



:::

Microchip連結

https://www.linkedin.com/company/microchiptechnologytaiwan
https://www.facebook.com/microchiptechnologytaiwan/?locale=zh_TW
https://mkpage.microchip.com/l/1082123/2025-03-12/2stnv5
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------