// Prepinani LED osvetleni nad mericim pracovistem pomoci 1 tlacitka s osetrenym odrusenim zakmitu. // Plynula zmena jasu pri rozsvecovani a zhasinani (asi sekundovy PWM prechod) // // verze: 22.7.2017 // // // Zapojeni: //============= // ATtiny13 // +-\__/-+ // nezapojeno (RESET) - PB5 1| |8 Vcc // nezapojeno - PB3 2| |7 PB2 - nezapojeno // nezapojeno - PB4 3| |6 PB1 - tlacitko proti GND // GND 4| |5 PB0 - vystup (spinaci FET) // +------+ #define F_CPU 9600000 // Nastaveni vnitrni frekvence procesoru na 9.6 MHz. byte stav = 0; // Znacka aktualniho stavu (zhasnuto = 0 ; rozsviceno = 1) void setup() { DDRB = 0b00111101; // nastaveni smeru signalu na portu B ("1" = vystup ; "0" = vstup (PB5=reset)) PORTB = 0b00000010; // vsechny vystupy zhasnout na vstup pripojit pull-up // nastaveni rezimu PWM OCR0A = 255; // zacina se se zhasnutymi LED TCCR0A = 0b11000011; // rezim FAST PWM; vystup se nastavi do '0' pri dosazeni pozadovaneho cisla TCCR0B = 0b00000010; // FAST PWM, delic zakladni frekvence na 4.6kHz (pro prescaler='010b') } void loop() { if((PINB & 0b00000010) == 0) // Prave bylo stisknuto tlacitko. { if (stav == 0) // Kdyz je od minule zhasnuto ... { rozsvit(); stav = 1; // a nastav znacku, ze je rozsviceno. } else // Kdyz je od minule rozsviceno ... { zhasni(); stav = 0; // a nastav znacku, ze je zhasnuto. } delay (50); // Odruseni zakmitu pri stiskavani tlacitka. while ((PINB & 0b00000010) == 0) // Cekani na uvolneni tlacitka. { delay(50); } delay(50); // Odruseni zakmitu pri uvolnovani tlacitka. } } // plynule zhasinani LED void zhasni(void) { TCCR0A = 0b11000011; // rezim FAST PWM; vystup se nastavi do '0' pri dosazeni pozadovaneho cisla for (byte jas = 0; jas < 255 ; jas ++) { OCR0A = jas; // sirka PWM impulzu delay(( jas/50 )+1); } OCR0A = 255; } // plynule rozsveceni LED void rozsvit(void) { TCCR0A = 0b11000011; // rezim FAST PWM; vystup se nastavi do '0' pri dosazeni pozadovaneho cisla for (byte jas = 255; jas > 0 ; jas --) { OCR0A = jas; // sirka PWM impulzu delay(( jas/50 )+1); } TCCR0A = 0b00000011; // OC0A vypnuto, pin B0 ma normalni funkci PORTB = 0b00000011; // ... rozsvit naplno }