![]() |
|
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 |
Đệ tử 1 túi
Tham gia ngày: Apr 2009
Nơi Cư Ngụ: Viet Nam
Bài gửi: 12
: |
Anh Nam cho em hỏi. Em khai báo _FBORPOR(PBOR_OFF & MCLR_EN); thì truyền lên PC rất nhiễu. Nhưng khi khai báo _FBORPOR(PBOR_OFF & MCLR_DIS); thì lại truyền rất chuẩn. Anh có thể nêu qua 2 khai báo này được không ạ?
Thanks, |
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
MCLR là viết tắt của Master Clear (Reset), tức là chức năng reset bộ xử lý khi chân MCLR được đặt ở trạng thái tích cực (mức logic '0'). Việc nhiễu khác nhau ở hai cấu hình của bạn thì vẫn chưa có đủ thông tin để góp ý. Bạn dùng sơ đồ nguyên lý như thế nào (chân MCLR của bạn được thiết kế ra sao, vì trong hai cấu hình thì chỉ có chức năng của chân MCLR là khác nhau)? 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 |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 4 túi
Tham gia ngày: Jan 2008
Bài gửi: 68
: |
Uart .
Thầy Nam và các anh chị trong diễn đàn cho em hỏi về một số liên quan tới UART của dsPIC.
Em đang làm đồ án môn học liên quan tới PID trên máy tính rồi truyền giá trị xuống cho dsPIC. Giá trị em muốn truyền là thông số cho PDC1 và PDC2 (hai thanh ghi thiết lập duty_cycle trong module PWM )cho 2 bánh của robot. hai giá trị em gửi xuống cho dsPIC có tầm từ 0 tới 1599. nên cho em hỏi là có cách nào truyền từ máy tính xuống mà 1 lúc truyền được 16 bit data không ?. em đang làm việc với VC++. em chỉ thấy 1 frame truyền được 8 bit data mà chưa thấy truyền 1 frame 16 bits data . Nếu không truyền được 16 bits data /frame thì bài toán vừa nêu em định làm như sau : Với giá trị cho thanh ghi PDC1 : em truyền byte đầu (8 bits thấp) cho dsPIC , lưu giá trị này vào biến có tên là temp1 , sau đó truyền tiếp byte thứ 2 (8 bits cao) và lưu vào temp2 , sau đó thực hiện phép tính : PDC1 = (temp2<<8) + temp1; tương tự với giá trị truyền cho PDC2. Nhưng em vẫn chưa biết cách thiết lập ngắt cho module UART khi nó nhận xong 4 byte (em muốn nhận xong 4 byte rồi ngắt). và lấy 4 byte vừa nhận ở những thanh ghi nào vì em chỉ thấy có 1 thanh ghi lưu giá trị mà dsPIC nhận thôi ah ? Cảm ơn thầy và các anh chị nhiều . Trân trọng !.
__________________
Không có gì là Không thể, chỉ một điều Không thể khi bạn nghĩ nó Không thể !. Bạn có thể nếu bạn tin bạn có thể !. |
![]() |
![]() |
![]() |
#4 | |
Trưởng lão PIC bang
|
Trích:
Để lấy các byte dữ liệu khi có ngắt, bạn liên tiếp đọc thanh ghi U1RXREG (giả sử bạn đang dùng module UART1). Vì các module UARTx sử dụng bộ đệm FIFO (First-In First-Out), nên các byte được nhận trước sẽ được đọc ra trước. Cụ thể, ví dụ từ máy tính bạn lần lượt gửi các giá trị a, b, c, và d đến dsPIC. Sau khi nhận được giá trị d, dsPIC sẽ tạo ra ngắt, và khi xử lý ngắt, nếu bạn liên tiếp đọc thanh ghi U1RXREG thì bạn sẽ lần lượt nhận được các giá trị a, b, c, và d. 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 |
|
![]() |
![]() |
![]() |
#5 | |
Đệ tử 4 túi
Tham gia ngày: Jan 2008
Bài gửi: 68
: |
Trích:
Trân trọng !.
__________________
Không có gì là Không thể, chỉ một điều Không thể khi bạn nghĩ nó Không thể !. Bạn có thể nếu bạn tin bạn có thể !. |
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 2 túi
Tham gia ngày: Sep 2008
Nơi Cư Ngụ: Tp. HCM
Bài gửi: 38
: |
Hỏi về giao tiếp I2C với ROM 24c512
Em có đoạn code như sau, với ý tưởng là lưu một byte vô ROM (0x66) vào địa chỉ 0001, sau đó đọc lại byte đó và gởi ra cổng nối tiếp, nhưng em không đạt kết quả (không gởi ra cổng nối tiếp được gì)
Code:
int main(void) { Init_PORTS(); //Khoi tao cac cong I/O Init_I2C(); //Khoi tao module I2C Init_UART1_Module(); Init_TMR1(); //Buoc 1, tao dieu kien START, cho hoat dong I2C hoan tat _SEN = 1; Wait_I2C(); //Cho hoat dong I2C hoan tat //Buoc 2, xuat dia chi cua ROM voi thao tac ghi, cho va kiem tra ACK Write_I2C(0xA0); //Xuat dia chi cua ROM, sap ghi vao ROM Wait_I2C(); //Cho hoat dong I2C hoan tat if (_ACKSTAT) I2C_Fail(); //Neu NACK thi dung chuong trinh //Buoc 3, xuat dia chi cua thanh ghi dich (target), cho va kiem tra ACK Write_I2C(0x00); //Xuat dia chi cao Wait_I2C(); //Cho hoat dong I2C hoan tat if (_ACKSTAT) I2C_Fail(); //Neu NACK thi dung chuong trinh Write_I2C(0x01); //xuat dia chi thap Wait_I2C(); //Cho hoat dong I2C hoan tat if (_ACKSTAT) I2C_Fail(); //Neu NACK thi dung chuong trinh Write_I2C(0x66); //Xuat noi dung cua thanh ghi 0x0000 Wait_I2C(); //Cho hoat dong I2C hoan tat if (_ACKSTAT) I2C_Fail(); //Neu NACK thi dung chuong trinh _PEN = 1; //Tao ra dieu kien STOP Wait_I2C(); //Cho hoat dong I2C hoan tat // doc du lieu tu ROM va goi ra cong RS232 _RSEN = 1; //Tao ra dieu kien START Wait_I2C(); //Cho hoat dong I2C hoan tat //Buoc 2, ghi dia chi cua ROM, sap thao tac ghi vao ROM Write_I2C(0xA0); if (_ACKSTAT) I2C_Fail(); //Neu NACK thi xu ly loi Write_I2C(0x00); if (_ACKSTAT) I2C_Fail(); //Neu NACK thi xu ly loi Write_I2C(0x01); if (_ACKSTAT) I2C_Fail(); //Neu NACK thi xu ly loi _RSEN = 1; //Tao ra dieu kien RESTART Wait_I2C(); //Cho hoat dong I2C hoan tat Write_I2C(0xA1); //Ghi dia chi cua ROM, chuan bi doc tu ROM if (_ACKSTAT) I2C_Fail(); //Neu NACK thi xu ly loi temp = Read_I2C(); _PEN=1; Wait_I2C(); U1TXREG = temp; while(!U1STAbits.TRMT); // cho hoan tat goi byte. while(1) Nop(); } //Chuong trinh con khoi tao cac cong I/O void Init_PORTS(void) { LATC = 0xFFFF; //Tat cac LED (anode chung) noi vao cong E TRISC = 0; //LED noi vao RC5 TRISG=0; } //Chuong trinh con khoi tao module I2C void Init_I2C(void) { I2CCON = 0x8200; //bit15=I2CEN, bit9=DISSLW (tat Slew Rate //Control cho cac toc do baud khac 400 kbps) I2CBRG = (((Fcy/baud) - (Fcy/1111111))-1); } //Chuong trinh con xuat 1 byte qua module I2C void Write_I2C(unsigned char d) { I2CTRN = d; } //Chuong trinh con cho hoat dong 00Master I2C sau cung hoan tat void Wait_I2C(void) { while (!_MI2CIF); _MI2CIF = 0; } //Chuong trinh con xu ly khi hoat dong I2C bi loi void I2C_Fail(void) { _PEN = 1; //Tao ra dieu kien STOP Wait_I2C(); //Cho hoat dong I2C hoan tat LATC &= 0x0000; //Bat LED noi vao RE0 de bao loi U1TXREG = 70; while (1); //Dung chuong trinh tai day } unsigned char Read_I2C(void) { unsigned char d; _RCEN = 1; //Cho phep nhan byte Wait_I2C(); //Cho hoat dong I2C hoan tat d = I2CRCV; //Lay byte da nhan dat vao d _ACKEN = 1; //Ghi bit ACK/NACK ra I2C bus Wait_I2C(); //Cho hoat dong I2C hoan tat return d; //Tra byte da doc ve chuong trinh goi } Các hàm đọc/ghi I2C em là tương tự TUT4 của anh namqn. Fcy của em là 7372800, baud của I2C = 100khz. Các chân A0, A1, A2 của ROM em đã nối mass, nên địa chỉ của ROM là A0(ghi) và A1(đọc) Module UART thì chắc ko sai, vì em đã thử các ví dụ khác, truyền và nhận rất tốt, tốc độ baud cũng ko sai, em đã kiểm tra kỹ, hơn nữa em nghi nếu sai tốc độ baud thì nó sẽ nhận được các ký tự lạ, đằng này không nhận được gì trên máy tính. ROM thì chắc ko chết, vì em đã mua một con mới về thử ![]() Vậy có ai biết xin góp ý giúp em, hoặc có một ví dụ nào đó cụ thể về đọc ghi ROM 24c512 thì cho em xin để tham khảo, em cám ơn rất nhiều. thay đổi nội dung bởi: npbaoduy, 30-10-2009 lúc 09:56 PM. |
![]() |
![]() |
![]() |
#7 |
Trưởng lão PIC bang
|
Không thể ghi vào 24C512 rồi đọc ra ngay đâu bạn, cần có khoảng 5 ms để EEPROM hoàn tất thao tác ghi. Sau khi chờ tối thiểu 5 ms, bạn tạo điều kiện START chứ không dùng RESTART được nhé.
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 |
![]() |
![]() |
![]() |
Tags |
dspic30f i2c, dspic30f uart, i2c, rtc |
|
|
![]() |
||||
Ðề 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 |