ATtiny13 – LED fading mit delay Funktion (Software PWM) - Modellbahn-Digitaltechnik

ATtiny13 – LED fading mit delay Funktion (Software PWM)

ATtiny13 – LED fading mit delay Funktion (Software PWM)

Benötigte Bauteile

  • ATtiny13
  • 220 Ohm Widerstand
  • LED an Port 5

Code

#include <avr/io.h>
#include <util/delay.h>

#define LED_PIN         PB0
#define DELAY_MAX       (512)
#define DELAY_MIN       (1)

#if DELAY_MAX < 1 || DELAY_MIN < 1
# warning "Value of DELAY_MAX and DELAY_MAIN should be from range <1, 2^16>"
#endif
#if !(DELAY_MAX > DELAY_MIN)
# warning "Value of DELAY_MAX should be greater then DELAY_MIN"
#endif

int
main(void)
{
        uint16_t delay = DELAY_MIN;
        uint8_t dir = 0;

        /* setup */
        DDRB = 0b00000001; // set LED pin as OUTPUT
        PORTB = 0b00000001; // set LED pin to HIGH

        /* loop */
        while (1) {

                PORTB &= ~(_BV(LED_PIN)); // LED off
                _delay_loop_2(delay);

                PORTB |= _BV(LED_PIN); // LED on
                _delay_loop_2(DELAY_MAX - delay);

                if (dir) { // fade-in
                        if (++delay >= (DELAY_MAX - 1)) dir = 0;
                } else { // fade-out
                        if (--delay <= DELAY_MIN) dir = 1;
                }

        }
}

Tags: , , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert