Question: //timer setup for timer0, timer1, and timer2. //For arduino uno or any board with ATMEL 328/168.. diecimila, duemilanove, lilypad, nano, mini... //this code will enable

//timer setup for timer0, timer1, and timer2. //For arduino uno or any board with ATMEL 328/168.. diecimila, duemilanove, lilypad, nano, mini...

//this code will enable all three arduino timer interrupts. //timer0 will interrupt at 2kHz

const int potPin = 6; // potentiometer connected to pin A6 int potValue; // used to store the value returned from analogRead(potPin) int pwmValue; // value of potValue mapped to the 0 - 255 range for PWM //storage variables boolean toggle0 = 0; boolean toggle1 = 0; boolean toggle2 = 0;

void setup(){

// put your setup code here, to run once: Serial.begin(9600);

//set pins as outputs pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(13, OUTPUT);

cli();//stop interrupts

//set timer0 interrupt at 2kHz TCCR0A = 0;// set entire TCCR2A register to 0 TCCR0B = 0;// same for TCCR2B TCNT0 = 0;//initialize counter value to 0 // set compare match register for 2khz increments OCR0A = 124;// = (16*10^6) / (2000*64) - 1 (must be <256) // turn on CTC mode TCCR0A |= (1 << WGM01); // Set CS01 and CS00 bits for 64 prescaler TCCR0B |= (1 << CS01) | (1 << CS00); // enable timer compare interrupt TIMSK0 |= (1 << OCIE0A);

sei();//allow interrupts

}//end setup

ISR(TIMER0_COMPA_vect){//timer0 interrupt 2kHz toggles pin 8 //generates pulse wave of frequency 2kHz/2 = 1kHz (takes two cycles for full wave- toggle high then toggle low) if (toggle0){ digitalWrite(8,HIGH); toggle0 = 0; } else{ digitalWrite(8,LOW); toggle0 = 1; } }

void loop(){ // put your main code here, to run repeatedly: potValue = analogRead(potPin); pwmValue = map(potValue, 0, 1023, 0, 255);

Serial.print(potValue); Serial.print(" "); Serial.println(pwmValue); delay(250); //do other things here Serial.println(toggle0); }

-------------end of code------------------------------------------------------------------------

This is a project with an Arduino nano and a PWM....having issues adding this last part.

- if the absolute value of this new reading has changed more than 3 out of 1023 since the last time you read it:

- disable interrupts

- change match register with new value from 0 - 255 from latest potentiometer reading

(probably want to copy and re-use entire timer0 setup code)

- enable interrupts

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!