Thông báo

Collapse
No announcement yet.

Nhờ các pro giúp phần code timer/counter của mạch đo điện dung dùng 8051

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

  • Nhờ các pro giúp phần code timer/counter của mạch đo điện dung dùng 8051

    Tình hình là e mới học vđk, e muốn làm một cái mạch đo điện dung của tụ.
    cái mạch của e như sau:
    Click image for larger version

Name:	aaaaaaa.PNG
Views:	1
Size:	33.1 KB
ID:	1412325
    em định đếm số xung vào trong 1s => f, sau đó tính toán ngược lại tụ C
    các bác chỉ dùng em phần code để làm sao sau khi đếm được số xung làm sao hiển thị trên LCD. phần này e dốt quá , trong sách viết cũng sơ sài nữa, đọc mãi ko hiểu.

  • #2
    nghĩa là bạn chỉ thắc mắc cách hiển thị lên LCD thôi hả, vs LCD loại thông dụng là 16x2, nó có 3 chân dk và 1 buss 8line dữ liệu
    3 chân dk bao gồm:
    LCD_RW: read/write cho phép ghi lên hoặc đọc dữ liệu từ lcd ra, ghi =0, đọc =1
    LCD_RS: đk chế độ ghi, LCD có 2 chế độ đó là ghi lệnh và ghi kí tự,ghi lệnh thực hiện các lệnh do nhà sản xuất quy định:vd xóa màn hình, bật tắt con trỏ, ghi kí tự là làm hiển thị các kí tự lên màn hình LCD
    LCD_EN: enable cho phép đọc thực hiện các lệnh vs LCD mà ta đã khai báo cho RW vs RS, khi chân này chuyển trạng thái từ mức cao 1 xuống thấp 0 thì nó sẽ thực hiện công việc ta đã khai báo qua RW vs RS và nhận data qua bus 8 line
    vậy từ đó suy ra bạn cần ghi kí tự lên LCD ta sẽ khai báo, RW=0; RS=1; sau đó tạo xung từ 1->0 cho EN. nhưng trước khi ghi kí tự bạn cần 1 số hàm khởi tạo cho LCD trước đã nhé
    Website chính thức đổi địa chỉ website thành
    Mời các bạn ghé thăm !!!

    Comment


    • #3
      cái phần đấy trong sách cũng có ghi nh em loay hoay mãi vẫn ko viết đc code
      chẳng hạn như sau khi đếm đc tần số xung vào f = 1khz, làm sao để lập trình phần tính toán C = 1/{ln2.(R1+2R2).c} rồi hiển thị ra LCD. ( e đang học asm)
      mấy tiền bối có thể cho e 1 vài code ví dụ đc ko? code C cũng đc ạ.
      tks các tiền bối

      Comment


      • #4
        dùng một cái timer để tạo ra thời gian chính xác 1s hoặc 1 phút. đưa cái tần số đó vào ngắt ngoài. đếm số sự kiện có được đó rồi đưa lên máy tính hoặc LCD
        code:
        void initTimer1()
        {
        /* ensure Timer 1 is in reset state */
        T1CON = 0x0020;
        //Prescale = 64, Fosc = 7.373.800Hz => Fin = Fosc/64 = 115.200HZ
        TMR1 = 0;
        /* reset Timer 1 interrupt flag */
        IFS0bits.T1IF = 0;

        /* set Timer1 interrupt priority level to 7 */
        // IPC0bits.T1IP = 4;

        /* enable Timer 1 interrupt */
        IEC0bits.T1IE = 0;

        /* set Timer 1 period register */
        PR1 = 0xffff; // 10ms : 1152
        T1CONbits.TON = 1;
        }
        // ngắt
        void __attribute__((__interrupt__)) _INT0Interrupt(void)
        {
        if(ch1==1)
        {
        _INT0EP = 1; //-
        T1CONbits.TON = 1;
        ch1 = 0;
        }
        else
        {
        T1CONbits.TON = 0;
        _INT0EP = 0; //+
        ch1 = 1;
        if(i<5)
        {
        P1[i] = TMR1;
        TMR1 = 0;
        i++;
        }
        else
        {
        temp1 = (P1[0]+P1[1]+P1[2]+P1[3]+P1[4])/5;
        temp1 = temp1*0.131;
        if(t1<3) t1++;
        else
        {
        if(temp1<181) pulse1= temp1;delay(40);
        t1 = 0;
        }
        P1[0] = P1[1] =P1[2] = P1[3] = P1[4] = 0;
        temp1 = 0;
        i = 0;
        }
        }
        _INT0IF=0;
        }
        //CH3
        code trên được viết cho DSPIC30f2010. code đo xung về từ đó tính toán góc mở thyristor. một đoạn code để bạn có thể hình dung

        Comment


        • #5
          mạch này có sai số nhìu lém........
          có hiệu chỉnh j không đấy

          Comment

          Về tác giả

          Collapse

          ngolinh Tìm hiểu thêm về ngolinh

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

          Collapse

          Đang tải...
          X