![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
#1 |
|
Trưởng lão PIC bang
|
dsPIC Tutorial 4-Module UART và I2C
Tutorial 4 cho dsPIC, viết bằng ASM30 lẫn C30, giới thiệu các module UART và I2C (chế độ master). Các ví dụ về module UART thực hiện giao tiếp với máy tính. Các ví dụ về module I2C thực hiện giao tiếp với vi mạch thời gian thực DS1307.
Tập tin "Vidu4.zip" gồm các tập tin nguồn hợp ngữ và .hex. Tập tin "Vidu4C30.zip" gồm các tập tin nguồn C và .hex. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
#2 |
|
Nhập môn đệ tử
Tham gia ngày: Aug 2005
Bài gửi: 3
: |
anh nam ơi , em đã nạp thử chương trình của anh . NHưng khi hiển thị trên máy tính toàn kí tự lạ thôi , không ra được chữ hello . Anh tự lập trình chương trình nhận trên máy ạ . Cách thức nhận như thế nào hả anh ..
|
|
|
|
|
|
#3 | |
|
Trưởng lão PIC bang
|
Trích:
Bạn kiểm tra lại xem cấu hình của Terminal đã phù hợp hay chưa. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
|
#4 |
|
Nhập môn đệ tử
Tham gia ngày: Aug 2005
Bài gửi: 3
: |
cấu hình truyền nhận em chọn baud rate = 38400 bps (mắc lỗi 0,16% ở tốc độ truyền này ). Nhưng khi em dùng chương trình truyền 1 số từ PC và gửi trả lên PC . Chỉ khi gửi các chữ số xuống thì nhận lại đúng 100% còn khi gửi các kí tự , chữ cái thì bị trả về giá trị sai hết.
|
|
|
|
|
|
#5 | |
|
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
|
#6 |
|
Đệ tử 6 túi
Tham gia ngày: Mar 2006
Bài gửi: 129
: |
Anh Nam ơi, trong phần i2c hàm read_i2c sau khi set bit RCEN anh gọi wait_i2c và sau khi send ack a cũng gọi wait_i2c. Em sử dụng trên dspic33fj256GP710 thì bị treo 2 chổ đó. Em bỏ đi thì không bị treo nữa.
Anh giải thích dùm em chổ này. |
|
|
|
|
|
#7 | |
|
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
|
#8 |
|
Đệ tử 6 túi
Tham gia ngày: Mar 2006
Bài gửi: 129
: |
Cái này em có sửa rồi đúng với thanh ghi cũng như cờ ngắt, hàm wait_i2c() hoạt động bình thường, hàm write_i2c() gọi wait_i2c() vẫn chạy được khi em xuất dữ liệu ra nhưng read_i2c() thì bị treo
|
|
|
|
|
|
#9 | |
|
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 thay đổi nội dung bởi: namqn, 25-10-2007 lúc 12:56 AM. |
|
|
|
|
|
|
#10 |
|
Đệ tử 6 túi
Tham gia ngày: Mar 2006
Bài gửi: 129
: |
Code em viết trong file .h. Dựa vào TUT của anh bỏ đi một số phần kiểm tra cờ.
|
|
|
|
|
|
#11 |
|
Đệ tử 1 túi
Tham gia ngày: Nov 2008
Bài gửi: 19
: |
bác nào giúp em với, em viết chương trình gửi kí tự lên PC, và từ PC gửi xuống 30F4011, nhưng đều ra các kí tự là, %!@&....
code nhận dữ liệu từ PC Code:
#include "p30f4011.h"
#include "uart.h"
_FOSC(CSW_FSCM_OFF & FRC_PLL4); //Clock = 32 MHz
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI & PWMxH_ACT_HI);
_FGS(CODE_PROT_OFF);
//Chuong trinh cau hinh UART
//------------------------------------------------------------------------------
void Uart_Setup(void)
{
unsigned int baudvalue,U2MODEvalue,U2STAvalue;
CloseUART2();
ConfigIntUART2( UART_RX_INT_EN & UART_RX_INT_PR6 &
UART_TX_INT_DIS & UART_TX_INT_PR1 ) ;
baudvalue = (((7370000/9600)/16)-1); //baud=9600 bps ==> nhaapj vaof baudvalue = (((7370000/9600)/16)-1) voi Fcy = 7.37 Mhz,
U2MODEvalue = UART_EN & UART_IDLE_STOP & UART_RX_TX &
UART_DIS_WAKE & UART_DIS_LOOPBACK &
UART_DIS_ABAUD & UART_NO_PAR_8BIT &
UART_1STOPBIT;
U2STAvalue = UART_INT_TX &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE &
UART_INT_RX_CHAR &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
OpenUART2(U2MODEvalue, U2STAvalue, baudvalue);
}
//========================== UART1 Interrupt Sub-Routine =====================//
void __attribute__((__interrupt__)) _U2RXInterrupt(void)
{
_U1RXIF = 0; //Xoa co ngat
lcd_putstr(ReadUART2()); //xuat chuoi ra LCD
}
//Chuong trinh chinh
//------------------------------------------------------------------------------
void main()
{ ADPCFG = 0xFFBF; //Cac chan khac la digital, chan AN0/RB0 la analog
_TRISE3 = 0;
Uart_Setup();
Init_PORTS_LCD(); //Khoi tao cac cong I/O
Init_LCD(); //Khoi tao LCD
lcd_putstr("TOC DO =");
while (1)
{
_LATE3=1;
Delay_ms(250); //Vong lap chinh
_LATE3=0;
Delay_ms(250);
}
}
Code:
#include "p30f4011.h"
_FOSC(CSW_FSCM_OFF & FRC_PLL4); //Clock = 32 MHz
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI & PWMxH_ACT_HI);
_FGS(CODE_PROT_OFF);
//Cac prototype cho cac chuong trinh con
void Init_TMR1(void);
void Init_UART2_Module(void);
//Bang hang so trong ROM
unsigned char Chuoi1[] = "Xin chao!";
//Cac bien toan cuc
unsigned char flag, idx;
//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {
Init_TMR1(); //Khoi tao Timer 1
Init_UART2_Module(); //Khoi tao module UART1
flag = 0; //Xoa co bao het thoi gian cho
while (1) {
if (flag) { //Cho den khi het thoi gian cho
idx = 0;
while (Chuoi1[idx]) { //Neu chua het chuoi thi
U2TXREG = Chuoi1[idx++]; //Xuat tiep 1 ky tu
while (!U2STAbits.TRMT); //Cho den khi truyen xong ky tu
};
flag = 0;
};
};
}
//Chuong trinh con khoi tao module UART1
void Init_UART2_Module(void) {
U2MODE = 0x8000; //Main I/O, 8-bit, no parity, 1 stop bit
U2STA = 0x0400; //bit10=UTXEN
U2BRG = (((7370000/9600)/16)-1); //38400 bps @ Fcy = 8 MHz
}
//Chuong trinh con khoi tao Timer 1, tran sau moi 1 giay o muc xung 8 Mips
void Init_TMR1(void) {
TMR1 = 0; //Xoa so dem trong TMR1
PR1 = 0x7A12; //Nguong tran la 1 giay tuong ung voi clock = 32 MHz
_T1IF = 0; //Xoa co ngat cua Timer 1
T1CON = 0x8030; //Dung fcy lam clock, prescale = 1:256
_T1IE = 1; //Cho phep ngat khi Timer 1 tran
}
//Chuong trinh xu ly ngat Timer 1
void _ISR _T1Interrupt(void) {
_T1IF = 0; //Xoa co ngat
flag = 1; //Bat co cho phep xuat chuoi ky tu
}
Code:
Private Sub Form_Load()
With MSComm1
.Settings = "9600,N,8,1"
.CommPort = 1
.RThreshold = 1
.SThreshold = 0
.InputMode = comInputModeText
.InputLen = 0
.Handshaking = comNone
.InBufferSize = 1024
.OutBufferSize = 1024
.PortOpen = True
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
' Dong cong
MSComm1.PortOpen = False
End Sub
Private Sub Command1_Click()
MSComm1.Output = Text1.Text
End Sub
Private Sub MSComm1_OnComm()
If (MSComm1.CommEvent = comEvReceive) Then
Text2.Text = Text2.Text + MSComm1.Input
End If
End Sub
|
|
|
|
|
|
#12 | |
|
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
|
#13 |
|
Đệ tử 1 túi
Tham gia ngày: Nov 2008
Bài gửi: 19
: |
|
|
|
|
|
|
#14 | |
|
Trưởng lão PIC bang
|
Trích:
Hơn nữa, để con số tính toán cho baudvalue được tròn trịa thì nên dùng 7372800 thay vì 7370000 trong công thức. Bạn thử lại xem. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
|
#15 |
|
Đệ tử 1 túi
Tham gia ngày: Nov 2008
Bài gửi: 19
: |
em thử lại 7372800 cũng ko dc bac ah
|
|
|
|
![]() |
| Tags |
| dspic30f i2c, dspic30f uart, i2c, rtc |
|
|
Similar Threads
|
||||
| Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
| dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 92 | 19-02-2017 11:15 PM |
| dsPIC Tutorial 2-Các kỹ thuật cơ bản | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 33 | 17-10-2013 11:09 PM |
| dsPIC Tutorial 5-Module ADC và MCPWM | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 83 | 12-09-2013 10:33 PM |
| dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 16 | 22-08-2012 12:35 AM |
| Alternate UART pin??? | alexjp | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 1 | 02-05-2006 06:26 PM |