I am using this code to make 10 bit PWM on port number 9, it seems like everything printed is 0,1022 rather than printing 0, 512, 1023. Is there a problem in my code ?
I wired pin9 to A3 to get the output and print it.
void setup() {
Serial.begin(9600);
pinMode(A3,INPUT);
// Set PB1/2 as outputs.
DDRB |= (1 << DDB1) | (1 << DDB2);
TCCR1A =
(1 << COM1A1) | (1 << COM1B1) |
// Fast PWM mode.
(1 << WGM11);
TCCR1B =
// Fast PWM mode.
(1 << WGM12) | (1 << WGM13) |
// No clock prescaling (fastest possible
// freq).
(1 << CS10);
OCR1A = 0;
// Set the counter value that corresponds to
// full duty cycle. For 15-bit PWM use
// 0x7fff, etc. A lower value for ICR1 will
// allow a faster PWM frequency.
ICR1 = 0x03ff;
}
void loop() {
// Use OCR1A and OCR1B to control the PWM
// duty cycle. Duty cycle = OCR1A / ICR1.
// OCR1A controls PWM on pin 9 (PORTB1).
// OCR1B controls PWM on pin 10 (PORTB2).
OCR1A = 0x0000;
delay(500);
Serial.println(analogRead(A3));
OCR1A = 0x0200;
delay(500);
Serial.println(analogRead(A3));
OCR1A = 0x03ff;
delay(500);
Serial.println(analogRead(A3));
}
The output looks like that:
0 0 1022 1021 0 1022 1021 0 0 1021 0 1021 1021 0 0 1021 0 0 1022
no data between 0 and 1022 are presented.
thanks.
-
Do you know even what PWM is...?Majenko– Majenko2016年11月22日 08:51:04 +00:00Commented Nov 22, 2016 at 8:51
-
If you want, you can teach meMostafa Khattab– Mostafa Khattab2016年11月22日 09:14:09 +00:00Commented Nov 22, 2016 at 9:14
-
Or you could ask Google...Majenko– Majenko2016年11月22日 09:14:46 +00:00Commented Nov 22, 2016 at 9:14
1 Answer 1
On your code, you using analogRead
but declaring the pin (A3) as output. Change it to pinMode(A3,INPUT);
Aside from that, PWM is basically a digital output which changing (HIGH and LOW) at specified frequency. When the result you got is
0 0 1022 1021 0 1022 1021 0 0 1021 0 1021 1021 0 0 1021 0 0 1022
There's nothing wrong. 0 --> LOW, and 1021++ --> HIGH
If you want "measure" something from the PWM, use pulseIn()
instead, you can check the documentation here.
If you want to measure the PWM value, I suggest you read:
Can I connect a PWM pin on one Arduino to an analog input on another?
-
Thanks for your note, I just got output like that, which is wrong I guess. 0 0 1022 1021 0 1022 1021 0 0 1021 0 1021 1021 0 0 1021 0 0 1022Mostafa Khattab– Mostafa Khattab2016年11月22日 07:30:18 +00:00Commented Nov 22, 2016 at 7:30
-
-
Thank you, does that allow me to make arduino output analg data like a potentiometer ?Mostafa Khattab– Mostafa Khattab2016年11月22日 08:06:10 +00:00Commented Nov 22, 2016 at 8:06
-
Based on @Russell answer from the link above, yes.duck– duck2016年11月22日 08:08:21 +00:00Commented Nov 22, 2016 at 8:08
-
but, why I don't write that code when I use a potentiometer for example ?Mostafa Khattab– Mostafa Khattab2016年11月22日 08:42:56 +00:00Commented Nov 22, 2016 at 8:42
Explore related questions
See similar questions with these tags.