Specifically, I want to control the sample rate of an ISP1820 with an analog out from an Arduino. I know I could drop-in a digital pot but I don't have one and that seems like needless complexity if I could remove the resistor and have the Arduino look at one of the pins on the other chip and math up what the other pin should see.

Or could I put two pins of a transistor to the daughter chip and have the Arduino control the sample rate by flipping the transistor at a certain frequency? I also have a small pile of random opamps, CMOS logic chips and 555s. I have no problem with the 1820 glitching a bit so a kludgey solution would be acceptable.


1 Answer 1


That is an ISD1820 you have, not an ISP1820.

Here's the schematic of a typical device made with an ISD1820:

enter image description here

The simplest way to change operating frequencies would be to connect two resistors to \$R_{OSC}\$. One end of each resistor to \$R_{OSC}\$, the other to a digital IO pin on the Arduino.

To select a particular frequency, you set the pin for that resistor to output and ground. You set the other output to INPUT. That leaves the digital IO pin floating so it doesn't bother the ISD1820. Do not use INPUT_PULLUP as that will activate another resistor in the Arduino.

That will give you specific resistor values for specific sampling rates on the ISD1820. You can use more pins and resistors for more sampling rates. With multiple resistors, you can connect them in various combinations to get more frequencies.

This won't get you infinitely variable frequencies like a potentiometer would, but maybe it'll do what you need.

A sketch of what I described:


simulate this circuit – Schematic created using CircuitLab

  • If you set Digital9 to OUTPUT and LOW, and Digital10 to INPUT, then the ISD1820 will use the 6.4kHz sampling rate (10 second recording.)
  • If you set Digital10 to OUTPUT and LOW, and Digital9 to INPUT, then the ISD1820 will use the 3.2kHz sampling rate (20 second recording.)

If you really want a variable sampling rate, you might try this:


simulate this circuit

Use PWM (analogWrite) on pin D9 of the Arduino. I think the ISD1820 uses the discharge current through \$R_{OSC}\$ to set the frequency. Varying the PWM duty cycle will vary the current from \$R_{OSC}\$.

You'll probably have to play with the component values and the PWM rate to get it to work. The values are a wild guess that may be no where near correct - or maybe spot on. Who knows. The ISD1820 datasheets are really crummy and give zero details on \$R_{OSC}\$.

Try it out. If it works, you could post your own answer with the final values and the code you used (PWM values and so on.)

  • \$\begingroup\$ Beautiful, many thanks! And thanks for the thoroughness and clarity of the answer. And crummy is the right word to start with about the datasheets but still, i'd like to have thought of looking more closely at that diagram. Was i crazy to think the resistor was across two pins? I imagine there are sundry ways of doing it... \$\endgroup\$
    – ynaq
    Jan 8, 2021 at 21:47
  • \$\begingroup\$ Let me know how it turns out, and which solution you used. \$\endgroup\$
    – JRE
    Jan 8, 2021 at 21:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.