PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   interrupt in pic18 (http://www.picvietnam.com/forum/showthread.php?t=892)

littlephoc 26-01-2007 05:32 AM

interrupt in pic18 và CC1000
 
PIN_C0 là chân nhận tín hiệu clock từ chip khác. Mỗi khi có cạnh xuống của chân C0 thì mình truyền 1 bit dữ liệu qua chân C1.
Cho mình hỏi là có interrupt cho cổng input C0 không vậy? nếu không thì có cách nào để solve cho trường hợp này. Xin giúp mình với.
mình đang dùng 18F2620 và giao tiếp với cc1000

falleaf 26-01-2007 07:09 PM

Óe, bạn làm cái này từ đầu à? Viết lại từ driver, đến các layer thấp?

Thế này chết ngắc, lao vao đề tài này... chà... căng... bác nào hướng dẫn bạn vậy?

Chúc vui

littlephoc 26-01-2007 08:56 PM

Việc lập trình để truyền nhận dữ liệu wireless dùng transceiver cc1000 cũng chỉ là step đầu tiên của đề tài. sau đó còn cả 1 chặng đường dài bác ạ. ông GS người Hàn đang hướng dẫn mình. Tuy nhiên cũng toàn là tự mình mày mò thôi, ổng chỉ là người xem xét và đưa ra các lời khuyên cho những idea của mình.
Vì hardware được bên công ty người ta design nên mình chỉ có thể viết soft theo hardware. Mình cũng đề xuất ý kiến là nối tắt chân RC0 với chân RB2 (vì RB0 và RB0 đã được dùng) để dùng INTn của chân này, nhưng chưa được chấp thuận. Hiện tại mình cũng dùng vòng while loop để xử lý và thấy cũng chuối quá.

Problem của mình là việc truyền nhận dữ liệu với CC1000. Bác nào đã có kinh nghiệm với con CC1000 cho mình hỏi về cách thức viết 1 routine cho nó với ạ.

falleaf 26-01-2007 09:47 PM

Nếu bạn học thạc sĩ thì đề tài này làm được. Vì thấy bạn hỏi câu hỏi cơ bản mà lại làm đề tài kiểu này thì đúng là sống dở chết dở.

Bạn nên mô tả kỹ hiện tượng, thì mới có thể giúp bạn được. Còn về thiết kế, công ty thiết kế cũng chỉ vài người, có thể sản phẩm còn đang thử nghiệm... chưa biết được.

Cho nên anyway, thì bạn nên trình bày cụ thể hơn hoạt động tại chân đó, những gì cố định, những gì khôgn cố định, như vậy mọi người mới giúp bạn được.

Chúc vui.

littlephoc 26-01-2007 10:25 PM

Mình nêu vấn đề cụ thể như sau:
chân RC0 = DCLK (input), RC1 = DIO(output)
Theo manual, DCLK pin của CC1000 nên được kết nối đến 1 input pin có thể sinh ra interrupt trên MCU. DIO nên được nối với 1 bi-direction I/O pin.
Ở TX mode, interrupt sẽ được kích hoạt mỗi khi có cạnh xuống của DCLK. Khi interrupt xảy ra, MCU sẽ xuất ra 1 bit dữ liệu cần truyền ra DIO.
Tín hiệu DCLK được điều khiển bởi CC1000
Theo thiết kế phần cứng được dùng của 1 manual, chân DCLK được nối với pin RB0. Bởi có thể dùng INTn để kích hoạt interrupt ngoài.
Theo thiết kế phần cứng hiện tại của thiết bị mình đang dùng thì chân DCLK được nối với RC0. Mà mình đọc manual thì không thấy nói interrupt trên chân RC0.
Vậy cho nên mình phải dùng while loop để detect cạnh xuốgn tín hiệu của DCLK. Xin hỏi còn cách nào khác không ?
(Nói dài quá mà cuối cùng hỏi 1 câu ngắn ngủn)

littlephoc 26-01-2007 10:32 PM

falleaf ơi, chuyện học master hay học cái gì sao lại ảnh hưởng đến việc làm được hay khôgn được đề tài này thế bác ?
Mình cũng đagn chập chững từng bước đầu tiên với lập trình cho vi điều khiển. Trước giờ chỉ biết những hệ thống to đùng thôi :(

namqn 26-01-2007 10:37 PM

Trong nhiều cách khả dĩ để cải thiện tình hình, em nên dùng bit-banging cho các chân dùng cho cấu hình (PDATA, PCLK) vì clock do vi điều khiển tạo ra, và dùng các chân của mô đun SPI/I2C cho phần trao đổi dữ liệu, vì clock của phần này do CC1000 tạo ra. Khi đó có thể dựa vào cơ chế xử lý ngắt có sẵn của PIC để đáp ứng với mỗi xung clock.

Nếu dùng các chân ngắt ngoài của PIC, hay dùng cách trên thì đều phải thay đổi thiết kế phần cứng. Nếu có thể thì tự thay đổi trên một prototype, và đề xuất thiết kế đó cho bên phần cứng nếu nó đã chạy tốt.

Thật lạ là người thiết kế phần cứng không hiểu những yêu cầu này, và thiết kế phần cứng theo kiểu tùy ý, và để gánh nặng lại cho người lập trình xử lý.

Thân,

littlephoc 26-01-2007 11:04 PM

oh, anh Nam cho 1 idea thật hữu ích trong trường hợp này. Cảm ơn anh nhiều.

littlephoc 17-04-2007 02:58 AM

Hiện em đã cắt đường nối từ cổng DCLK của CC1000 đến PIN_C0 và nối DCLK với PIN_B0.
Cho hỏi 1 đoạn mã CCS (đầy đủ) để dùng interrupt cấp ưu tiên HIGH cho ngắt ngoài (#INT_EXT FAST) nhận tín hiệu ở cổng RB0 ạ?
xin cảm ơn nhiều.

namqn 18-04-2007 01:27 AM

Trích:

Nguyên văn bởi littlephoc (Post 8267)
Hiện em đã cắt đường nối từ cổng DCLK của CC1000 đến PIN_C0 và nối DCLK với PIN_B0.
Cho hỏi 1 đoạn mã CCS (đầy đủ) để dùng interrupt cấp ưu tiên HIGH cho ngắt ngoài (#INT_EXT FAST) nhận tín hiệu ở cổng RB0 ạ?
xin cảm ơn nhiều.

Cú pháp rất đơn giản, em xem ví dụ trang 88 trong tài liệu tham khảo (Reference Manual) của trình biên dịch CCS C (hướng dẫn về #INT_xxxx), phiên bản tháng 01/2007. Hãy tự đánh giá xem nhất thiết cần dùng FAST hay chỉ cần dùng HIGH.

Thân,


Múi giờ GMT. Hiện tại là 07:17 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam