Simple program to demonstrate the basic functions of the analog comparator of the FRDM-KL25Z board.

Dependencies:   ComparatorIn mbed

Fork of ComparatorIn_demo by Frank Vannieuwkerke

ComparatorIn demo

Simple program to demonstrate the basic functions of the analog comparator of the FRDM-KL25Z board.

The blue LED flashes after 2 sec delay. The green LED is driven by the interrupts of the Analog Comparator (LED ON at rising edge, LED OFF at falling edge).

The output of the Analog Comparatir is also tested by polling, the result is printed out at the standard output (UART0). The default speed and format (9600 bps, 8,N,1) are used.

Credits

This program is based on the ComparatorIn library and the ComparatorIn_demo program written by Frank Vannieuwkerke

Used library:

Hardware requirements:

  • FRDM-KL25 board
  • CdS photoresistor pulled up by 10 k

/media/uploads/icserny/05_comparator_demo.png

Committer:
frankvnk
Date:
Wed Jun 05 18:51:15 2013 +0000
Revision:
1:fb35e688f9f4
Parent:
0:e5deffde916d
Child:
2:bb19e60cb933
detection threshold adjusted

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 0:e5deffde916d 1 #include "ComparatorIn.h"
frankvnk 0:e5deffde916d 2 #include "mbed.h"
frankvnk 0:e5deffde916d 3
frankvnk 0:e5deffde916d 4 DigitalOut myled(LED1); // Blue
frankvnk 0:e5deffde916d 5 DigitalOut cmpled(LED2); // Green
frankvnk 0:e5deffde916d 6 DigitalOut cmp_en (PTD5);
frankvnk 0:e5deffde916d 7 AnalogIn cmp_lvl (PTB0);
frankvnk 0:e5deffde916d 8 ComparatorIn compi(PTC8, NC); // light sensor comparator input
frankvnk 0:e5deffde916d 9
frankvnk 0:e5deffde916d 10 // Comparator callback function
frankvnk 0:e5deffde916d 11 void cmp_ISR(unsigned int cmp_ret)
frankvnk 0:e5deffde916d 12 {
frankvnk 0:e5deffde916d 13 printf("\n%02X - Light sensor : %7.5f Volt - ",cmp_ret,cmp_lvl*3.3);
frankvnk 0:e5deffde916d 14 if ((cmp_ret & CMP_SCR_CFR_MASK)==CMP_SCR_CFR_MASK)
frankvnk 0:e5deffde916d 15 {
frankvnk 0:e5deffde916d 16 printf("<INT=Rising edge on HSCMP0>\n");
frankvnk 0:e5deffde916d 17 }
frankvnk 0:e5deffde916d 18 if ((cmp_ret & CMP_SCR_CFF_MASK)==CMP_SCR_CFF_MASK)
frankvnk 0:e5deffde916d 19 {
frankvnk 0:e5deffde916d 20 printf("<INT=Falling edge on HSCMP0>\n ");
frankvnk 0:e5deffde916d 21 }
frankvnk 0:e5deffde916d 22 }
frankvnk 0:e5deffde916d 23
frankvnk 0:e5deffde916d 24
frankvnk 0:e5deffde916d 25
frankvnk 0:e5deffde916d 26 int main()
frankvnk 0:e5deffde916d 27 {
frankvnk 0:e5deffde916d 28 cmp_en = 1;
frankvnk 0:e5deffde916d 29
frankvnk 0:e5deffde916d 30 compi._callbackISR(&cmp_ISR); // Set comparator callback to cmp_ISR
frankvnk 1:fb35e688f9f4 31 compi.treshold(0x20); // Set comparator threshold to 1.65V = 32 * 3.3V / 64
frankvnk 0:e5deffde916d 32
frankvnk 0:e5deffde916d 33 while(1)
frankvnk 0:e5deffde916d 34 {
frankvnk 0:e5deffde916d 35 // printf("InP : %02X - InM : %02X - DACCR : %02X\n",(CMP0->MUXCR & 0x38)>>3,(CMP0->MUXCR & 0x07),(CMP0->DACCR & 0x3f));
frankvnk 0:e5deffde916d 36 printf("Light sensor : %7.5f Volt\n",cmp_lvl*3.3);
frankvnk 0:e5deffde916d 37 myled = 1;
frankvnk 0:e5deffde916d 38 wait(1);
frankvnk 0:e5deffde916d 39 myled = 0;
frankvnk 0:e5deffde916d 40 wait(0.2);
frankvnk 0:e5deffde916d 41 if (compi.status() == 0x01)
frankvnk 0:e5deffde916d 42 {
frankvnk 0:e5deffde916d 43 cmpled = 0;
frankvnk 0:e5deffde916d 44 }
frankvnk 0:e5deffde916d 45 else
frankvnk 0:e5deffde916d 46 {
frankvnk 0:e5deffde916d 47 cmpled = 1;
frankvnk 0:e5deffde916d 48 }
frankvnk 0:e5deffde916d 49 }
frankvnk 0:e5deffde916d 50 }
frankvnk 0:e5deffde916d 51