Mình hiện đang học PIC. giảng viên yêu cầu phải tạo ra một sóng hình sin bằng PIC 18f46k20 và thang điện trở "R2R ladder". Mình đã làm xong mạch và thử lập trình cho PIC chạy. Khi viết code C cho PIC, chạy thử đoạn code thì cho ra các giá trị rất đúng. Nhưng khi nạp vào chip thì kết quả ko được như mong muốn. Đoạn sóng nhận được hình Sin nhưng sai số rất nhiều, nhiễu ...
ko biết code mình viết ra có đúng ko, bạn nào có thể kiểm tra giúp mình với
đây là đoạn code mình viết ra :
#include "p18f46k20.h"
#include "delays.h"
#include "math.h"
/** D E C L A R A T I O N S *******************************************/
void main (void)
{
int i, j, x;
float k;
overlay unsigned char value[256];
TRISB = 0b00000000;
LATB=0;
for (i=0;i<=255;i++)
{ value[i]= i/255; // tạo ra một chuỗi các giá trị của hàm Sin để so sánh
}
while (1)
{
for(j=0;j<=255;j++)
{
k = ((sin((float)j/255*2*3.14159)+1)/2); // tạo sóng Sin
for (x=0;x<=255;x++){ // so sánh với giá trị của chuỗi
if(k>=value[x] && k<= ((value[x]+value[x+1])/2))
{//k=value[x];
k=x;
break;}
else
{//k=value[x+1];
k=x+1;
break;}
}
LATB=k; //nạp giá trị
Delay10TCYx(150);
}
}
}
ko biết code mình viết ra có đúng ko, bạn nào có thể kiểm tra giúp mình với
đây là đoạn code mình viết ra :
#include "p18f46k20.h"
#include "delays.h"
#include "math.h"
/** D E C L A R A T I O N S *******************************************/
void main (void)
{
int i, j, x;
float k;
overlay unsigned char value[256];
TRISB = 0b00000000;
LATB=0;
for (i=0;i<=255;i++)
{ value[i]= i/255; // tạo ra một chuỗi các giá trị của hàm Sin để so sánh
}
while (1)
{
for(j=0;j<=255;j++)
{
k = ((sin((float)j/255*2*3.14159)+1)/2); // tạo sóng Sin
for (x=0;x<=255;x++){ // so sánh với giá trị của chuỗi
if(k>=value[x] && k<= ((value[x]+value[x+1])/2))
{//k=value[x];
k=x;
break;}
else
{//k=value[x+1];
k=x+1;
break;}
}
LATB=k; //nạp giá trị
Delay10TCYx(150);
}
}
}
Comment