mTouch dùng phương pháp CVD

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • qloi
    Đệ tử 3 túi
    • Sep 2010
    • 55

    #1

    mTouch dùng phương pháp CVD

    Các cao nhân có ai đã làm touch button theo phương pháp CVD sủ dụng ADC hoàn chỉnh cho mình hỏi đoạn code mình viết bên dưới theo như chỉ dẫn của Microchip nhưng có vẻ nó hoạt động không ổn định(không dứt khoát về 0 hoặc 1 mà nháy nháy hoặc sáng mờ) và không được nhạy lắm.khi lập trình 1 nút thì còn đở , bổ sung thêm 1 nút thì có khi vừa khởi động là sáng lun,có khi rờ nút này thì đèn kia lại sáng.giúp dùm nhé,ai có code điều khiển nhiều nút theo phương pháp này cho mình tham khảo với ?

    Code:
    #include <16f88.h>
    #device *=16 ADC=10
    #fuses intrc
    #use delay(clock=4000000)
    #use fast_io(a)
    #use fast_io(b)
    //#byte porta = 0x05
    
    int16 average[5];
    int16 temp=0,temp1=0,sens1=0,sens2=0;
    unsigned char i;
    
    void read_sensor1()
    {
       set_adc_channel(0);
       set_tris_a(0);
       output_a(0x01);
       set_tris_a(0xff);
       set_adc_channel(1);
       sens1 = read_adc();
       //sens1 = sens1*5;
       delay_us(10);
       if(sens1<temp) output_high(pin_b0);
       else output_low(pin_b0);
       
    }
    void read_sensor2()
    {
       set_adc_channel(0);
       set_tris_a(0);
       output_a(0x01);
       set_tris_a(0xff);
       set_adc_channel(2);
       sens2 = read_adc();
       //sens2 = sens2*5;
       delay_us(10);
       if(sens2<temp1) output_high(pin_b1);
       else output_low(pin_b1);
       
    }
    
    void main()
    {
       setup_adc(adc_clock_internal);
       setup_adc_ports(all_analog | VSS_VDD);
       set_tris_b(0xc0);
       output_b(0);
       set_adc_channel(0); //chon kenh 0 lam analog in
       set_tris_a(0);          //port a out all
       output_a(0x01);      //set chan a0 = 1
       set_tris_a(0xff);      //set port a in all
       set_adc_channel(1);//chon read adc nut 1
       for(i=0;i<5;i++)       //lay mau 5 lan
       {
          average[i] = read_adc();
          delay_us(8);
          temp = temp + average[i]; //cong don va lay gia tri trung bình
       }
       temp = temp/5;
       
       set_adc_channel(0);
       set_tris_a(0);
       output_a(0x01);
       set_tris_a(0xff);
       set_adc_channel(2);
       for(i=0;i<5;i++)
       {
          average[i] = read_adc();
          delay_us(8);
          temp1 = temp1 + average[i];
       }
       temp1 = temp1/5;
    
       while(1)
       {
          read_sensor1();
          read_sensor2();
          
          
       }
    }
    heart.touching.2010@gmail.com!
  • qloi
    Đệ tử 3 túi
    • Sep 2010
    • 55

    #2
    Tìm được cách giải quyết rồi,bây giờ thì chạy ngon lành rồi.
    heart.touching.2010@gmail.com!

    Comment

    • laiquangtuyen
      Đệ tử 4 túi
      • Jul 2007
      • 83

      #3
      Nguyên văn bởi qloi View Post
      Các cao nhân có ai đã làm touch button theo phương pháp CVD sủ dụng ADC hoàn chỉnh cho mình hỏi đoạn code mình viết bên dưới theo như chỉ dẫn của Microchip nhưng có vẻ nó hoạt động không ổn định(không dứt khoát về 0 hoặc 1 mà nháy nháy hoặc sáng mờ) và không được nhạy lắm.khi lập trình 1 nút thì còn đở , bổ sung thêm 1 nút thì có khi vừa khởi động là sáng lun,có khi rờ nút này thì đèn kia lại sáng.giúp dùm nhé,ai có code điều khiển nhiều nút theo phương pháp này cho mình tham khảo với ?

      Code:
      #include <16f88.h>
      #device *=16 ADC=10
      #fuses intrc
      #use delay(clock=4000000)
      #use fast_io(a)
      #use fast_io(b)
      //#byte porta = 0x05
      
      int16 average[5];
      int16 temp=0,temp1=0,sens1=0,sens2=0;
      unsigned char i;
      
      void read_sensor1()
      {
         set_adc_channel(0);
         set_tris_a(0);
         output_a(0x01);
         set_tris_a(0xff);
         set_adc_channel(1);
         sens1 = read_adc();
         //sens1 = sens1*5;
         delay_us(10);
         if(sens1<temp) output_high(pin_b0);
         else output_low(pin_b0);
         
      }
      void read_sensor2()
      {
         set_adc_channel(0);
         set_tris_a(0);
         output_a(0x01);
         set_tris_a(0xff);
         set_adc_channel(2);
         sens2 = read_adc();
         //sens2 = sens2*5;
         delay_us(10);
         if(sens2<temp1) output_high(pin_b1);
         else output_low(pin_b1);
         
      }
      
      void main()
      {
         setup_adc(adc_clock_internal);
         setup_adc_ports(all_analog | VSS_VDD);
         set_tris_b(0xc0);
         output_b(0);
         set_adc_channel(0); //chon kenh 0 lam analog in
         set_tris_a(0);          //port a out all
         output_a(0x01);      //set chan a0 = 1
         set_tris_a(0xff);      //set port a in all
         set_adc_channel(1);//chon read adc nut 1
         for(i=0;i<5;i++)       //lay mau 5 lan
         {
            average[i] = read_adc();
            delay_us(8);
            temp = temp + average[i]; //cong don va lay gia tri trung bình
         }
         temp = temp/5;
         
         set_adc_channel(0);
         set_tris_a(0);
         output_a(0x01);
         set_tris_a(0xff);
         set_adc_channel(2);
         for(i=0;i<5;i++)
         {
            average[i] = read_adc();
            delay_us(8);
            temp1 = temp1 + average[i];
         }
         temp1 = temp1/5;
      
         while(1)
         {
            read_sensor1();
            read_sensor2();
            
            
         }
      }
      trong này hok thấy cái delay_us(10);
      mà tác giả đã tự giải quyết được ùi giống tự sướng quá, he he.
      LẠI QUANG TUYẾN
      Phone: 0906.189.269

      Comment

      • unisa
        Đệ tử 2 túi
        • May 2005
        • 27

        #4
        Nguyên văn bởi qloi View Post
        Tìm được cách giải quyết rồi,bây giờ thì chạy ngon lành rồi.
        Giải quyết sao bạn ơi, mình cũng bị giống bạn hix, bạn share code cho mọi người tham khảo với

        Comment

        • qloi
          Đệ tử 3 túi
          • Sep 2010
          • 55

          #5
          Nguyên văn bởi laiquangtuyen View Post
          trong này hok thấy cái delay_us(10);
          mà tác giả đã tự giải quyết được ùi giống tự sướng quá, he he.
          ý bác là cái delay để cho pic complete adc ý àh? trong vòng lặp em đã để nó bằng 8us còn gì với lại em xài dao động nội cho adc thì thời gian(2-6us) là thỏa rôi . em viết thử và cho truyền qua giao tiếp usb lên máy tính để đo kết quả để biết giá trị nó nằm trong tầm nào để biết mặc đặt ngưỡng, nếu bác có cao kiến gì thì góp tay với em nào?
          heart.touching.2010@gmail.com!

          Comment

          Working...