• slider image 253
  • slider image 254
  • slider image 255
  • slider image 256
  • slider image 257
:::

論壇索引


Board index » All Posts




Re: 為何SSP2CON2bits.ACKEN = 1; 不會自動清除?
#1
版主
版主


I2C Master 回給 Slave 的 ACK 訊號是設定 ACKEN 位元後即可,我也都是這樣用的。但是我式檢查 SSPIF 中斷旗號來判定工作是否完成。可以參考一下貼圖,
最好是再用示波器量測一下 SCK 在設定 ACKEN = 1 時是否有產生第九個 clock 給 Slave。

void AckI2Cvoid )
{
  
ACKDT 0;           // set acknowledge bit state for ACK
  
ACKEN 1;           // initiate bus acknowledge sequence
}

void NotAckI2Cvoid )
{
  
ACKDT 1;          // set acknowledge bit for not ACK
  
ACKEN 1;          // initiate bus acknowledge sequence
}

void I2C_Done(void)
{
    while (!
SSPIF);            // Completed the action when the SSPIF is Hi.
    
SSPIF=0;                   // Clear SSPIF
}

Attach file:



jpg  擷取.JPG (36.81 KB)
16_5f8fd11b3aa24.jpg 680X282 px

發表於: 今天 14:11
頂部


Re: PIC10F320電源切換LED
#2
版主
版主


網站怪怪的,早上的回覆居然不見了。

程式裡的比較將 0xc0 與 0xc5 換一下,先比較最小的後再比較第二高的值...與此類推上去。

不過建議先設的寬一點的值從 0x40 --> 0x60 -->0x80 .... 先比較看看,switch case 的 k 值是從 1 開始判定,可以改從 0 開始嗎? 可以在 switch case 加入 default / break; 的判斷嗎?

發表於: 今天 13:57
頂部


Re: 請問於PIC16F18855中,如何產生可控制輸出時間長短的4KHz訊號呢?
#3
高級會員
高級會員


謝謝版主的意見

發表於: 今天 0:03
頂部


Re: PIC10F320電源切換LED
#4
初級會員
初級會員


您好,改了之後變成開電先執行k=0,再執行k=2,關電後再開也一樣先執行k=0,再執行k=2,k=1不會執行到。修改0XC5,0XC0,0XB0的值也一樣。會不會是關電再開,ADC也會像開關一樣會有彈跳,ADRES的值忽大忽小。

發表於: 昨天 20:53
頂部


為何SSP2CON2bits.ACKEN = 1; 不會自動清除?
#5
資深會員
資深會員


Dear All :

if(ack) SSP2CON2bits.ACKDT = 0;
else SSP2CON2bits.ACKDT = 1;
SSP2CON2bits.ACKEN = 1;
while(SSP2CON2bits.ACKEN) CLRWDT(); //當在這!!!

但datasheet說硬體會自動清除的!

Thank u.

發表於: 昨天 16:25
頂部


Re: 請問於PIC16F18855中,如何產生可控制輸出時間長短的4KHz訊號呢?
#6
版主
版主


不管是 One_Shot 或 Mono_Stable 的觸發都需要使用另一個 Timer 做計時的觸發的動作,因為你的時間都不一樣所以無法用硬體方式通吃還是需要配合軟體的時間設定。

我的做法是: 用一個以 1mS 為 Base 的 Timer 並使用中斷做為開啟蜂鳴器的控制。PWM 的輸出關閉只要經該 I/O 腳改設為輸入腳功能即可關閉 PWM 的輸出。
宣告一個 volatile char i 的變數給中斷的 PWM 開或關的控制。如果要讓蜂鳴器響 12mS 的話就只要在程式裡設定 i = 12 ; 即可。至於在中斷採用檢查 i == 0 來控制蜂鳴器並遞減直到 i==0 時關閉 PWM 的輸出。這是就可以隨時控制蜂鳴器響的時間或警報音。

發表於: 昨天 11:40
頂部


Re: PIC10F320電源切換LED
#7
版主
版主


volatile char k =0;
程式一開始有設定k的初始值=0嗎?

改一下中斷程式看看:
volatile char k=0;

void interrupt ISR(void)
{

    if(
ADRES<=0XC5 K=0;
    
    if(
ADRES<0XC0 K=1;
    
    if(
ADRES>=0XB0 K=2;
    
    
ADIF=0//將ADC中斷FLAG清0

    
GO_nDONE=1;
}

發表於: 昨天 9:07

Edited by Ryang on 2020年10月20日 11:10:05
頂部


Re: PIC10F320電源切換LED
#8
初級會員
初級會員


您好,

改了也是一樣,關電再開,K值有時是3,再關電再開,K值有時是2,變成是亂數,不知還有沒有其它方法。

謝謝

發表於: 10/18 15:53
頂部


請問於PIC16F18855中,如何產生可控制輸出時間長短的4KHz訊號呢?
#9
高級會員
高級會員


Dear 版主,
為提高程式效能,擬用PIC16F18855產生1個硬體式的4KHz的蜂鳴器Driver訊號,而聲音的長短,如:5、10或20mSec,可藉由另1個Timer來產生1個One_Shot或Monostable做為硬體式4KHz的蜂鳴器的Gate訊號。屆時,於程式中,我只要Enable此Gate,就可產生4KHz的蜂鳴器Driver訊號。
現今,我的做法:
1)先使用CCP2的PWM模式,產生1個50% Duty的Pulse;而該Pulse係藉由TMR4 來產生4KHz的頻率;
2)但,如何產生One_Shot或Monostable的Gate訊號,以便控制PWM的On與Off呢? (我希望盡量用CPU內的硬體週邊資源來完成;而,我只要去Enable該Gate與設定Gate訊號時間長短即可)

Regards

陳鴻進

發表於: 10/18 14:51
頂部


Re: MCC不同版本所產生的code會不一樣?
#10
資深會員
資深會員


請問 :
該如何改成成如圖?

Attach file:



jpg  擷取-CMD (2).jpg (49.66 KB)
3751_5f8ac0bb26edc.jpg 757X422 px

發表於: 10/17 18:00
頂部



(1) 2 3 4 ... 7295 »



:::

Microchip連結

http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
http://elearning.microchip.com.tw/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源