// Include the necessary libraries
#include <avr/io.h>
#include <avr/interrupt.h>
// Define constants
#define mask 0x00;
unsigned char switchState,maskedSw;
long dutyCycle = 0;
int main(void) {
// Initialize serial communication
Serial.begin(9600);
DDRB |= (1 << PORTB7); // enable output PB7 PWM pin
PORTB = 0x00;
DDRC = 0x00; // set port C input
PORTC = 0xFF; // enable pull-up resistor
// Configure Timer/Counter 0 (TC0) for FAST PWM
cli();
TCCR0A = (1 << COM0A1 ) | (1 << WGM01) | (1 << WGM00); // Set Fasw PWM
TCCR0B = 0x01; // prescaler to 8
TCNT0 = 0; // Initialize counter value to 0
sei();
OCR0A = 1; // Enable global interrupts
// Your setup code here (if any)
while(1) {
// Your main code here
switchState = PINC;
maskedSw = switchState ^ mask;
switch(maskedSw)
{
case 0x01:
dutyCycle = 10;
break;
case 0x02:
dutyCycle = 20;
break;
case 0x04:
dutyCycle = 40;
break;
case 0x08:
dutyCycle = 50;
break;
case 0x10:
dutyCycle = 60;
break;
case 0x20:
dutyCycle = 70;
break;
case 0x40:
dutyCycle = 80;
break;
case 0x80:
dutyCycle = 100;
break;
default:
dutyCycle = 1;
break;
}
OCR0A = ((dutyCycle / 100.0) * 255);
Serial.println(OCR0A);
Serial.println(dutyCycle);
Serial.println(maskedSw);
}
}