• slider image 442
  • slider image 492
  • slider image 493
  • slider image 494
  • slider image 495
  • slider image 496
  • slider image 491
:::

論壇索引


Board index » All Posts (badsan)




PIC18F6490 計時問題...
#31
中級會員
中級會員


請問一下大大...
我現在使用PIC18F6490來做計時並將結果顯示在LCD上...
就是電子時鐘...不過現在遇到一個問題...找好久找不到原因...

接外部T1震盪器(32767)做計時...
PIC則是使用內部的RC震盪器

現在問題是,沒法進入Interrupt.....

下面是該程式,找好幾天了,還是找不出問題,
是否有高手大大能幫我看問題出在那...

#pragma config OSC =INTIO67
#pragma config FCMEN=OFF
#pragma config IESO =OFF
#pragma config PWRT =OFF
#pragma config BOREN=OFF
#pragma config WDT =OFF
#pragma config DEBUG=OFF
#pragma config XINST=OFF

void InterruptHandlerHigh (void);

void main (void)
{
LCD_CONFIG_R(); //這是我LCD的設定函式,可不用理會
DisplayOn(); //開啟LCD全亮
Init_TMR1();
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
while(1);
}

void Init_TMR1(void)
{
TMR1H = 0x80;
T1CONbits.RD16 = 1;
T1CONbits.T1RUN = 1;
T1CONbits.T1CKPS1 = 0;
T1CONbits.T1CKPS0 = 0;
T1CONbits.T1OSCEN = 1;
T1CONbits.T1SYNC = 1;
T1CONbits.TMR1CS = 1;
T1CONbits.TMR1ON = 1;
PIE1bits.TMR1IE = 0;
PIR1bits.TMR1IF = 0;
}

#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}

#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
if (PIR1bits.TMR1IF == 1)
{
PIR1bits.TMR1IF = 0;
SEC++;
if (SEC > 59){ SEC = 0; MIN++;}
if (MIN > 59){ MIN = 0; HR++;}
if (HR > 23 ) { HR = 0;}
S1Num(MIN/10); //此行和下面幾行把值show到LCD
S2Num(MIN%10); //可不用理會
S3Num(SEC/10);
S4Num(SEC%10);
TMR1H = 0x80;
}
}

程式沒幾行,但就是不會進入InterruptHandlerHigh...
找好久找不出問題點....

補充,PIC使用內部的RC震盪器,另外硬體部分
T1震盪器是直接接到T1OSO、T1OSI,沒有接電容


發表於: 2008/3/26 16:02
頂部


Re: 找一顆PIC....
#32
中級會員
中級會員


可是上面有位大大有提到沒法用c18編譯...

那我編譯時是用?

用PIC18F系列的用習慣了...不太懂這意思.......

發表於: 2008/3/24 13:32
頂部


Re: 找一顆PIC....
#33
中級會員
中級會員


感謝以上幾位大大的回覆...
這產品將來是要量產的...

另外請問一下,PIC16和PIC18兩者軟、硬體差別在哪?
因為一開始就是接觸PIC18,對PIC16不是很了解...

希望各位前輩可以指點一下.....


發表於: 2008/3/21 9:04
頂部


找一顆PIC....
#34
中級會員
中級會員


不知道在這問對不對....
我想找一顆PIC....

主要目的是要用 IO 腳控制其他的東西...

所以基本上PIC要有 八個 IO 腳
和1~2個ADC
SPI/I2C 腳位

大概基本會用到的功能就這些....

是不是有有經驗的大大可以提供一下有那些型號可以參考?

發表於: 2008/3/18 17:36
頂部


Re: 關於PIC18F6490 的I2C SSPADD設定問題
#35
中級會員
中級會員


感謝板大...
我現在把SSPADD設為0
SSPCON1設為0x38

不過發現一各問題....
當我使用EEByteWrite函式把資料寫入到EEPROM時

都會在 EEByteWrite 函式裡面的
if ( PIR2bits.BCLIF ) // test for bus collision
{
return ( -1 ); // return with Bus Collision error
}

這一段就跳出來了....一直說發生碰撞....

請問這有可能是什原因發生的嗎?該如何解決?


補充問一下
在data sheet的第170頁有提到...
如果是主控模式...那SCL和SDA接腳必須各加一各上拉電阻
如果沒加就沒法動作嗎?有可能是這樣的問題嗎?

還是還有其他可能?

發表於: 2008/3/6 15:54
頂部


關於PIC18F6490 的I2C SSPADD設定問題
#36
中級會員
中級會員


請問一下...
我如果使用PIC內部震盪器....31.25k

那麼我I2C的SSPADD要設多少?

這是公式 clock=FOSC/(4*(SSPADD+1))

我看書上都是寫不是把clock調成100k就是400k
但他們用的震盪器都是10M以上的....

我如果要用內部震盪器....
怎設SSPADD好像都不可能達到100K或400K...

有強制規定一定要設成100K或400K嗎?

還是說我一定要接外部震盪器才可以使用I2C去操作外部24LC128?

發表於: 2008/3/6 12:00
頂部


問各Delay的問題
#37
中級會員
中級會員


void Delay_1ms(byte delaytime)
{
int i;
for(i = 0; i < delaytime; i++)
{
Delay1KTCYx(6); // Delay of 1ms
// Cycles = (TimeDelay * Fosc) / 4
// Cycles = (1ms * 24MHz) / 4
// Cycles = 6000
}
}

上面是一段Delay的code....
從書上抄來的..這是用實驗版所使用的code..
用的是外部震盪器24MHz的

想請問一下我現在另外使用了一個PIC
如果使用內部震盪器...31.25k
這段code我要如何設?

因為直接使用這段code也是可以跑....
不過會變很慢....~_~

發表於: 2008/2/26 12:03
頂部


Re: 關於Sleep模式
#38
中級會員
中級會員


剛剛大概找出問題點了...
好像是出在溫度sensor去scan那部份code...

把哪段code拿掉...單純自己設定一個變數做累加...

在把累加結果print到lcd.....

然後當累加到一定數值...例如10....

就進入sleep mode.....

這部份沒問題.....所以應該是scan 溫度那段code有問題吧...

可能那段code一直喚醒睡眠模式....


發表於: 2008/2/19 16:21
頂部


Re: 關於Sleep模式
#39
中級會員
中級會員


感謝阪大回覆...

我把那段code直接用Programmer Mode 燒到PIC去run

LCD數值還是會一直更新.....

表示他while迴圈一直再run...沒進入到sleep模式...

問題還是存在~_~

發表於: 2008/2/19 15:06
頂部


Re: 關於Sleep模式
#40
中級會員
中級會員


我有利用一個I/O腳接了一個溫度感測器

LCD的值是經由這溫度感測器來的...

我把他寫在while裡面...讓他一直去scan溫度

然後print在LCD...

但是我再while的最後一行已經加了一個Sleep()

可是好像沒用....我利用Debug模式....

設中斷點...發現一到Sleep();後

馬上又跳回到while的第一行......


PS.沒有設其他中斷...程式大概就這樣...蠻單純的...

補上我的設定值
#pragma config OSC =INTIO67 //Oscillator Selection bits
#pragma config FCMEN=OFF //Fail-Safe Clock Monitor Enable bit
#pragma config IESO =OFF //Internal/External Oscillator Switchover bit
#pragma config PWRT =OFF //Power-up Timer Enable bit
#pragma config BOREN=OFF //Brown-out Reset Enable bits
#pragma config WDT =OFF //Watchdog Timer Enable bit
#pragma config DEBUG=OFF //Background Debugger Enable bit
#pragma config XINST=OFF //Extended Instruction Set Enable bit

WDT一開始就關掉了...

發表於: 2008/2/19 11:56
頂部



« 1 2 3 (4) 5 6 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
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
https://page.microchip.com/APAC-PrefCenters-TW.html
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... ]

教育訓練中心

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