Advertisement
Francoo

Resistance measuring using RC circuit & comparators

Jun 2nd, 2013
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.95 KB | None | 0 0
  1. #include <main.h>
  2. #include <flex_lcd.c>
  3.  
  4. // Ad hoc programming, only for testing purpose (demo).
  5. // Needs to be revised before using.
  6.  
  7. #define button PIN_B0
  8.  
  9. //          ┆       Vcc
  10. //          ┆        │
  11. //          ┆      ┌─┴─┐
  12. //          ┆      │   │   RESISTOR (R)
  13. //          ┆      │   │
  14. //          ┆      └─┬─┘ R = t / ( C * log ( Vcc / Vcc - Vr ) )
  15. //  ────────┆──┐     │   t -> Time / Vr -> Voltage reference
  16. //   PIN A0 ┆  ├──── █   Vcc -> Voltage applied
  17. //  ────────┆──┘     │
  18. //          ┆     ───┴─── CAPACITOR (C)
  19. //          ┆     ───┬───
  20. //          ┆        │            * R > 200 Ω
  21. //          ┆       GND           * C <= 0.1 µF
  22.  
  23. int overflow=0;
  24. int32 clk_val=0;
  25.  
  26. #INT_COMP
  27. void comp_int(){
  28.    setup_timer_1( T1_DISABLED );
  29.    disable_interrupts(INT_COMP);
  30.    disable_interrupts(INT_TIMER1);
  31.    clk_val = get_timer1() + 65536 * overflow;
  32.    set_timer1(0);
  33.    lcd_gotoxy(9,1);
  34.    printf( lcd_putc, "%8lu\n%03u", clk_val, overflow );
  35.    overflow=0;
  36. }
  37.  
  38. #INT_TIMER1
  39. void tmr_over(){
  40.    overflow++;
  41.    if(overflow == 255){
  42.    reset_cpu();
  43.    }
  44. }
  45.  
  46. void main()
  47. {
  48.    lcd_init();
  49.    output_low(PIN_A6);
  50.    port_b_pullups(true);
  51.    printf(lcd_putc, "Hello World!\nPress Button!");
  52.    while(!input(button));
  53.    while(input(button));
  54.    lcd_init();
  55.    enable_interrupts(GLOBAL);
  56.    setup_vref(VREF_LOW | 12);
  57.    set_timer1(0);
  58.    overflow=0;
  59.    clk_val=0;
  60.    output_low(PIN_A1);
  61.    
  62.    while(true){
  63.       output_low(PIN_A0);
  64.       while(input(button));
  65.       delay_ms(5);
  66.       setup_comparator( A0_VR_A1_VR );
  67.       enable_interrupts(INT_COMP);
  68.       enable_interrupts(INT_TIMER1);
  69.       setup_timer_1( T1_INTERNAL | T1_DIV_BY_1 );
  70.       output_high(PIN_A6);
  71.       while(! interrupt_active(INT_COMP) );
  72.       clear_interrupt(INT_COMP);
  73.       output_low(PIN_A6);
  74.    }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement