ATtiny13a - 4 LED-es futófény

2016-01-30

 

Ez egy futófény, ezen nincs mit sokat magyarázni. Többféle mintázatot bütyköltem hozzá, a használatban lévőn kívül a többit ki kell REM-elni, mint a példa mutatja. Látványosabb lenne több LED-del, ehhez nagyobb uC-t kell választani. Az érdekes, hogy a potival tudjuk a sebességét állítani. Látszólag egyszerűbben is meg lehetne oldani a késleltetés változtatását, de _dalay_ms(x) csalóka, ez nem egy függvény, hanem egy makró, ami fordítási időben értekelődik ki, ezért csak fix érték írható bele. Tehát arra gondolok, hogy az ADC-ből kiolvasott értet is beleírhatnánk, ha ez egy függvény lenne, de így nem tehetjük meg, helyette az ADC-ből kiolvasott szám szerint hívjuk meg.


/*******************************************************************************
*   Author       -  Kiraly Tibor
*                   http://www.tkiraaly.hu
*   Date         -  2016.01.30.
*   Chip         -  Atmel ATtiny13A
*   Compiler     -  avr-gcc ( WinAVR)
*
*   Futofeny
*
********************************************************************************
*   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)
{
   U8 n= 0;
   U8 v;
   ADC_8BIT;                           // 8 bit felbonas
   ADC_VREF_AVCC;                      // a tap a referencia feszultseg
   ADC_IN2;                            // 0. bemenet kivalasztasa
   ADC_FREE_RUN;                       // folyamatos meres
   PB0_OUT;                            // LED-ek
   PB1_OUT;
   PB2_OUT;
   PB3_OUT;
   for(;;)
   {
      v= ADCH;                         // feszultseg leolvasasa

      PORTB= 0B00001111;               // LED-ek kikpapcsolasa
      n++;

      if( n > 4) n=1;                  // leptetes 1. variacio
      if( n == 1) PORTB= 0B00000111;
      if( n == 2) PORTB= 0B00001011;
      if( n == 3) PORTB= 0B00001101;
      if( n == 4) PORTB= 0B00001110;

/*
      if( n > 4) n=1;                  // leptetes 2. variacio
      if( n == 1) PORTB= 0B00000011;
      if( n == 2) PORTB= 0B00001001;
      if( n == 3) PORTB= 0B00001100;
      if( n == 4) PORTB= 0B00000110;
*/

/*
      if( n > 12) n=1;                 // leptetes 3. variacio
      if( n ==  1) PORTB= 0B00001111;
      if( n ==  2) PORTB= 0B00000111;
      if( n ==  3) PORTB= 0B00001011;
      if( n ==  4) PORTB= 0B00001101;
      if( n ==  5) PORTB= 0B00001110;
      if( n ==  6) PORTB= 0B00000110;
      if( n ==  7) PORTB= 0B00001010;
      if( n ==  8) PORTB= 0B00001100;
      if( n ==  9) PORTB= 0B00000100;
      if( n == 10) PORTB= 0B00001000;
      if( n == 11) PORTB= 0B00000000;
*/

/*
      if( n > 17) n=1;                 // leptetes 4. variacio
      if( n ==  1) PORTB= 0B00001111;
      if( n ==  2) PORTB= 0B00001110;
      if( n ==  3) PORTB= 0B00001101;
      if( n ==  4) PORTB= 0B00001100;
      if( n ==  5) PORTB= 0B00001011;
      if( n ==  6) PORTB= 0B00001010;
      if( n ==  7) PORTB= 0B00001001;
      if( n ==  8) PORTB= 0B00001000;
      if( n ==  9) PORTB= 0B00000111;
      if( n == 10) PORTB= 0B00000110;
      if( n == 11) PORTB= 0B00000101;
      if( n == 12) PORTB= 0B00000100;
      if( n == 13) PORTB= 0B00000011;
      if( n == 14) PORTB= 0B00000010;
      if( n == 15) PORTB= 0B00000001;
      if( n == 16) PORTB= 0B00000000;
*/

      _delay_ms( 30);                  // minimum varakozas
      while( v--) _delay_ms( 1);       // trimmer fuggo varakozas
   }
}

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