• slider image 442
  • slider image 497
  • slider image 498
  • slider image 499
  • slider image 500
  • slider image 502
:::


Browsing this Thread:   1 Anonymous Users






dspic30f4011 Input capture 小鱼拜请大虾指教
#1
新會員
新會員


查看用戶資訊
不好意思由于刚开始练习编程,所以程序有些繁冗。

目的:利用数字温度传感器SMT16030输出的调频方波信号进行温度测量.

前提:我以前是利用PIC16f877对传感器进行检测的。并且自己设计的程序可行。但是鉴于PIC16f877只有一个PWM信号输入口,所以现在改用dspic30f4011.

问题:我将在PIC16F877上的思路移植到了dspic30f4011上。但是发现程序好像是卡在哪里不动了。显示器一直显示是一组相同的非目标数值。

程序概述:运用Timer2做定时器, SPI做显示输出, input capture捕捉PWM信号。

程序:

#include <dspic30f4011.h>

short int x;
int i,Te_1,Te_2,Te_3,temp;
float PWMX, A, j,P,Q,m;

void main (){
TRISB=0;
PORTB=0;
ADPCFG=65535;
TRISD0=1; /////////////IC1 als Eingangskanal von PWM
////////////////////// Timer 2 einstellen/////////////
Timer2=0;
T2CON=0b1000000000000000;
PR2=0xffff; ////0xFFFF=65535
IPC1=0b00000001000000000;
T2IF=0;
T2IE=0;
//////////////////// IC1CON einstellen////////////////
IC1CON=0b0000000010000010;//////////////abfallende Flanke erwischen
IPCO=0b0000000001000000;
IC1IF=0; //// Interrupt Flagge ausschalten
IC1IE=1; //// Interrupt Flagge ausschalten
//////////////////////////////////////////////////////
SPI1STAT=0b1000000000000000;
SPI1CON=0b0000000000111111;
//////////////////// Hauptprogramm anlaufen///////////
do {
A=0; //// Eine Konstante stellen um die Periode von PWM zu rechnen
x=0; //// Eine Konstante stellen um die PWM zu rechnen
IC1IF=0; //// Flagge ausschalten
IC1IE=1; //// Interrupt aufrufbar
for (i=0;i<=335;i++){}
for (i=0;i<=335;i++){}
x=1;
IC1IF=0;
IC1IE=1;
for (i=0;i<=3350;i++){}
TMR2=0; //// Timer2 zurueck zu Null setzen
IC1IE=0; //// Interrupt ausschalten
//////////////// PWM Signalen ausrechnen///////////
PWMX=P; //// Zeit von PWM
A=Q; //// Zeit von Periode
PWMX=PWMX/A; //// originale PWM ausrechnen
A=0; //// A zurueck setzen
Te_3=(PWMX-0.32)/(0.0047); //// PWM Signal ausrechnen
Te_1=Te_3/10; ////die Zahl von der Zehner Stelle ausrechnen
Te_2=Te_3-Te_1*10; ////die Zahl von der Einer Stelle ausrechnen
temp=SPI1BUF;
for (i=0;i<=4000;i++){
}
SPI1BUF=0x80;
temp=SPI1BUF;
for (i=0;i<=4000;i++){
}
SPI1BUF=84; //////T
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=0x81;
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=101; /////e
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=0x82;
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=109; /////m
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=0x83;
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=112; /////p
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=0x84;
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=61; /////=
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=0x85;
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=127; ///// leerzeichen
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=0x86;
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=Te_1+48; /////Zehner Stelle
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=0x87;
temp=SPI1BUF;
for(i=0;i<=4000;i++){
}
SPI1BUF=Te_2+48; /////Einer Stelle


if (Te_1>4){ //// wenn Temp. groesse als 40 Grad
for (j=0;j<=60000;j++){
TRISB=0; //// Luefter mit PORTB8 verbinden
PORTB=0b100000000; //// RB8 einschalten
}
}
}
while (Te_1<=6); //// wenn die Temp. groesse als 60 Grad
for (m=0;m<=60000;m++){
PORTB=0; //// PORTB ausschalten
}
T2IF=0;
}
void interrupt IC1(void) @0x16{
if (x==0){
IC1CON=0b0000000010000000;
if (IC1CON==0b0000000010000011){
TMR2=0;
T2CON=0b1000000000000000;
IC1CON=0b0000000010000000;
IC1CON=0b0000000010000010;
IC1IF=0;
}
else{
IC1IE=0;
T2CON=0;
for (i=0;i<=4000;i++){}
P=IC1BUF;
IC1CON=0b0000000010000000;
IC1CON=0b0000000010000011;
}
if (x==1){
T2CON=0;
for (i=0;i<=4000;i++){}
Q=IC1BUF;
TMR2=0;
IC1CON=0b0000000010000000;
T2CON=0b10000000000000000;
IC1IF=0;
}
}

望热心大虾不吝指教。

發表於: 2009/10/22 7:09
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

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

教育訓練中心

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