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

論壇索引


Board index » All Posts (timijk)




Re: dsPIC30f4011 A/D 問題
資深會員
資深會員


我覺得你有空多練練 C 程式的基本寫作 對你會很有幫助 不過你有心做一些新的嘗試 還是值得鼓勵

加油

發表於: 2007/12/7 17:45
頂部


Re: 亂數
資深會員
資深會員


在 TCP/IP stack 裡有 random.c hashes.c 可幫你產生 random Byte

你也可參考 Numerical Recipes Chap 7 寫一個
http://www.nrbook.com/a/bookcpdf.php

發表於: 2007/12/7 17:42
頂部


Re: 請問dsPIC30F3014 EEPROM
資深會員
資深會員


Data EEPROM memory:
- 100,000 erase/write cycle (min.) for industrial temperature range, 1M (typical)

應該是在一般溫度(typical 25度 C)下 可有 一百萬次
在工業溫度的規格下 例如環境溫度低到 -40度 C 或高到 85度 C 則是 十萬次

發表於: 2007/12/7 16:57
頂部


Re: Pic18f8622跟SPI 介面的rtc(ds1390)應用問題
資深會員
資深會員


我又研讀了一下 ds1390 的 datasheet 我想問題在它的讀寫有兩種模式 分為 single byte 和 mutli-byte

single byte, 一個 address 配一個 data

multi-byte, 一個 address 配連續多個 data

主要由 cs 信號控制 當 cs H->L, L->H 為一完整 cycle

所以當 H->L 永遠先送出 address, 接著傳 data, read or write. 每傳一個 data, address 自動加一

你的while loop 每次只傳 address 就結束 所以永遠讀不到東西

while(TRUE) { 
   
delay(T1S);

   
SPI_CS 0;

   var = 
putcSPI1(0x00);  // start with millisecond
   
gg ReadSPI1();  // dummy read

   
var = putcSPI1(0x00);  // dummy write
   
msec ReadSPI1();  // msec data

   
var = putcSPI1(0x00);  // dummy write
   
sec ReadSPI1();  // sec data

   
var = putcSPI1(0x00);  // dummy write
   
min ReadSPI1();  // min data

   //.. hour, dow(day of week), date(day of month), month, year


  
SPI_CS 1;
}


若還不行 其他 trisc 的設定自己看看

發表於: 2007/12/7 14:54
頂部


Re: dsPIC30f4011 A/D 問題
資深會員
資深會員


*.c 檔只是 C 程式碼, 要經編譯 連結後做成 .hex 機器碼 才能燒錄到 chip 裡

不是改 c 檔 就會直接產生 hex 檔, MPLAB 是一開發環境 他會去看 project 的設定 去執行需要的編譯 或連結動作 當然主要目的是 產生 hex 檔 或 製作 library...

一般有做變動就需 重新 make hex 檔 有時用 build all 全部做一更新

發表於: 2007/12/7 14:32
頂部


Re: 使用APP023-1 USART接收問題(18F8680)
資深會員
資深會員


i found a short example in PICDEM FS USB

//RS-232 Setup for pic18 USB series
        
TRISCbits.TRISC7=1// RX
        
TRISCbits.TRISC6=0// TX
        
SPBRG 0x71;
        
SPBRGH 0x02;      // 0x0271 for 48MHz -> 19200 baud
        
TXSTA 0x24;       // TX enable BRGH=1
        
RCSTA 0x90;       // continuous RX
        
BAUDCON 0x08;     // BRG16 = 1
        
temp RCREG;       // Empty buffer
        
temp RCREG;       // Empty buffer
        
        //RS-232 Tx & Rx Tests
        //while(!Switch3IsPressed());
        
TXbyte('R');
        
TXbyte('S');
        
TXbyte('-');
        
TXbyte('2');
        
TXbyte('3');
        
TXbyte('2');
        
TXbyte(' ');
        
TXbyte('T');
        
TXbyte('X');
        
TXbyte(' ');
        
TXbyte('T');
        
TXbyte('e');
        
TXbyte('s');
        
TXbyte('t');
        
TXbyte(' ');
        
TXbyte('O');
        
TXbyte('K');
        
