Re: 關於利用PIC產生波形
|
||||
---|---|---|---|---|
中級會員
|
請問一下
不知道是否有PWM的相關範例可以參考?
發表於: 2009/4/10 10:43
|
|||
|
關於利用PIC產生波形
|
||||
---|---|---|---|---|
中級會員
|
請問一下各位高手....
我想利用PIC來產生一各連續的波形 但這個連續波形每各low high的時間寬度都不一樣 最小時間寬度為0.2ms 最大2.5ms 目前想說用 DO 加上 Timer 中斷觸發來做 不曉得這樣做行不行的通?有什地方需要注意的? 或有沒有大大有其他建議的?或比較好的方法? 懇請賜教..... 先說聲謝謝了^^
發表於: 2009/4/9 17:55
|
|||
|
Re: USB 的問題
|
||||
---|---|---|---|---|
中級會員
|
好慘...沒人回.....~_~....自推一下...
發表於: 2009/2/12 11:00
|
|||
|
USB 的問題
|
||||
---|---|---|---|---|
中級會員
|
請問一下各位前輩.....
我下載了官方提共的usb vb demo 裡面有一個函數...是find usb device 如下 MPUSBGetDeviceCount(MPUSB_PID_VID) 想問一下,函數裡面這個MPUSB_PID_VID數的作用? 因為我發現我沒給PID和VID一樣可以搜尋到USB 有設跟沒設結果是一樣的? 所以覺得很奇怪 = =a 既然結果一樣,為何還要有這數? 另外在請問一下,有mpusbapi.dll 裡面函數的說明文件嗎? 用了裡面function 可是都不知道每各數的意義 = =
發表於: 2009/2/10 17:01
|
|||
|
PIC18f2221關於 DIO 輸出輸入問題
|
||||
---|---|---|---|---|
中級會員
|
請問一下
我將RA4設為輸出,當產生中斷後 RA4 輸出"恆"為1 可是現在有個問題... 我用LATAbits.LATA4=1 讓它輸出為1 可是當跑完這行程式後 它輸出狀態又跑回去0 並不會恆為 1 ,RA4照理說應該會鎖住在1才對吧? 有時我用debug模式讓他run還會跑出數錯誤的訊息 我是在main裡把他寫在while迴圈中 是否有高手前輩可以指點一下問題出在哪? 以下是source code #include <p18f2221.h> #include <usart.h> #include <delays.h> #include <timers.h> char RX_Temp; unsigned char aaaa=0; void isr_high(void); void isr_low(void); //================================== #pragma code lo_vector=0x18 void isr_low_code(void) { _asm GOTO isr_low _endasm } #pragma code #pragma interrupt isr_low void isr_low(void) { PIR1bits.RCIF=0; RX_Temp = ReadUSART(); } //================================== #pragma code hi_vector=0x08 void isr_high_code(void) { _asm GOTO isr_high _endasm } #pragma code #pragma interrupt isr_high void isr_high(void) { if(INTCONbits.INT0IF==1) { INTCONbits.INT0IF = 0; aaaa=1; LATAbits.LATA4 = 1; } if(INTCON3bits.INT1IF==1) { INTCON3bits.INT1IF = 0; } } void main() { OSCCON = 0x62; OSCTUNE = 0x80; OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 25); PIR1bits.RCIF=1; PIE1bits.RCIE=1; IPR1bits.RCIP=0; RCONbits.IPEN=1; INTCONbits.GIE=1; INTCONbits.PEIE=1; INTCONbits.TMR0IE=0; INTCONbits.INT0IE=1; INTCONbits.RBIE=0; INTCON2bits.RBPU=1; INTCON2bits.INTEDG0=1; INTCON2bits.INTEDG1=1; INTCON2bits.TMR0IP=0; INTCON2bits.RBIP=0; INTCON3bits.INT1IE=1; INTCON3bits.INT2IE=0; INTCON3bits.INT1IP=1; INTCON3bits.INT2IP=0; ADCON0bits.CHS0=0; ADCON0bits.CHS1=0; ADCON0bits.CHS2=0; ADCON0bits.CHS3=0; ADCON0bits.ADON=0; ADCON1 = 0x0f; CMCON = 0x07; TRISAbits.TRISA0 = 1; //RA0 Input (DI0) TRISAbits.TRISA3 = 0; //RA3 Output (CS) TRISAbits.TRISA4 = 0; //RA4 Output (DO0) LATAbits.LATA3 = 0; LATAbits.LATA4 = 0; TRISBbits.TRISB4 = 0; LATBbits.LATB4 = 1; while(1) { if(aaaa==1) { LATAbits.LATA4 = 1; } } }
發表於: 2008/12/23 10:44
|
|||
|
AD轉換問題?
|
||||
---|---|---|---|---|
中級會員
|
void init_AD(void)
{ CMCON = 0x07; ADCON0bits.CHS3 = 0; ADCON0bits.CHS2 = 0; ADCON0bits.CHS1 = 0; ADCON0bits.CHS0 = 0; ADCON0bits.GO_DONE = 0; ADCON0bits.ADON = 1; ADCON1 = 0x0E; ADCON2bits.ADFM = 0; ADCON2bits.ACQT2 = 0; ADCON2bits.ACQT1 = 0; ADCON2bits.ACQT0 = 0; ADCON2bits.ADCS2 = 1; ADCON2bits.ADCS1 = 1; ADCON2bits.ADCS0 = 1; } void main (void) { init_AD(); while(1) { Delay10TCYx(5); ConvertADC(); while(BusyADC()); } } 以上是我寫的一個測試AD轉換的程式.... 硬體部分用的是PIC18F6490,用的是內部RC震盪器 線路接法是直接給24Pin(AN0) 一個3V的電壓 有用分壓電路 所以實際進去的電壓 只有3V的一半 然後我使用debug模式 開啟watch視窗檢查ADRESH和ADRESL兩各暫存器 發現我電壓給3V 此時AD取得的電壓為7F 02 因為分壓 所以1/2 得到7F 02這是OK的 不過問題來了.... 我把VCC電壓改成2.8V後 的到的值也是7F 02 變成我的考電壓跟實際要測的電壓是一起在動的 有辦法把考電壓固定為3V嘛 這樣才有辦法去比較剩餘的電 只有用一個電源 VDD和VSS 以及 AN0 AD 轉換的電壓都是一樣的 請各位大大指點一下
發表於: 2008/12/9 14:31
Edited by badsan on 2008年12月09日 18:16:04
|
|||
|
Re: 程式太大?
|
||||
---|---|---|---|---|
中級會員
|
參照:
感謝R大....我剛剛有試著把 Library 的p18F6490.lib 從 Project 裡拿掉....... 不過還是發生一樣的錯誤..... 所以現在是說因為我的C18不是正式版的?沒有最佳化功能.. 所以才會發生這問題嗎? 現在解決的方法是更換PIC型號為85j90嘛? 如果換成85j90就可以解決這各問題嗎? 但這樣就要更改我們硬體電路...牽涉的層面會很大... 不知道有沒有辦法可以不換型號...從軟體上去解決? 如果改成用最新的C18正式版本...是否可以解決這問題?
發表於: 2008/11/27 13:30
|
|||
|
Re: 程式太大?
|
||||
---|---|---|---|---|
中級會員
|
不知道R大是否可以留下信箱..我在私下寄給你跟你討論..
因為不方便把souce code公開..... 不然就又要上台北跑一趟貴公司了~_~ 萬分感激不盡.....
發表於: 2008/11/25 14:38
|
|||
|
程式太大?
|
||||
---|---|---|---|---|
中級會員
|
請問一下各位高手...小弟在build時都會出現以下錯誤.....
看來好像是程式寫太長了....只要把其中某一段給拿掉就沒問題 可是如果那行沒拿掉就會出現以下的問題.... 有爬文看了以前一些文章.... 好像解決方法是去改lkr的記憶體位址? 後來翻了之前到台北上課的w401講義....裡面有稍微提到.... 不過還是看不太懂...不知道是否有高手前輩可以詳細指點一下...該怎下手修改?萬分感激不盡........ Executing: "C:\MCC18\bin\mplink.exe" /l"C:\MCC18\lib" /k"C:\MCC18\lkr" "..\..\..\..\..\MCC18\lkr\18f6490i.lkr" "..\..\..\..\..\DL-100_v1.3\24lc128.o" "..\..\..\..\..\DL-100_v1.3\LCD_6490.o" "..\..\..\..\..\DL-100_v1.3\SHT.o" "C:\MCC18\lib\p18f6490.lib" /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /z__MPLAB_DEBUGGER_ICD2=1 /z__ICD2RAM=1 /o"Demo_6490.cof" /M"Demo_6490.map" /W MPLINK 4.11, Linker Copyright (c) 2007 Microchip Technology Inc. Error - section '.code_fxd1616u.o' can not fit the section. Section '.code_fxd1616u.o' length=0x0000002c Errors : 1 另外請問是否可以留貴公司FAE的信箱和電話給我...
發表於: 2008/11/25 14:14
|
|||
|