ATtiny13a - Pergésmentesített kapcsoló

2016-01-30

 

Ez egy abszolút pergésmentes kapcsoló megoldás, például remegő kezű rakéta indítóknak :). Ez egy fizikai R-S (egész pontosan NR-NS, mert hogy negált bemenetei vannak) tároló megvalósítása. A kapcsoló nyelve vagy az R, vagy az S bemenetre kapcsolódik, a tároló az első érintésre átbillen, és így nem kerül figyelembevételre a nyelv ugrálása az érintkezőkön. A bemeneteket illik ellenellással felhúzni, hogy amikor szabadon lógnak, akkor is határozott magas szinten legyenek. A megoldás érdekessége, hogy a mikrovezérlő belső felhúzó ellenállásait használjuk, így megspórolunk két külső ellenállást. A belső felhúzó ellenállásokat úgy lehet aktiválni, hogy az MCUCR regiszter PUD bitjét nem állítjuk 1-be, vagyis alap helyzetben nincs letiltva. A megfelelő port lábat a DDRB regiszterben 1-gyel nem jelöljük ki kimenetnek, vagyis alaphelyzetben az összes láb bemenet. Ezután amelyik bemenő lábon aktiválni akarjuk a felhúzó ellenállást, a PORTB regiszter annak megfelelő bitjét 1-be kell állítani. A programban azért nem látjuk a felsorolt regiszterek birizgálását, mert részben alaphelyzetben hagyjuk őket, részben "tkiraaly_attiny13a.h"-ban definiált makrókkal kezelem őket.



/*******************************************************************************
*   Author       -  Kiraly Tibor
*                   http://www.tkiraaly.hu
*   Date         -  2016.01.30.
*   Chip         -  Atmel ATtiny13A
*   Compiler     -  avr-gcc ( WinAVR)
*
*   Pergesmentes kapcsolo
*
********************************************************************************
*   PonyProg Configuration and Security Bits (bepipalva):
*
*   CKSEL1 -, CKSEL0 P      - Internal Oscillator 9,6 MHz
*   CKDIV8 P                - Divide clock by 8
*   
*******************************************************************************/
#define F_CPU    1,2 MHZ                    // orajel


#include "tkiraaly_attiny13a.h"
#include <util/delay.h>


int main( void)
{
   PB0_1;                                   // LED kikapcsolasa
   PB0_OUT;                                 // LED
   PB3_1;                                   // belso felhuzo ellenallasok bekapcsolasa
   PB4_1;
   for(;;)
   {
    if( !PB3_R) PB0_1;                      // Reset
    if( !PB4_R) PB0_0;                      // Set
   }
}

Itt a vége, fuss el véle, legytek az én vendégeim, innen letölthetitek a programokat, miegymást összecsomagolva.