Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 5 of 5

Thread: Sending 8 clock outputs at different variable speeds ?

  1. #1

    Sending 8 clock outputs at different variable speeds ?

    Hi all,
    Long time reader, first time caller. Been using teensy for about a year now (thanks Paul, incredible device), mostly for fairly simple tasks.
    I'm diving into a new project now- it involves sending 8 (<10kHz) clock outputs, each with variable speed control from a front panel.
    I'm coming up with a few ideas for code, and before i start working, i'd like to know if anyone has any suggestions for approach.

    Leading idea right now has to do with setting a variable for each rate, and comparing them with millis() - set high output every (variable) in relation to millis.

    I've been naiive in the past regarding time and microcontrollers, so i have a suspicion that this won't work due to something i'm unaware of.

    Would appreciate any ideas !
    Best,
    L.

  2. #2
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    22,756
    You can get 3 very easily using analogWriteFrequency() and analogWrite(). But there's only 3 separate timers for PWM. Details here.

    Comparing timing in a loop is probably reasonable. You might use 5 elapsedMicros variable to simplify the coding.

    You could use the tone() function, which internally uses an IntervalTimer. There are 4 of those timers, so if you find the tone code, you could make 3 more copies, with new names for everything. But that would only get you to 7.

  3. #3
    Paul - fantastic advice, this rules and simplifies a lot of things.
    Is there additional hardware that could be hooked up for the teensy to support more timers for PWM?

  4. #4
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    22,756
    Another Teensy?!

    Silly as that sounds, a Teensy-LC is under $12, and has 3 PWM timers and 2 IntervalTimer. It's really easy to get Serail1 connected between 1 boards. For a one-off project, that might be the simplest path.

    Of course, there's lots of digital and analog circuity to generate waveforms. You can use a CPLD or FPGA to implement your own timers! Analog voltage to frequency circuits exist, so perhaps you could use the DAC or remaining PWM with low-pass filters to get analog signals to control them.

    I'm sure plenty of people will chime in with other ideas. Maybe even 555 timers could be used somehow?

  5. #5
    much success with multiple outputs running with elapsedMillis !
    nonetheless now i'm curious about timer peripherals, sounds like there could be some interesting applications there...

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •