// Configuración de los pines
const int pwmPin1 = 0; // Pin PB0 (Pin 5 en el ATtiny85)
const int pwmPin2 = 1; // Pin PB1 (Pin 6 en el ATtiny85)
// Configuración de la frecuencia y resolución del PWM
const int frequency = 60; // Frecuencia de 60 Hz
const int resolution = 8; // Resolución de 8 bits (0-255)
// Variable para almacenar el valor del seno
int senoValue1 = 0;
int senoValue2 = 0;
// Función para calcular el valor del seno
int calculateSineValue(int angle) {
return 127 + 127 * sin(angle * 0.0174533); // 0.0174533 es la conversión de grados a radianes
}
void setup() {
// Configurar los pines PWM
pinMode(pwmPin1, OUTPUT);
pinMode(pwmPin2, OUTPUT);
// Configurar el timer para generar PWM
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00); // Fast PWM, non-inverting mode
TCCR0B = _BV(CS00); // No prescaler
OCR0A = 0; // Inicializar el valor del PWM para el pin 1
OCR0B = 0; // Inicializar el valor del PWM para el pin 2
}
void loop() {
// Generar una onda senoidal completa (360 grados)
for (int angle = 0; angle < 180; angle++) {
senoValue1 = calculateSineValue(angle);
senoValue2 = 255 - senoValue1; // Valor complementario
OCR0A = senoValue1; // Establecer el valor del PWM para el pin 1
OCR0B = senoValue2; // Establecer el valor del PWM para el pin 2
delayMicroseconds(16666); // Aproximadamente 16.666 ms para 60 Hz
}
}