Attiny85 - Soft PWM

He Jungs, ich habe eine kleine PWM-Kerzenschaltung gebaut.
Sie besteht aus 3 LEDs (einer roten und 2 gelben), diese werden jede einzeln mit einem zufälligen Wert über PWM angesteuert.
Jetzt wollte ich das ganze auf nen kleinen Attiny bringen, was soweit auch funktioniert bis auf die Tatsache das der Attiny85 nur 2 PWMs hat. Gibt es ne Möglichkeit die dritte LED über SoftwarePWM abzufertigen. Wichtig ist dabei nur wie gesagt das alle 3 LEDs gleichzeitig unterschiedlich hell leuchten sollen.

Vielen Dank für die Hilfe.
Gruß B

Klar geht das, schau dir mal das Beispiel BlinkWithoutDelay an, da kannst du die Pausenzeit entsprechend variieren.

Hallo,

der attiny85 hat drei nutzbare pwm Ausgänge.
// pin 3 // OC1B
// pin 5 // OC0A
// pin 6 // OC0B

Heiho, sorry bin da nicht so fit drin aber hier: http://www.atmel.com/Images/doc2586.pdf
steht das er nur 2 PWMs hat, oder verstehe ich da etwas falsch?

ich bin da auch nicht ganz fit, aber für ein anderes PRojekt habe ich Timer1 dafür missbraucht.

// Timer 1
  TCCR1 = _BV (CS10);           // no prescaler
  GTCCR = _BV (COM1B1) | _BV (PWM1B);  //  clear OC1B on compare
  OCR1B = 31;                   // duty cycle (25%)
  OCR1C = 127;                  // frequency 
  }  // end of setup

so kannst du sogar noch die pwm frequenz (OCR1C) bestimmen und das Tastverhälniss (OCR1B)

Vielen Danke erstmal, allerdings hab ich mich noch nie mit Timern beschäftigt (was ich jetzt nachhole)
Also du meinst: LED 1 und 2 mit PWM steuern und LED 3 über den Timer1? seh ich das richtig?

genau, wobei das pwm an LED1 und LED 2 von Timer 0 abhängig ist.

Danke! Werde ich morgen gleich mal ausprobieren!

da hab ich das alles geklaut...

// For Attiny85
// Author: Nick Gammon
// Date: 29 November 2012

void setup() 
 {
  pinMode (0, OUTPUT);  // pin 5  // OC0A
  pinMode (1, OUTPUT);  // pin 6  // OC0B
  pinMode (4, OUTPUT);  // pin 3  // OC1B
  
  // Timer 0, A side
  TCCR0A = _BV (WGM00) | _BV (WGM01) | _BV (COM0A1); // fast PWM, clear OC0A on compare
  TCCR0B = _BV (CS00);           // fast PWM, top at 0xFF, no prescaler
  OCR0A = 127;                   // duty cycle (50%)

  // Timer 0, B side
  TCCR0A |= _BV (COM0B1);        // clear OC0B on compare
  OCR0B = 63;                    // duty cycle (25%)

  // Timer 1
  TCCR1 = _BV (CS10);           // no prescaler
  GTCCR = _BV (COM1B1) | _BV (PWM1B);  //  clear OC1B on compare
  OCR1B = 31;                   // duty cycle (25%)
  OCR1C = 127;                  // frequency 
  }  // end of setup

void loop() { }

danke an den Verfasser :slight_smile: