User Tools

Site Tools


digispark:tutorials:propwm

This is an old revision of the document!


Digispark Pro PWM Features

PWM on the Pro:

NOTE: These features are only present in Digistump Arduino IDE Release 1.5.8C and higher

The Digispark Pro supports 2 channels of PWM (timers) that can be connected to 3 pins (channel A) or 2 pins (channel B) - the output must be the same on all pins that share the same channel and any, many, all or no pins can be connected to the channel.

See the pinout diagram for which pins correspond to which channels: http://digispark.s3.amazonaws.com/DigisparkProDiagram2.png

analogWrite():

The standard Arduino analogWrite function works with the Pro. Using analogWrite(pin,value) where pin is the pin number, and value is the PWM value you want to set that pin to - works just like a regular Arduino and sets that pin to that value and disconnects all other pins on that channel from the PWM channel. This means with analogWrite you can have one pin on each channel active at a time.

Special PWM functions:

The Digispark Pro also has the following special functions available for use with the PWM functionality:

pwmWrite(channel,value);

Where “channel” is either “CHANNELA” or “CHANNELB” and value is a value from 0-255 to set that PWM channel to ex) pwmWrite(CHANNELA,125);

This sets that channel (or timer) to the PWM value specified and it will be output to any pins you connect with the pwmConnect() function.

pwmConnect(pin);

Where pin is the pin number (0,1,2,3, or 4) that you want to connect to its PWM channel.

pwmDisconnect(pin);

Where pin is the pin number (0,1,2,3, or 4) that you want to disconnect from its PWM channel.

pwmReset();

Disconnect all pins from their PWM channel.

Example: <code> void setup() {

pwmConnect(0);//connect pin 0 to its channel (A)
pwmConnect(1);//connect pin 1 to its channel (B)
pwmWrite(CHANNELA,127); //set channel A to 1/2 PWM output - therefore pin 0 is at 50% PWM output 
pwmWrite(CHANNELB,63); //set channel B to 1/4 PWM output - therefore pin 1 is at 25%  output
delay(1000);
pwmConnect(4);//connect pin 4 to its channel (B) - pin 4 is now also at 25% output
delay(1000);
pwmWrite(CHANNELB,255); //set channel B to 100% PWM output - therefore pin 1 and 4 are at 100%  output
delay(1000);
pwmDisconnect(1);//disconnect pin 1 from its channel (B) - pin 1 is no longer outputting the PWM signal
pwmConnect(2);//connect pin 2 to its channel (A)  pin 2 is now also at 50% PWM output 
pwmConnect(3);//connect pin 3 to its channel (A)  pin 3 is now also at 50% PWM output 
delay(1000);
pwmReset(); //all pins are disconnected from their channels and no longer outputting the PWM signal

}

the loop routine runs over and over again forever: void loop() { }

digispark/tutorials/propwm.1421104878.txt.gz · Last modified: 2015/01/12 15:21 by digistump