TXbyte(',');
        
TXbyte(' ');
        
TXbyte('P');
        
TXbyte('r');
        
TXbyte('e');
        
TXbyte('s');
        
TXbyte('s');
        
TXbyte(' ');
        
TXbyte('"');
        
TXbyte('r');
        
TXbyte('"');
        
TXbyte(',');
        while(
PIR1bits.RCIF==0);  //Wait for data from RS232
        
if(RCREG == 'r')
        {
            
TXbyte(' ');
            
TXbyte('R');
            
TXbyte('X');
            
TXbyte(' ');
            
TXbyte('T');
            
TXbyte('e');
            
TXbyte('s');
            
TXbyte('t');
            
TXbyte(' ');
            
TXbyte('O');
            
TXbyte('K');
        }
//end if


文中 TRISCbits.TRISC6=0, 他用的是 pic18 USB 系列 你自己斟酌看看

SPBRG, SPBRGH 要根據 Fosc 調整

參照:

For a device with FOSC of 16 MHz, desired baud rate of 9600, Asynchronous mode, 8-bit BRG:
Desired Baud Rate = FOSC/(64 ([SPBRGH:SPBRG] + 1))
Solving for SPBRGH:SPBRG:
X = ((FOSC/Desired Baud Rate)/64) – 1
= ((16000000/9600)/64) – 1
= [25.042] = 25
Calculated Baud Rate= 16000000/(64 (25 + 1))
= 9615
Error = (Calculated Baud Rate – Desired Baud Rate)/Desired Baud Rate
= (9615 – 9600)/9600 = 0.16%


TXSTA, RCSTA 請對照 data sheet, 跟你 PC terminal 的設定也有關

另一點 硬體插斷先 disable, 用軟體 polling 的方式

while(PIR1bits.RCIF==0); 這一步會等收到 data 才繼續

RCREG == 'r'; 或 temp = RCREG; 會去buffer 讀資料 並 clear PIR1bits.RCIF...

void TXbyte(byte data)
{
    while(
TXSTAbits.TRMT==0);
    
TXREG data;
}
//end TXbyte


發表於: 2007/12/7 14:19
頂部


Re: 使用APP023-1 USART接收問題(18F8680)
資深會員
資深會員


DSW2 pin3,4 要 on
你由電腦送信號時 那 DSW2 旁的 LED16 (RX) 有沒有反應 LED15 是 TX

至於範例 有 Pic16 or dsPic30 右邊範例程式(29)有 pic16 的

pic18 我再找找

發表於: 2007/12/7 13:51
頂部


Re: Pic18f8622跟SPI 介面的rtc(ds1390)應用問題
資深會員
資深會員


程式範例
http://www.maxim-ic.com/appnotes.cfm/an_pk/3313

在 main() 裡面

GPIO_B_DR 就是 enable/disable 的信號

你注意 wbyte_spi() 和rbyte_spi() 的順序

putcSPI1() 對應 wbyte_spi()
ReadSPI1() 對應 rbyte_spi()

當你要寫入 DS1390 時 第一個 為寫入位址 第二為資料 如

wbyte_spi(0x80); //select seconds register write address
rbyte_spi(); // dummy read
wbyte_spi(msec); // milliseconds register data
rbyte_spi(); // dummy read

當你要讀 DS1390 時 第一個 為位址 第二為資料 如

wbyte_spi(0); // seconds register read address
rbyte_spi(); // dummy read
wbyte_spi(0); // dummy write
msec = rbyte_spi(); // read milliseconds register

每一個 SPI 的輸出 靠 ReadSPI1() 來清除 BF (buffer full)的 flag 不管那讀入的資料有沒有用 這步驟千萬不能省掉 putcSPI1() 是靠 BF 來判斷動作是否完成 用完後須手動 clear BF, ReadSPI1() 會靠 read 的動作清除 BF

SPI 是 duplex 所以你想要讀資料 事實上也需用寫出的動作 每一個對 DS1390 的操作 需要兩個 SPI 的 cycle 每一個 cycle 就要一組 wbyte_spi() 和 rbyte_spi()


發表於: 2007/12/7 8:29
頂部


Re: dsPIC30f4011 A/D 問題
資深會員
資深會員


void put_Num_LCDunsigned int The_Number10 )
{
unsigned int The_Number;
unsigned char Temp_Char_1000Temp_Char_100Temp_Char_10Temp_Char ;

The_Number The_Number10 1000;  //1000 的餘數

Temp_Char_1000 The_Number10 /1000 //取千位數的數字
putcLCDTemp_Char_1000 '0' ) ;

Temp_Char_100 The_Number /100 //取百位數的數字
putcLCDTemp_Char_100 '0' ) ; //轉換為ASCII編碼,'0'的編碼加數字大小
Temp_Char_10 = (The_Number Temp_Char_100*100) /10 //取十位數的數字
putcLCDTemp_Char_10 '0' ) ;
Temp_Char The_Number - ( Temp_Char_100*100 Temp_Char_10 10 ) ; //取個位數的數字
putcLCDTemp_Char '0' ) ;

}


前幾行稍加修改 主要把 put_Num_LCD 的參數改為 unsigned int The_Number10 因 unsigned char 只能處理 8 bit 的資料

再來把原來的 The_Number 設為 1000 的餘數 則原來處理 3 位數的顯示程式可不用更動

然後取千位數 Temp_Char_1000 把他先顯示出來即可

發表於: 2007/12/7 7:26
頂部


Re: dsPIC30F2020中如何用PWM觸發AD取樣
資深會員
資深會員


參照:
-- Data Sheet --
12.37 CPU 负载切换
SMPS dsPIC DSC具有切换各触发比较操作的能力。此功能有助于平均分配处理器工作量以将处理器超载的情况降至最少。
假设有一种情况由4 个PWM 通道控制4 个独立的电压输出。进一步假设各PWM 发生器工作频率为1000 kHz(周期为1 μs),且各控制环的工作频率为125 kHz(8 μs)。

各TRGCONx寄存器中的TRGDIV<2:0>位设置为111,这将选择每第8 个触发比较匹配将产生一个ADC 触发信号以捕捉数据并开始转换过程。
若不存在时间偏移(stagger-in-time)功能,所有PWM触发寄存器的所有请求可能会同时发生。若发生了“堆积”,某些数据采样将会超过处理所有4 个通道的数据的时间。
有了此时间偏移功能,触发信号在后续PWM 周期内根据时间排列,以使所有数据能有序处理。
ROLL 计数器是一种连接到主时基计数器的计数器。主时基计数器每计数到终值(计满), ROLL 计数器就递增一次。

时间偏移功能由TRGCONx寄存器中的TRGSTRT<5:0>位控制。TRGSTRT<5:0> 位指定ROLL 计数器的计数值,此值必须在各PWM 发生器中的独立触发比较模块开始计数触发比较事件(由PWMCONx 寄存器中的TRGDIV<2:0> 位指定)之前匹配。
因此,在4 个PWM 发生器的示例中,第一个PWM 的
TRGSTRT<5:0> 位应为000,第二个PWM TRGSTRT位应置为010,第三个PWM TRGSTRT位应置为100,第四个PWM TRGSTRT 位应置为110。所以,在总共8 个PWM 周期中, 4 个独立的控制环应分别以自己的2 μs 时间周期工作。



TRIGx 指在第幾個 PWM clock count 產生一個 trigger
TRIGDIVx 指在幾個 trigger 後產生插斷
TRGSTRTx 指在第幾個 trigger 後 才開始計數 ( 才開始算, 若TRGSTRTx=2, 則從第 2 個trigger 開始算為一, 所以 TRGSTRT 只用那麼一次, 在 disable PWM, 再 enable 後 才又從新開始)

當然一個 PWM 週期只會產生一個 trigger
我們可以控制幾個周期產生一個插斷

若是使用多個 PWM 可能同時產生數個 PWM 插斷 會造成 overload, 所以用 TRGSTRT 來分散插斷的 load

你只用一個 PWM, TRGSTRT 影響不大


Chap 30.38 有一詳例和圖

發表於: 2007/12/6 16:17
頂部



« 1 ... 19 20 21 (22) 23 »



:::

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

教育訓練中心

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