Em đang làm một bài tập nhỏ về ghép nối máy tính với vi xử lý: đo nhiệt độ từ LM335, xử lý trên Psoc rồi gửi dữ liệu lên máy tính. Trong máy tính em sử dụng 3 module:
1.Khuyếch đại PGA, gain=1
2.ADC 12 bit. Tần số chọn 1.5MHz.
3.Bộ truyền TX8. Tần số chọn là 96000 Hz (sysClk/250) do cứ 10 xung clock thì truyền được 1 bit và em chọn tốc độ truyền là 9600 bps.
Đầu vào Psoc theo chân 4(P1.0) đặt “High Z”. Đầu ra chân 26(P0.4) để “strong”.
Đây là chương trình.
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include "stdlib.h"
unsigned int iData;
float oData1;
void main()
{
BYTE oData2;
TX8_1_Start(TX8_1_PARITY_NONE);
PGA_1_Start(PGA_1_MEDPOWER);
ADCINC12_1_Start(ADCINC12_1_MEDPOWER);
ADCINC12_1_GetSamples(0);
M8C_EnableGInt;
while(1)
{
if(ADCINC12_1_fIsDataAvailable() == 0); // Loop until value ready
{
iData=ADCINC12_1_iGetData(); // Get ADC result
ADCINC12_1_ClearFlag(); // Clear ADC flag
oData1 = 5000*(iData + 2048)/4095;
oData2 = (BYTE)(oData1-2731)/10;
TX8_1_PutSHexByte(oData2);
TX8_1_PutCRLF();
}
}
}
Còn đây là hình vẽ.
Không hiểu sao máy tính của em lại không nhận được. Mạch đo nhiệt độ thì ok rồi. Có bác nào biết giúp em với.
1.Khuyếch đại PGA, gain=1
2.ADC 12 bit. Tần số chọn 1.5MHz.
3.Bộ truyền TX8. Tần số chọn là 96000 Hz (sysClk/250) do cứ 10 xung clock thì truyền được 1 bit và em chọn tốc độ truyền là 9600 bps.
Đầu vào Psoc theo chân 4(P1.0) đặt “High Z”. Đầu ra chân 26(P0.4) để “strong”.
Đây là chương trình.
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include "stdlib.h"
unsigned int iData;
float oData1;
void main()
{
BYTE oData2;
TX8_1_Start(TX8_1_PARITY_NONE);
PGA_1_Start(PGA_1_MEDPOWER);
ADCINC12_1_Start(ADCINC12_1_MEDPOWER);
ADCINC12_1_GetSamples(0);
M8C_EnableGInt;
while(1)
{
if(ADCINC12_1_fIsDataAvailable() == 0); // Loop until value ready
{
iData=ADCINC12_1_iGetData(); // Get ADC result
ADCINC12_1_ClearFlag(); // Clear ADC flag
oData1 = 5000*(iData + 2048)/4095;
oData2 = (BYTE)(oData1-2731)/10;
TX8_1_PutSHexByte(oData2);
TX8_1_PutCRLF();
}
}
}
Còn đây là hình vẽ.
Không hiểu sao máy tính của em lại không nhận được. Mạch đo nhiệt độ thì ok rồi. Có bác nào biết giúp em với.
Comment