Building microphone preamp for microcontroller analog input

Microphone is another analog signal sensor which converts sound wave energy into electrical signal. Some microphones does this directly (dynamic microphones), some need additional electrical source like electret. Electret microphone is simply a capacitor which one moving diaphragm which by moving changes capacitance. It can be captured with simple RC circuit. But the signal is very low and barely detectable with microcontroller ADC. This is why normally there are microphone preamp used that gains microphone signal, filters it and gives a DC offset so it would fir perfectly to full rail of ADC input.

opamp_Electret_Condenser_Microphone_Preamp

David actually have made two iterations of microphone preamp circuits. Previous was NPN transistor based which performed pretty good, but this time he wanted to bet even better signal and so he used operational amplifier. He selected TLC272 opamp which can work from single rail and down to 3V which makes it ideal choice for 5V and 3.3V microcontroller circuits. He found that this circuit performs pretty good even on low sound and produces lower noise than NPN version. Bellow you can see how he tested the circuit. Continue reading

Using switches on microcontrollers – obvious, but…

Switches and buttons are common way of user interaction to embedded system. Normally we are used to connect pull-up (or pull-down) resistor for a switch and then check for its value. There is nothing wrong with such circuit, but speaking of power efficiency, this design can cause some problems. Since resistor is constantly connected to VCC while switch is closed, it constantly draws significant current. What if there are tens of switches – circuit starts drawing lots of current. For battery circuits this is in-acceptable.

microcontroller_switches

One simple way would be to select higher pull-up resistor values. In many cases it might work well, but there is always a limit how much you can rise its value. First of all microcontroller input have its threshold current to work reliably. But most importantly due high resistor values and small currents noise signals can start triggering the inputs. Also keep in mind, that switches also require some minimal current ratings. So you should select pull-up resistor with common sense. Other option is to use smarter circuit. If microcontroller have enough pins, you can use I/O pin instead of VCC. This way you can apply “1” signal as VCC when ever you need. Simply turn it “on” when checking its value and then turn “off”. This method is called polling. IF you would use 10K resistor then checking every 10ms current consumption would be around 1.6uA. Comparing to hard VCC connection current consumption is 300uA. You will be amazed how much this ads once you implement this in your next battery powered project.

How to build self resetting load switch in embedded circuits

In many microcontroller projects we need to control loads such as relays, bulbs or motors. From microcontroller side we simply send signal that turns device on or off. Microcontroller normally don’t care whats going on further – is load switched on or is it failing. Of course we can build feedback and read voltage from sense resistor and then switch load off in case it draws too much of current. But sometimes relying on microcontroller to work reliable when it can hung due to overload conditions is not accepted. We need to use passive methods of protection. Few additional discrete components can make a big difference. Anthony suggests transistor based overload protection circuit which in normal conditions doesn’t doesn’t do anything. But once current exceed the limit, it shuts off switching MOSFET transistor immediately and thus probably saving the rest of circuit from frying.

load_circuit_auto_reset

One simple solution is to use NPN transistor which base is connected to load current sense resistor. It value is selected so that voltage drop on load threshold current would open transistor and thus tie main switching transistor gate to ground. Such circuit breaker responds pretty fast. Initial tests show that it takes less than 150ns to respond. The main downside of this circuit is that once shut it tries to switch load again and again even if it’s failed as long as control signal is “on” from microcontroller side. In this case Anthony suggests using latching circuit made of NPN and PNP transistor pair. In that case in order to restart load microcontroller needs to switch control signal to “off” and then to “on” to switch load again. If you feel that there is a chance of failing of load circuit – additional safety feature wouldn’t hurt.

Using three pins to drive three LEDs and read three buttons

Sometimes in more complex projects it is a waste to dedicate a line for every LED or button. If you thinking of selecting bigger microcontroller because you need additional pin to drive LED, think of smart way out. Francois AUGER & Philippe Fretaud have shared their technique of interfacing three LEDs and three buttons with three I/O pins.

three_leds_three_buttons_three_gpio

They used special Charlieplexing method of connecting all together and then wrote code piece to drive LEDs and read buttons. Three additional diodes allow reading buttons without affecting other components. Using three additional diodes is way more efficient than expanding number of pins. See video bellow of live action. Continue reading