Quantcast
Channel: Microchip Taiwan :: 論壇
Viewing all 4647 articles
Browse latest View live

Re: ICD 3 在 windows 10 使用 MPLAB Device Driver Switcher 無法切換 [發表者 Kit]

$
0
0
綜合應用:: ICD 3 在 windows 10 使用 MPLAB Device Driver Switcher 無法切換
It is working now, thank you.
Kit

Pic 887 I2C 收不到資料 [發表者 kgl9743]

$
0
0
8-bit PIC (請註明使用元件編號):: Pic 887 I2C 收不到資料
各位前輩請教一下,我用Pic 887當Master,Pic 690當Salve。
目前我用Master 寫 Data到 Slave正常,但無法從Slave讀值回Master。
想請大家指點迷津,下方是我Master端與Slave端擷取的Code。
附件是 Matser讀資料時 示波器擷取的波型,照內容看只有顯示 set address+read的訊號 00010001

PS: 不知道為何我編輯時程式碼都是有對齊的,但上傳後卻全都靠左了

//****************Master I2C Ini***********
void Initialize_I2C_Master(void)
{
SCL = 1;
SDA = 1;
SCL_DIR = 1;
SDA_DIR = 1;

SSPCON = 0b00101000;
SSPSTAT = 0b10000000;
SSPCON2 = 0b00000000;
SSPADD = 45; // (18.432MHz/4) / (45+1)= 100KHz
SSPMSK = 0xFF;
}
//***********************************************

//****************Read Data From Slave******************
int Read_Efuse_I2C()
{
IdleI2C(); // ensure module is idle
StartI2C(); // Start condition
I2C_Done(); // Wait Start condition completed

Runt = WriteI2C(I2CBoardAddress_R[0]);
I2C_Done(); // Clear SSPIF flag


RCEN=1;
while(!SSPIF);

data_Read = SSPBUF;
AckI2C();
I2C_Done();



RCEN=1;
while(!SSPIF);

data_Read = SSPBUF;
AckI2C();
I2C_Done();

}

void IdleI2C(void)
{
while ((SSPCON2 & 0x1F) || (R_nW))
continue;
}


void StartI2C(void)
{
SEN = 1;
}

unsigned char ReadI2C(void)
{
RCEN = 1;
while (!BF);
return ( SSPBUF);
}

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


//*****************************************************
//********************下方為Slave 端程式*****************

//***********************Initial Slave I2C****************
void Init_I2C(void)
{

SSPCONbits.SSPOV = 0;
SSPCONbits.SSPEN = 1; // Enable MSSP Mode
SSPCONbits.CKP = 1;
SSPCONbits.SSPM = 0x6; //0110 = I2C SLAVE模式, 7位地址


SSPSTATbits.SMP = 0;
SSPSTATbits.CKE = 0;
SSPSTATbits.BF = 0;

char Temp_Address = 0; //透過三個腳位去定義該slave端的ADDRESS
Temp_Address += AddressBit2;
Temp_Address = (Temp_Address << 1) + AddressBit1;
Temp_Address = (Temp_Address << 1) + AddressBit0;
SSPADD = 0x10 + Temp_Address;

INTCONbits.PEIE = 1; //Peripheral interrupt enable
INTCONbits.GIE = 1; //Global interrupt enable
PIE1bits.SSPIE = 1;
PIR1bits.SSPIF = 0;
}


//*************Slave Interrupt********************
void interrupt ISR (void)
{

if (PIR1bits.SSPIF == 1) // I2C
{
if(Flag_AreadyReciveAddress == 0)
{
Idx_Receive = 0;
Temp_ReceiveI2C = ReadI2C();
SSPCONbits.CKP = 1;
Idx_Send = 0;//當收到Address的時候 表示收送資料要重頭開始計算Index
Flag_AreadyReciveAddress = 1;
}
else
{
if (SSPSTATbits.S!=1) // Check for stop bit
{
//Idx_Send = 0;
Flag_AreadyReciveAddress = 0;
Init_Var_I2C();
}
else if (SSPSTATbits.READ_WRITE == 0)//READ_WRITE = 0 表示Master寫資料進來
{

Temp_ReceiveI2C = ReadI2C();
Idx_Receive++;

if(Idx_Receive==0x0B)
Init_Var_I2C();
}
else if(SSPSTATbits.READ_WRITE == 1)
{

Temp_ReceiveI2C = ReadI2C();//先把BF清0
if(SSPSTAT & 0x04) //check if master is ready for reception
{
while(putsI2C(I2C_Send)); // send the data to master
}

Flag_AreadyReciveAddress = 0;
}
}
SSPCONbits.CKP = 1; // I2C R/W 動作 做完時都要令CKP=1
PIR1bits.SSPIF = 0;
}
}



