defines changed from TARGET_LPC1768 to TARGET_LPC176X to support LPC1769 target

Fork of FastAnalogIn by Mike R

Committer:
0x6d61726b
Date:
Tue Mar 13 23:05:42 2018 +0000
Revision:
13:ccf0ab6bbe3a
Parent:
12:d9df0fc380bf
defines changed from TARGET_LPC1768 to TARGET_LPC176X to support LPC1769 target

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 0:c2a7b899e6c7 1 #ifndef FASTANALOGIN_H
Sissors 0:c2a7b899e6c7 2 #define FASTANALOGIN_H
Sissors 0:c2a7b899e6c7 3
Sissors 0:c2a7b899e6c7 4 /*
Sissors 0:c2a7b899e6c7 5 * Includes
Sissors 0:c2a7b899e6c7 6 */
Sissors 0:c2a7b899e6c7 7 #include "mbed.h"
Sissors 0:c2a7b899e6c7 8 #include "pinmap.h"
Sissors 0:c2a7b899e6c7 9
0x6d61726b 12:d9df0fc380bf 10 #if !defined TARGET_LPC176X && !defined TARGET_KLXX && !defined TARGET_LPC408X && !defined TARGET_LPC11UXX && !defined TARGET_K20D5M
Sissors 0:c2a7b899e6c7 11 #error "Target not supported"
Sissors 0:c2a7b899e6c7 12 #endif
Sissors 0:c2a7b899e6c7 13
0x6d61726b 13:ccf0ab6bbe3a 14 /** A class similar to AnalogIn, only faster, for LPC176X, LPC408X and KLxx
frankvnk 2:9b61d0792927 15 *
frankvnk 2:9b61d0792927 16 * AnalogIn does a single conversion when you read a value (actually several conversions and it takes the median of that).
frankvnk 2:9b61d0792927 17 * This library runns the ADC conversion automatically in the background.
frankvnk 2:9b61d0792927 18 * When read is called, it immediatly returns the last sampled value.
frankvnk 3:a9b753c25073 19 *
0x6d61726b 13:ccf0ab6bbe3a 20 * LPC176X / LPC4088
0x6d61726b 13:ccf0ab6bbe3a 21 * Using more ADC pins in continuous mode will decrease the conversion rate (LPC176X:200kHz/LPC4088:400kHz).
frankvnk 2:9b61d0792927 22 * If you need to sample one pin very fast and sometimes also need to do AD conversions on another pin,
frankvnk 2:9b61d0792927 23 * you can disable the continuous conversion on that ADC channel and still read its value.
frankvnk 3:a9b753c25073 24 *
frankvnk 3:a9b753c25073 25 * KLXX
frankvnk 3:a9b753c25073 26 * Multiple Fast instances can be declared of which only ONE can be continuous (all others must be non-continuous).
frankvnk 3:a9b753c25073 27 *
frankvnk 3:a9b753c25073 28 * When continuous conversion is disabled, a read will block until the conversion is complete
frankvnk 3:a9b753c25073 29 * (much like the regular AnalogIn library does).
frankvnk 2:9b61d0792927 30 * Each ADC channel can be enabled/disabled separately.
frankvnk 2:9b61d0792927 31 *
frankvnk 3:a9b753c25073 32 * IMPORTANT : It does not play nicely with regular AnalogIn objects, so either use this library or AnalogIn, not both at the same time!!
frankvnk 2:9b61d0792927 33 *
frankvnk 2:9b61d0792927 34 * Example for the KLxx processors:
frankvnk 2:9b61d0792927 35 * @code
frankvnk 2:9b61d0792927 36 * // Print messages when the AnalogIn is greater than 50%
frankvnk 2:9b61d0792927 37 *
frankvnk 2:9b61d0792927 38 * #include "mbed.h"
frankvnk 2:9b61d0792927 39 *
frankvnk 3:a9b753c25073 40 * FastAnalogIn temperature(PTC2); //Fast continuous sampling on PTC2
frankvnk 3:a9b753c25073 41 * FastAnalogIn speed(PTB3, 0); //Fast non-continuous sampling on PTB3
frankvnk 2:9b61d0792927 42 *
frankvnk 2:9b61d0792927 43 * int main() {
frankvnk 2:9b61d0792927 44 * while(1) {
frankvnk 2:9b61d0792927 45 * if(temperature > 0.5) {
frankvnk 2:9b61d0792927 46 * printf("Too hot! (%f) at speed %f", temperature.read(), speed.read());
frankvnk 2:9b61d0792927 47 * }
frankvnk 2:9b61d0792927 48 * }
frankvnk 2:9b61d0792927 49 * }
frankvnk 2:9b61d0792927 50 * @endcode
0x6d61726b 13:ccf0ab6bbe3a 51 * Example for the LPC176X processor:
frankvnk 2:9b61d0792927 52 * @code
frankvnk 2:9b61d0792927 53 * // Print messages when the AnalogIn is greater than 50%
frankvnk 2:9b61d0792927 54 *
frankvnk 2:9b61d0792927 55 * #include "mbed.h"
frankvnk 2:9b61d0792927 56 *
frankvnk 3:a9b753c25073 57 * FastAnalogIn temperature(p20);
frankvnk 2:9b61d0792927 58 *
frankvnk 2:9b61d0792927 59 * int main() {
frankvnk 2:9b61d0792927 60 * while(1) {
frankvnk 2:9b61d0792927 61 * if(temperature > 0.5) {
frankvnk 2:9b61d0792927 62 * printf("Too hot! (%f)", temperature.read());
frankvnk 2:9b61d0792927 63 * }
frankvnk 2:9b61d0792927 64 * }
frankvnk 2:9b61d0792927 65 * }
frankvnk 2:9b61d0792927 66 * @endcode
Sissors 0:c2a7b899e6c7 67 */
Sissors 0:c2a7b899e6c7 68 class FastAnalogIn {
Sissors 0:c2a7b899e6c7 69
Sissors 0:c2a7b899e6c7 70 public:
Sissors 0:c2a7b899e6c7 71 /** Create a FastAnalogIn, connected to the specified pin
Sissors 0:c2a7b899e6c7 72 *
Sissors 0:c2a7b899e6c7 73 * @param pin AnalogIn pin to connect to
Sissors 0:c2a7b899e6c7 74 * @param enabled Enable the ADC channel (default = true)
Sissors 0:c2a7b899e6c7 75 */
Sissors 0:c2a7b899e6c7 76 FastAnalogIn( PinName pin, bool enabled = true );
Sissors 0:c2a7b899e6c7 77
frankvnk 2:9b61d0792927 78 ~FastAnalogIn( void )
frankvnk 2:9b61d0792927 79 {
frankvnk 2:9b61d0792927 80 disable();
frankvnk 2:9b61d0792927 81 }
Sissors 0:c2a7b899e6c7 82
Sissors 0:c2a7b899e6c7 83 /** Enable the ADC channel
Sissors 0:c2a7b899e6c7 84 *
Sissors 0:c2a7b899e6c7 85 * @param enabled Bool that is true for enable, false is equivalent to calling disable
Sissors 0:c2a7b899e6c7 86 */
Sissors 0:c2a7b899e6c7 87 void enable(bool enabled = true);
Sissors 0:c2a7b899e6c7 88
Sissors 0:c2a7b899e6c7 89 /** Disable the ADC channel
Sissors 0:c2a7b899e6c7 90 *
Sissors 0:c2a7b899e6c7 91 * Disabling unused channels speeds up conversion in used channels.
Sissors 0:c2a7b899e6c7 92 * When disabled you can still call read, that will do a single conversion (actually two since the first one always returns 0 for unknown reason).
Sissors 0:c2a7b899e6c7 93 * Then the function blocks until the value is read. This is handy when you sometimes needs a single conversion besides the automatic conversion
Sissors 0:c2a7b899e6c7 94 */
Sissors 0:c2a7b899e6c7 95 void disable( void );
Sissors 0:c2a7b899e6c7 96
Sissors 0:c2a7b899e6c7 97 /** Returns the raw value
Sissors 0:c2a7b899e6c7 98 *
Sissors 0:c2a7b899e6c7 99 * @param return Unsigned integer with converted value
Sissors 0:c2a7b899e6c7 100 */
Sissors 0:c2a7b899e6c7 101 unsigned short read_u16( void );
Sissors 0:c2a7b899e6c7 102
Sissors 0:c2a7b899e6c7 103 /** Returns the scaled value
Sissors 0:c2a7b899e6c7 104 *
Sissors 0:c2a7b899e6c7 105 * @param return Float with scaled converted value to 0.0-1.0
Sissors 0:c2a7b899e6c7 106 */
frankvnk 2:9b61d0792927 107 float read( void )
frankvnk 2:9b61d0792927 108 {
frankvnk 2:9b61d0792927 109 unsigned short value = read_u16();
humlet 4:cd84739f7640 110 return (float)value * (1.0f/65535.0f);
frankvnk 2:9b61d0792927 111 }
Sissors 0:c2a7b899e6c7 112
Sissors 0:c2a7b899e6c7 113 /** An operator shorthand for read()
Sissors 0:c2a7b899e6c7 114 */
Sissors 0:c2a7b899e6c7 115 operator float() {
Sissors 0:c2a7b899e6c7 116 return read();
Sissors 0:c2a7b899e6c7 117 }
Sissors 0:c2a7b899e6c7 118
Sissors 0:c2a7b899e6c7 119
Sissors 0:c2a7b899e6c7 120 private:
Sissors 0:c2a7b899e6c7 121 bool running;
Sissors 0:c2a7b899e6c7 122 char ADCnumber;
Sissors 8:68082fdde730 123 volatile uint32_t *datareg;
Sissors 0:c2a7b899e6c7 124 };
Sissors 0:c2a7b899e6c7 125
frankvnk 2:9b61d0792927 126 #endif