Thông báo

Collapse
No announcement yet.

PIC 16F88 - Sử dụng dao động nội.

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • PIC 16F88 - Sử dụng dao động nội.

    Tôi mới thực hiện một thiết kế với 16F88 để tiết kiệm thạch anh tôi dùng dao động nội trong CCS như sau:

    #include <16F88.H>
    #include <ctype.h>
    #fuses INTRC_IO,NOWDT
    #use delay(clock=8000000)
    #use rs232(baud=19200,xmit=PIN_B5, rcv=PIN_B2,enable=PIN_B4,errors,stream=HOSTPC)

    #define TRIS_A 0xFF //0b11111111 //Tat ca la dau vao
    #define TRIS_B 0xC4 //0b11000100

    #define RTCC_RVALUE 6 //=256 - ((8000000/4)/RTCC_DIV_8)/1000 (Ngat 1000 lan/giay)

    #define DO2 PIN_B0 //Led

    int16 LedTimeout;

    void InitPar()
    {
    set_tris_a(TRIS_A);
    set_tris_b(TRIS_B);
    }

    void InitRTCC(void)
    {
    set_rtcc(RTCC_RVALUE); // Khoi tao timer0
    setup_counters (RTCC_INTERNAL, RTCC_DIV_8);
    enable_interrupts (INT_RTCC);
    }

    #INT_RTCC
    clock_isr()
    //Ngat nay se tran sau 1000us
    {
    disable_interrupts(INT_RTCC);

    if (++LedTimeout > 1000)
    {
    output_toggle(DO2);
    LedTimeout = 0;
    }

    set_rtcc(RTCC_RVALUE);
    enable_interrupts(INT_RTCC);
    }
    ...
    RA6, RA7 tôi để lửng. Bình thường LED nhấp nháy đúng chu kỳ sáng 1 giây / tắt 1 giây. Khi tôi đưa tay lại gần hoặc trạm vào chân RA6, RA7 thì chân đầu ra DO2 chỉ chớp xuống 0 rồi lên 1 ngay (không giữ được ở trạng thái 0 đủ thời gian 1 giây).

    Tôi nghi rằng việc đặt #fuses của tôi chưa đủ dẫn đến chưa chuyển được chân RA6, RA7 sang mode IO nên vẫn bị ảnh hưởng đến hoạt động của chíp.

    Bạn nào biết vấn đề này xin chỉ giúp cách giải quyết.

    Chân thành cảm ơn.
    Dùng hàng VN - Giữ lại USD cho đất nước.

  • #2
    PIC 16F88 - Dùng chung #INT_RB và #INT_RDA

    OK, Tự hỏi rồi trả lời luôn.

    Sau một buổi tối loay hoay cũng tìm ra vấn đề. Nhiễu là có thật, khi vừa bật điện nếu tôi đưa tay lại gần lưng chíp là vấn đề xuất hiện ngay. Sau khi thực hiện một request truyền thông từ máy tính và chíp gửi trả lời thì vấn đề không còn nữa. Vẫn chưa lý giải được chính xác bản chất là gì?

    Trong thiết kế của tôi dùng cả ngắt Serial Receive Data và ngắt Port Change (port B.4-B.7). RB.6 và RB.7 dùng cho đọc tín hiệu Weigand, RB.4 và RB.5 dùng cho truyền thông RS485. Có thể rằng xung đột chính là ở chỗ này, tôi cũng chưa kiểm chứng được khi truyền tín hiệu RS485 trên 2 chân RB.4 và RB.5 có phát sinh ngắt Port Chage hay không? Bạn nào có kinh nghiệm việc này trả lời giúp nhé.

    Tình huống của tôi được giải quyết bằng việc sau khi khởi tạo ngắt toàn cục tôi chủ động gửi lên máy tính một chuỗi rồi chương trình mới vào vòng lặp xử lý chính.
    Last edited by sidesignvn; 02-10-2008, 10:13.
    Dùng hàng VN - Giữ lại USD cho đất nước.

    Comment


    • #3
      PIC 16F88 - Sử dụng truyền thông RS485.

      Tôi đặt như sau để dùng RS485 mode:
      #use rs232(baud=19200,xmit=PIN_B5, rcv=PIN_B2,enable=PIN_B4,errors,stream=HOSTPC)
      và dùng MAX485 để chuyển đổi nhưng hiện tại vẫn đang còn vấn đề là truyền từ PC xuống thì chính xác nhưng khi chíp trả lời rất hay bị lỗi ký tự. Không hiểu có vấn đề gì việc điều khiển chân RE, DE không?.

      Bạn nào có kinh nghiệm về sử dụng RS485 giúp tôi nhé.
      Attached Files
      Dùng hàng VN - Giữ lại USD cho đất nước.

      Comment


      • #4
        Nếu bạn không sử dụng chân nào nên cho nó làm đầu ra và clear nó xuống 0 xem sao.

        Comment

        Về tác giả

        Collapse

        sidesignvn Kỹ sư Điện - Tự động hóa. Tốt nghiệp Bách Khoa Hà nội năm 2000. Tìm hiểu thêm về sidesignvn

        Bài viết mới nhất

        Collapse

        Đang tải...
        X