unsigned char ReadI2C( void )
{
while ( !SSPSTATbits.BF ); // wait until byte received

return ( SSPBUF ); // return with read byte
}



signed char putsI2C( unsigned char *wrptr )
{
unsigned char temp;
while ( *wrptr ) // transmit data until null character
{
PIR1bits.SSPIF = 0; // reset SSPIF bit
SSPBUF = *wrptr; // load SSPBUF with new data
SSPCONbits.CKP = 0; // release clock line
while ( !PIR1bits.SSPIF ); // wait until ninth clock pulse received

if ( ( SSPCONbits.CKP ) && ( !SSPSTATbits.BF ) )// if R/W=0 and BF=0, NOT ACK was received
return ( -2 ); // terminate PutsI2C() function

wrptr ++; // increment pointer

} // continue data writes until null character
return ( 0 );
}


void Init_Var_I2C(void)
{
Idx_Receive = 0;
Length_RX = 0;
ByteOfLength = 2;
CheckSumOfLength = 2;
Flag_AreadyReciveAddress = 0;
Flag_ReceiveComplete = 0;
Idx_Send = 0;
}

Re: MPLAB X IDE V3.05 新增 project 發生 select compiler 的問題 [發表者 Ryang]

Re: 無法燒入 找不到裝置ID [發表者 AdamSyu]

$
0
0
16-bit PIC/dsPIC (請註明使用的元件標號):: 無法燒入 找不到裝置ID
請分享下解法, 造福下版眾, 先謝過了.

APP1632實驗版-尋求光碟範例 [發表者 akuan_wang]

$
0
0
綜合應用:: APP1632實驗版-尋求光碟範例
你好:
請問在說明會現場買了APP1632,
我們在網路上有找到他的使用說明書,
在說明書中看到"隨附的光碟中提供數個練習程式與範例",
想請問我該怎麼得到範例資料?

kuan

PIC24EP512GP206 使用 RS485 9600 o,8,1 接收同位檢查問題 [發表者 newbie]

$
0
0
16-bit PIC/dsPIC (請註明使用的元件標號):: PIC24EP512GP206 使用 RS485 9600 o,8,1 接收同位檢查問題
目前程式設定如下

void UART_Initial(void)
{
#define FP 66200000
#define BAUDRATE 9600
#define BRGVAL ((FP/BAUDRATE)/16)-1

U1MODEbits.STSEL = 0; // 1-Stop bit
// U1MODEbits.PDSEL = 0x11; // 9-bit data, no parity
// U1MODEbits.PDSEL = 0x10; // 8-bit data, odd parity
U1MODEbits.PDSEL = 0x01; // 8-bit data, even parity
// U1MODEbits.PDSEL = 0x00; // 8-bit data, no parity
U1MODEbits.ABAUD = 0; // Auto-Baud disabled
U1MODEbits.BRGH = 0; // Standard-Speed mode
U1BRG = BRGVAL; // Baud Rate setting for 9600

U1STAbits.UTXISEL0 = 0; // Interrupt after one TX character is transmitted
U1STAbits.UTXISEL1 = 0;
U1STAbits.URXISEL = 0; // Interrupt after one RX character is received;
IEC0bits.U1RXIE = 1; // Enable UART RX interrupt
IEC0bits.U1TXIE = 0; // Disable UART TX interrupt
//IEC0bits.U1TXIE = 1; // Enable UART TX interrupt
U1MODEbits.UARTEN = 1; // Enable UART
//U1STAbits.UTXEN = 1; // Enable UART TX
}

void __attribute__((__interrupt__,auto_psv)) _U1RXInterrupt(void)
{
UINT8 ERRORDATA;
Nop();
RCData = U1RXREG;
if(U1STAbits.PERR == 1)
{
goto U1rxFail;
}
Nop();
Nop();

U1rxFail:
IFS0bits.U1RXIF = 0;
Nop();
Nop();
}



傳送部有確認可依設定自動傳出第 9bit 同位碼,

但接收部分有試過傳送第 9bit 為 odd/even/none 同位結構的資料,

但 U1STAbits.PERR 的判斷一直為"0",無法識別出錯誤資料

求解

Re: MCU Maximum current問題 [發表者 Ryang]

$
0
0
8-bit PIC (請註明使用元件編號):: MCU Maximum current問題
針對PIC的應用所需的電再多20%就可以了,不用太三里會250mA的規格,因為你的應用絕對不會到那麼大的電流。

Re: 關於65536-xxxx會有warning? [發表者 chrC475]

$
0
0
8-bit PIC (請註明使用元件編號):: 關於65536-xxxx會有warning?
既然TMR1只有16位元大小,而65536佔17位元,當然是不建議的啦。

用NOT式也能做到相同效果,我也經常用這方法的。

TMR1=65536-TIME1_BASE
TMR1=(65535-TIME1_BASE)+1
TMR1=~TIME1_BASE+1

如果TIME1_BASE=65530
那麼~TIME1_BASE=5

Re: P18F26K20 如何在主程式中修改flash memory的值? [發表者 gage117]

$
0
0
8-bit PIC (請註明使用元件編號):: P18F26K20 如何在主程式中修改flash memory的值?
感謝前輩們指點 問題已解決了

原來在C18的函式庫裡面有個EEP.h檔

載進去就可以寫入讀取EEPROM了

謝謝指導

Re: 12F675 動輒就自行重設 [發表者 Edison_yu]

$
0
0
8-bit PIC (請註明使用元件編號):: 12F675 動輒就自行重設
USB Adapter才5v,用7805可以穩壓嗎?7805又不是LDO,LDO的Dropout voltage都要200mv以上了,更何況你用7805,加了1N4001頂多也是防止逆接,對突波沒有太大的幫助吧,要先量出突波是多大的電壓,突波時間多少,加電阻電容(RC低通)會比你用二極體有用,但電阻會限制你的電流大小,不然就是用LC之類的電路,或是直接用ESD防護之類的元件,也是有人用在Power上面,防止突波產生,要不然用個Zener嘛,方式很多,千萬要找出問題再下對策!

Re: Uart 偶同位詢問 [發表者 Lonelysnow]

$
0
0
8-bit PIC (請註明使用元件編號):: Uart 偶同位詢問
To Eigen

感謝提醒,目前已解決此問題。
有使用示波器量測RS232及轉成RS485信號後是否皆正確,發現RS232晶片有問題(不是負邏輯準位),導致RS232轉成RS485時訊號不正確無法與機台溝通。

Re: 無法應用XIDE compile 舊dsPIC33EP project [發表者 Ryang]

$
0
0
16-bit PIC/dsPIC (請註明使用的元件標號):: 無法應用XIDE compile 舊dsPIC33EP project
Adam 有針對你的案例去修改登錄檔,請跟他連絡修改登錄檔的問題。

Bluetooth BM77 UART Commmad [發表者 urmgand35]

$
0
0
綜合應用:: Bluetooth BM77 UART Commmad
目前手邊有一塊BM77藍牙板,現階段想利用PC與BM77進行溝通測試,但是在測試Command code的時候,BM77都只會在剛送電接收我傳送的資料後回應給我一筆0x04 0x10 0x01 0x10資料(不管我傳什麼資料都是收到這一串資料),之後便不再理會我....有人有使用此板的相關經驗嗎?請指教!感謝~

Re: XC8 v1.37 Compiler的疑問 [發表者 Ryang]

$
0
0
8-bit PIC (請註明使用元件編號):: XC8 v1.37 Compiler的疑問
XC8自v1.35以後需再自行安裝週邊涵數庫v2.00RC3。自行在教育訓練光碟下載安裝。看一下 PIC101 Starter RTC 課程的說明。

Re: ADC量測電壓失準 [發表者 Ryang]

$
0
0
8-bit PIC (請註明使用元件編號):: ADC量測電壓失準
切換轉換通道時,中間有沒有做取樣時間的延遲。
取樣時間不夠的話,兩個通道的電壓會相互干擾。

Re: PIC101 Starter RTC有關 APP001 Rev.3a+Pickit3設定 [發表者 Ryang]

$
0
0
8-bit PIC (請註明使用元件編號):: PIC101 Starter RTC有關 APP001 Rev.3a+Pickit3設定
是的那個連接器要用三個 Jumper 接到左邊這樣子才能夠接通PIC的燒錄電路。還有關掉pk3的電源輸出,有發生的電源打架的現象。

Re: 請教dsPIC計算均方根值的花費時間的問題 [發表者 sharonechi]

$
0
0
16-bit PIC/dsPIC (請註明使用的元件標號):: 請教dsPIC計算均方根值的花費時間的問題
我利用Disassembly Listing來看只看到引入值和返回值的指令,剛好4行,我看不到標準數學函數math.h的sqrt();的反組譯的組語程式碼

PIC32MZ DMA 問題(使用DMA來完成UART的傳輸) [發表者 阿雷斯]

$
0
0
32-bit PIC (請註明使用的元件標號):: PIC32MZ DMA 問題(使用DMA來完成UART的傳輸)
請問一下各位大大
本人在測試 DMA的時侯,發生一個嚴重的問題,麻煩各位先進來幫忙解答

在試用DMA 來做 UART的通訊功能,但接收到的字元完全錯誤(像是『指定的位址』完全不對)
程式碼如下; 完全不知道問題是在哪?


#define __ISR(v,...) __attribute__((vector(v), interrupt(__VA_ARGS__), nomips16))
#define KVA_TO_PA(v) ((_uint32)v & 0x1fffffff)


#define MAX_UR_TX 512
_uint08 Buffer_UartTx[MAX_UR_TX] = "0000000000001234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";

void initUART6(){
U6MODE = 0; //先把 UART6 的 功能 停止

LATDbits.LATD9 = TRUE;
TRISDbits.TRISD9 = DIR_OUTPUT; //TxD6 - RD9
RPD9R = 0x04;

CNPUGbits.CNPUG9 = TRUE; //RxD6 - RG9
ANSELGbits.ANSG9 = DIGITAL_INPUT;
U6RXR = 0x01;

IFS5bits.U6TXIF = FALSE; //先清除 UART4的 Flag
IFS5bits.U6RXIF = FALSE;

U6MODEbits.BRGH = TRUE;
U6BRG = 216; // BaudRate = 115200

U6STAbits.UTXEN = TRUE; //Transmit Enable bit
U6STAbits.URXEN = TRUE; //Receiver Enable bit
U6MODEbits.ON = TRUE; //啟動UART6的功能
}

void initialDMA0(){
DCH0CON = 0;
DCH0ECON = 0;

DMACONbits.ON = TRUE;
DCH0CONbits.CHPRI = 3;

DCH0ECONbits.CHAIRQ = 0;
DCH0ECONbits.CHSIRQ = 190; //UART6 的中斷向量
DCH0ECONbits.SIRQEN = TRUE;

DCH0SSA = KVA_TO_PA( &Buffer_UartTx[0]);
DCH0DSA = KVA_TO_PA( &U6TXREG);

DCH0SSIZ = 48;
DCH0DSIZ = 1;
DCH0CSIZ = 1;

DCH0INTCLR = 0x00FF00FF;
DCH0INTbits.CHBCIE = TRUE; // Channel Block Transfer Complete Interrupt Enable bit
DCH0INTbits.CHERIE = TRUE; // Channel Address Error Interrupt Enable bit

// Interrupt Setup
IPC33bits.DMA0IP = 5;
IPC33bits.DMA0IS = 1;
IEC4bits.DMA0IE = TRUE;
}

int main(void) {
waitTime_mS(1000);

asm volatile("di"); //Disable all Interrupts
asm volatile("ehb"); //Disable all Interrupts

SYSKEY = 0xAA996655; // Write Key1 to SYSKEY
SYSKEY = 0x556699AA; // Write Key2 to SYSKEY

initUART6();
initialDMA0();

SYSKEY = 0;
INTCONbits.MVEC=1
asm volatile("ei");

waitTime_mS(1000);
while(1);
}

void __ISR(_DMA0_VECTOR, ipl5) DMA0_U6Tx (void){
if ( DCH0INTbits.CHERIF)
DCH0INTbits.CHERIF = FALSE;

if ( DCH0INTbits.CHBCIF)
DCH0INTbits.CHBCIF = FALSE;

IFS4bits.DMA0IF = FALSE;
}

Re: APP1632實驗版-尋求光碟範例 [發表者 akuan_wang]

$
0
0
綜合應用:: APP1632實驗版-尋求光碟範例
感謝您的回覆

我有些新的問題
1.我的APP1632通電後,並不像說明書敘述的運作。

1-1)預載之程式在實驗板上電後即自動執行。
1-2)APP1632 開啟電源後,液晶模組(LCD Module)上會出現如圖1之字樣。
我的做法是:
USB Port(CON6)自PC供電 短路(JP1)
PIM連接APP1632-5 短路(JP2)
結果會是:
液晶模組的上排,會亮5*8黑色的格子一排,共16個,下排則是沒顯示。
(補充:抱歉我不會貼圖上來

2.想詢問燒錄專案內容
目前ICD3與APP1632的連接,在MPLAB有正確連接回應,
請問 我是要利用:
pic24_dspic_explorer16_demo_v2015_11_18 內
explorer16_demo\src
內的main.c
explorer16_demo\src\system_config\exp16\dspic33fj16gs504_pim
內的system.c
bsp\exp16\dspic33fj16gs504_pim
內的所有.c.h檔
然後再去找缺少的.h檔
理論上就可以閃燈了嘛?

PIC16F1824- I2C Slave 範例程式(使用Assembly) [發表者 Tama]

$
0
0
8-bit PIC (請註明使用元件編號):: PIC16F1824- I2C Slave 範例程式(使用Assembly)
請問是否有使用Assembly撰寫的 PIC16F1824- I2C Slave 的範例程式?
Viewing all 4647 articles
Browse latest View live