PWM output

Code below is from examples library, I can observe the signal on serial plotter but I wan to see that on oscilloscope.
How to add PWM output on PA7 pin ?
STM32F103

/*
  Smoothing

  Reads repeatedly from an analog input, calculating a running average
  and printing it to the computer.  Keeps ten readings in an array and
  continually averages them.

  The circuit:
  * Analog sensor (potentiometer will do) attached to pin 15

  Created 22 April 2007
  By David A. Mellis  <dam@mellis.org>

  http://www.arduino.cc/en/Tutorial/Smoothing

  Ported to Maple 27 May 2010
  by Bryan Newbold
*/

// Define the number of samples to keep track of.  The higher the number,
// the more the readings will be smoothed, but the slower the output will
// respond to the input.  Using a constant rather than a normal variable lets
// use this value to determine the size of the readings array.
const int numReadings = 10;

int readings[numReadings];      // the readings from the analog input
int index1 = 0;                  // the index1 of the current reading
int total = 0;                  // the running total
int average = 0;                // the average

int inputPin = PA6;              // analog input pin

void setup() {
    // Declare the input pin as INPUT_ANALOG:
    pinMode(inputPin, INPUT_ANALOG);
	Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor
	
    // Initialize all the readings to 0:
    for (int thisReading = 0; thisReading < numReadings; thisReading++) {
        readings[thisReading] = 0;
    }
}

void loop() {
    // Subtract the last reading:
    total = total - readings[index1];
    // Read from the sensor:
    readings[index1] = analogRead(inputPin);
    // Add the reading to the total:
    total = total + readings[index1];
    // Advance to the next position in the array:
    index1 = index1 + 1;

    // If we're at the end of the array...
    if (index1 >= numReadings) {
        // ...wrap around to the beginning:
        index1 = 0;
    }

    // Calculate the average:
    average = total / numReadings;
    // Send it to the computer (as ASCII digits)
    Serial.println(average, DEC);
}/*
  Smoothing

  Reads repeatedly from an analog input, calculating a running average
  and printing it to the computer.  Keeps ten readings in an array and
  continually averages them.

  The circuit:
  * Analog sensor (potentiometer will do) attached to pin 15

  Created 22 April 2007
  By David A. Mellis  <dam@mellis.org>

  http://www.arduino.cc/en/Tutorial/Smoothing

  Ported to Maple 27 May 2010
  by Bryan Newbold
*/

// Define the number of samples to keep track of.  The higher the number,
// the more the readings will be smoothed, but the slower the output will
// respond to the input.  Using a constant rather than a normal variable lets
// use this value to determine the size of the readings array.
const int numReadings = 10;

int readings[numReadings];      // the readings from the analog input
int index1 = 0;                  // the index1 of the current reading
int total = 0;                  // the running total
int average = 0;                // the average

int inputPin = PA6;              // analog input pin

void setup() {
    // Declare the input pin as INPUT_ANALOG:
    pinMode(inputPin, INPUT_ANALOG);
	Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor
	
    // Initialize all the readings to 0:
    for (int thisReading = 0; thisReading < numReadings; thisReading++) {
        readings[thisReading] = 0;
    }
}

void loop() {
    // Subtract the last reading:
    total = total - readings[index1];
    // Read from the sensor:
    readings[index1] = analogRead(inputPin);
    // Add the reading to the total:
    total = total + readings[index1];
    // Advance to the next position in the array:
    index1 = index1 + 1;

    // If we're at the end of the array...
    if (index1 >= numReadings) {
        // ...wrap around to the beginning:
        index1 = 0;
    }

    // Calculate the average:
    average = total / numReadings;
    // Send it to the computer (as ASCII digits)
    Serial.println(average, DEC);
}
  int analogOut = map(average, 0,1023, 0,255);
  analogWrite(Pin_You_Choose, analogOut);

Note, you may need a pinMode(Pin_You_Choose, OUTPUT); in setup() although I think analogWrite() will do that for you.

I am trying.
This is what I did.

/*
  Smoothing

  Reads repeatedly from an analog input, calculating a running average
  and printing it to the computer.  Keeps ten readings in an array and
  continually averages them.

  The circuit:
  * Analog sensor (potentiometer will do) attached to pin 15

  Created 22 April 2007
  By David A. Mellis  <dam@mellis.org>

  http://www.arduino.cc/en/Tutorial/Smoothing

  Ported to Maple 27 May 2010
  by Bryan Newbold
*/

// Define the number of samples to keep track of.  The higher the number,
// the more the readings will be smoothed, but the slower the output will
// respond to the input.  Using a constant rather than a normal variable lets
// use this value to determine the size of the readings array.
const int numReadings = 10;

int readings[numReadings];      // the readings from the analog input
int index1 = 0;                  // the index1 of the current reading
int total = 0;                  // the running total
int average = 0;                // the average
int inputPin = PA6;  // analog input pin
int outputPin = PA7; //output pin

  int pinMode(PinPA7, OUTPUT);     //  output pin
  int analogOut = map(average, 0,1023, 0,255);
