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.