• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts (mowson)




Re: 寫入內建的記憶體需要有時間延遲嗎?
#1
新會員
新會員


參照:

Ryang 寫道:
參照:

MARKWANG 寫道:
我讀/寫內部eeprom沒遇到這問題,都是一次就ok!
倒是用外部eeprom會遇到跟jubel一樣的問題(i2c/smbus)!
我也是用連寫兩次解決這問題!
不知其他人是否有好的解決方式?


I2C 有一個很重要的訊號叫 ACK/NACK,I2C 程式要寫的好這個訊號依定咬檢查。很多人寫 I2C 程式時,每寫入一筆資料到 EEPROM 時下一筆的資料寫入 Command 時就必須檢查 ACK 訊號已判定EEPROM 是否還在 Busy 的寫入狀態中,因為 I2C EEPROM 寫入資料需數個 mS 的時間,若程式用 Delay 的方式設計要是 Delay 的時間沒控制好有時候就會寫不進去。


Ryang 大,
如果讀取,寫入外部 EEPROM ,如 24LC32A ,
假設內部其他的中斷層級較高,(需即時控制,不能關閉其他中斷)
透過SMBus 寫入的時候,被其他人中斷了,或讀取的時候被中斷了,start , ack 或 nack 跟 SCL 晚一點送達 EEPROM,
這樣會有怎樣的問題?
不好意思,找不到這方面的資料哩.

發表於: 2009/3/23 15:40
頂部


Re: 如何讀寫 eeprom
#2
新會員
新會員


Ryang 大大,eeprom 的部份,真的有看沒有懂=_=
我整理之後寫成以下程式段,
Array[0:2]=address
Array[3:18]=data
寫入16個byte
--------------------------------------------------------------
asm ("push w7");
asm ("push w6");

//清除 row of date byte
NVMCON = 0x4045; //清除1個row
NVMADRU = Array[0];
NVMADR = Array[1];
NVMADR = (NVMADR<<8)|Array[2];

//寫入NVMKEY
NVMKEY = 0x55;
NVMKEY = 0xAA;

NVMCON = NVMCONbits.WR = 1;//開始清除
while(NVMCONbits.WR);//等待清除完畢

for(i=0;i<16;i++)//載入所有資料到栓鎖器裡面
{
WREG6 = SPI_Eeprom_byte[3+i];
WREG7 = NVMADR++;
asm ("tblwtl.b w6, [w7] ; write the 8-bit byte");
}
NVMCON = 0x4005;
//寫入1個row

NVMKEY = 0x55;
NVMKEY = 0xAA;

NVMCON = NVMCONbits.WR = 1;//開始寫入
while(NVMCONbits.WR);//等待寫入完畢

asm ("pop w6");
asm ("pop w7");
--------------------------------------------------------------
讀取16個Byte
--------------------------------------------------------------
asm ("push w7");
asm ("push w6");

NVMADRU = Array[0];
NVMADR = Array[1];
NVMADR = (NVMADR<<8)|Array[2];

for(i=0;i<16;i++)
{
WREG7 = NVMADR;
asm ("tblrdl.b [w7] , w6 ;");
Array[3+i] = WREG6;
NVMADR++;
}

asm ("pop w6");
asm ("pop w7");
--------------------------------------------------------------
當然,這樣的程式不會動,想請問 Ryang大大,
哪個地方需要修改?
看不懂組語,又想盡量簡化程式. 囧

發表於: 2009/1/16 17:53
頂部


Re: dsPIC30F2010 SPI 讀取問題
#3
新會員
新會員


Ryang大大,昨晚try了一下,是的,是mode設定的問題,

在另一個mcu(master)設定00,但是dsPIC2010(slave)的

mode ,設定為10才可正常讀寫溝通,

感謝Ryang大的提醒,終於又有突破了!感謝!

發表於: 2009/1/15 9:58
頂部


dsPIC30F2010 SPI 讀取問題
#4
新會員
新會員


各位先進,目前小弟使用dsPIC30F2010 的 SPI 與其他 mcu 溝

通,實際傳輸如附圖, CH1 是 command , CH2 是 clock , CH4

是 NSS , 以上訊號皆由其他 mcu 傳入 2010 , command 是

0x22 , 2010 卻讀到 0x44 ,而由 2010 傳輸出去的 data ,

外部 mcu 卻可以正常讀取,不會有差一個 bit 的情形,

2010 的 SPI1STAT 設定 0x8000 , SPI1CON 設定 0x0080,

CKE:0 CKP:0 MODE16:0 MSTEN:0 ,當作 slave 使用,

是否哪裡沒設定好,導致 2010 讀取差1 bit , 但傳出卻正常?

clock 為 500kHz . 先謝過各位先進,不吝回答.

Attach file:



jpg  (0.00 KB)


jpg  (0.00 KB)


發表於: 2009/1/13 10:23
頂部


Re: 請問 UART printf 使用問題!
#5
新會員
新會員


浮點,有的喔,至於符不符合IEEE,我就不太清楚了,
因為 Keil 的 C 註解有底下這一行,
f float Floating-point number formatted as
« - »dddd.dddd.

發表於: 2008/10/27 17:10
頂部


Re: 請問 UART printf 使用問題!
#6
新會員
新會員


Ryang大大,
project -> Build Options -> Project -> MPLAB LINK30
裡面,我設定了 64 Bytes ,也是一樣的錯誤訊息,
試著加大或減小,仍無法消除錯誤, =_=

使用 printf ,我在 silicon lab 的 mcu 上,約莫增加 1KB 多,
好處是輸出格式很容易設定,
如果真的還是沒辦法使用,看起來,
就只能多花費點心思在uart 提供的 func.上面了.
感謝大大的協助. ^_^

發表於: 2008/10/24 17:24
頂部


請問 UART printf 使用問題!
#7
新會員
新會員


各位大大,
UART使用 printf 傳送資料至電腦,編譯時卻發生以下錯誤訊息,

Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=30F2010 -c -x c "port_IO.c" -o"port_IO.o" -g
Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -Wl,"C:\desktop\ICD2test\port_IO.o",-L"C:\Program Files\Microchip\MPLAB C30\lib",--script="C:\desktop\ICD2test\p30f2010.gld",-o"Port_IO.cof",-Map="Port_IO.map"
c:\program files\microchip\mplab c30\bin\bin\pic30-coff-ld.exe: Link Error: region program is full (Port_IO.cof section .text)
C:\desktop\ICD2test\port_IO.o: Link Error: Could not allocate section .const, size = 18 PC units, attributes = psv
data_init: Link Error: Could not allocate section .dinit, size = 314 PC units, attributes = code
C:\desktop\ICD2test\port_IO.o: Link Error: Could not allocate section .text, size = 220 PC units, attributes = code
default_isr: Link Error: Could not allocate section .isr, size = 2 PC units, attributes = code
Link Error: Could not allocate program memory
BUILD FAILED

於是編譯失敗,改用 putsUART1 ,可以正常編譯,而且執行,
dsPIC30F2010
MPLAB IDE V7.50
C30 使用 microchip 下載的版本,
程式裡有include以下標頭,
#include <p30F2010.h>
#include <uart.h
#include <stdio.h>
stdio.h 是從 C30裡 copy 過來,
現在頭很大,因為寫 printf貫了,不大會使用 putsUART1,
還請各位大大協助幫忙! 謝謝.

發表於: 2008/10/24 13:55
頂部






:::

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... ]

教育訓練中心

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