void setup() {
    // Declare the input pin as INPUT_ANALOG:
    pinMode(inputPin, INPUT_ANALOG);
    pinMode(out, PWM);
analogWrite(PinPA7); 
    
	Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor
	
    // Initialize all the readings to 0:
    for (int thisReading = 0; thisReading < numReadings; thisReading++) {
        readings[thisReading] = 0;
    }
}

void loop() {
    // Subtract the last reading:
    total = total - readings[index1];
    // Read from the sensor:
    readings[index1] = analogRead(inputPin);
    // Add the reading to the total:
    total = total + readings[index1];
    // Advance to the next position in the array:
    index1 = index1 + 1;

    // If we're at the end of the array...
    if (index1 >= numReadings) {
        // ...wrap around to the beginning:
        index1 = 0;
    }

    // Calculate the average:
    average = total / numReadings;
    // Send it to the computer (as ASCII digits)
    Serial.println(average, DEC);
}

And I have this error.
C:\Users\OWNER\AppData\Local\Temp\arduino_modified_sketch_602181\Smoothing.ino: In function 'void setup()':

Smoothing:38: error: 'out' was not declared in this scope

pinMode(out, PWM);

^

Smoothing:39: error: 'PinPA7' was not declared in this scope

analogWrite(PinPA7);

^

exit status 1
'int pinMode' redeclared as different kind of symbol

These lines should be placed inside a function:

pinMode(PinPA7, OUTPUT); // output pin
analogOut = map(average, 0,1023, 0,255);

I put those line just below Serial.begin(115200); and have error.

Smoothing:42: error: 'PinPA7' was not declared in this scope

pinMode(PinPA7, OUTPUT); // output pin

^

exit status 1
'PinPA7' was not declared in this scope

When I put just bellow void loop() {
Thesame error

Hi,
What model Arduino are you programming?

Thanks.. Tom.. :slight_smile:

STM32F103

Should PinPA7 be just PA7 ? :wink:

Thanks.
No errors but also nothing on pin PA7

/*
  Smoothing

  Reads repeatedly from an analog input, calculating a running average
  and printing it to the computer.  Keeps ten readings in an array and
  continually averages them.

  The circuit:
  * Analog sensor (potentiometer will do) attached to pin 15

  Created 22 April 2007
  By David A. Mellis  <dam@mellis.org>

  http://www.arduino.cc/en/Tutorial/Smoothing

  Ported to Maple 27 May 2010
  by Bryan Newbold
*/

// Define the number of samples to keep track of.  The higher the number,
// the more the readings will be smoothed, but the slower the output will
// respond to the input.  Using a constant rather than a normal variable lets
// use this value to determine the size of the readings array.
const int numReadings = 10;

int readings[numReadings];      // the readings from the analog input
int index1 = 0;                  // the index1 of the current reading
int total = 0;                  // the running total
int average = 0;                // the average
int inputPin = PA6;  // analog input pin
int outputPin = PA7; //output pin

 /* int pinMode(PinPA7, OUTPUT);     //  output pin */
  int analogOut = map(average, 0,1023, 0,255);
void setup() {
    // Declare the input pin as INPUT_ANALOG:
    pinMode(inputPin, INPUT_ANALOG);
    pinMode(outputPin, PWM);
//analogWrite(PinPA7); 
    
	Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor
	pinMode(PA7, OUTPUT);     //  output pin 
analogOut = map(average, 0,1023, 0,255);
    // Initialize all the readings to 0:
    for (int thisReading = 0; thisReading < numReadings; thisReading++) {
        readings[thisReading] = 0;
    }
}

void loop() {


/*pinMode(PinPA7, OUTPUT);     //  output pin 
analogOut = map(average, 0,1023, 0,255);*/
  
    // Subtract the last reading:
    total = total - readings[index1];
    // Read from the sensor:
    readings[index1] = analogRead(inputPin);
    // Add the reading to the total:
    total = total + readings[index1];
    // Advance to the next position in the array:
    index1 = index1 + 1;

    // If we're at the end of the array...
    if (index1 >= numReadings) {
        // ...wrap around to the beginning:
        index1 = 0;
    }

    // Calculate the average:
    average = total / numReadings;
    // Send it to the computer (as ASCII digits)
    Serial.println(average, DEC);
}

PWM pins (analogOutput( ) )

On most Arduino boards (those with the ATmega168 or ATmega328P), this function works on pins 3, 5, 6, 9, 10, and 11. On the Arduino Mega, it works on pins 2 - 13 and 44 - 46. Older Arduino boards with an ATmega8 only support analogWrite() on pins 9, 10, and 11.

Where in your sketch are you sending anything to PA7? :wink:

That what I looking for - how to do that ?

analogWrite(. . .)

Read:

Which Arduino board do you have?

stm32f103

This one?

Show us a good image of your wiring.

yes

The original is on beginning of the first page, I stuck on post #9

I trying analogWrite() but no luck, I think this part is causing the problem

Show us the code where you tried analogwrite.

Are you using A7 for your PA7 ?

I have no experience with that Arduino board so I assume A7 is a PWM pin.

Can you show us a good image of your wiring too?