Pequeño kit de LED usable - 12 LED PWM de un reprogramable ATtiny85 (7 / 8 paso)

Paso 7: código de

He adjuntado el Arduino "pde" archivo de código fuente a continuación en forma conveniente para el uso en el ATtiny85.

Si desea utilizar un 16 MHz Arduino luego simplemente cambiar la constante de "Bucle" en la parte superior a 128 en lugar de 8.  Esta constante hace simplemente el código todo lo repita varias veces.  Corremos nuestro ATtiny en 8 MHz, pero creo que el divisor del reloj interno se debe establecer por defecto porque se comporta como si está funcionando a 1MHz.

Para obtener una velocidad conveniente, multiplicar esta constante Loop hacia arriba por la velocidad de su reloj (por ejemplo, que sea 64 para un 328 en el oscilador interno 8 MHz) etc..  Asegúrese de que siempre es un multipe de 8 o el código es probable que tenga problemas.

El código adjunto es bastante simple y tiene sólo 4 modos:

1 - odd y Even alternando
2 - explorador hacia la derecha
3 - explorador de la izquierda
4 - "Larsen" tipo explorador alterno.

Usted puede agregar fácilmente muchos modos más y este código de núcleo sólo tiene alrededor de 1.6K, para que tengas otro 6 + para jugar con.

El mismo código debe compilar perfectamente para un Arduino sin enmienda.  En un Arduino, PB0 a PB4 son digitales "pasadores" de 8 a 12 respectivamente.  Es pins 14 a 18 en el ATmega328 real o 168 chip.  Esto es muy útil para la prueba o si son codificación mientras espera para que las piezas llegar.

Este es mi código:

Bosquejo de la prueba
Encender cada LED a su vez
Licencia MIT
Esofagogastroduodenal 2012

Esto debe ser mi multiplicador estándar por lo que yo puedo modificar el bosquejo para diferentes tiempos y velocidades de reloj.  128 para Arduino
Que sea un múltiplo de 8.

const unsigned int bucle = 8;

Mapa de 8 a 12 a los correspondientes bits del PORTB en el 328 de los pernos.  Puesto que vamos a utilizar comandos PORTB directos que esto debería funcionar en 328 y ATtiny85

Utiliza acceso directo PORTB - que es los pines D0 a D4 en pequeño Arduino o D8 a D12 en Arduino normal
Primer conjunto es esquema de los terminales actuales.
Segundo es una versión antigua:
//
Versión actual:
byte DirMatrix [12] = {B10001 B10001 B10010, B10010, B10100, B10100, B01001, B01001, B01010, B01010, B01100, B01100}; Que pines son de salida y que son de alta impedancia
byte PolMatrix [12] = {B10000 B00001 B10000, B00010, B10000, B00100, B01000, B00001, B01000, B00010, B01000, B00100}; Que pin es alta y que es bajo para cada LED
//
Versión antigua:
byte DirMatrix [12] = {B00110 B00110, B01010, B01010, B10010, B10010, B00101, B00101, B01001, B01001, B10001, B10001}; Que pines son de salida y que son de alta impedancia
byte PolMatrix [12] = {B00010 B00100, B00010, B01000, B00010, B10000, B00001, B00100, B00001, B01000, B00001, B10000}; Que pin es alta y que es bajo para cada LED

byte modo = 0; numeradas de la cero
byte const MaxModes = 4; Número de modos (así 1 si sólo define de modo 0). Si es mayor que 12 tendrá que modificar ChangeMode()
SwitchMode boolean = false;
Boolean ButtonPress = false; Esto ahora puede ser redundante.

void setup() {}

Serial.Begin(9600); Hay algunos comandos de depuración serie restante pero comentado.  Trabajan en Ardu' pero no tiny85
Serial.println ("tiny85 test");
Serial.println ("Ugi 2012");

DDRB & = B11100000; ajuste todos los pernos a alta impedancia

}

void loop() {}
interruptor (modo) {}
caso 0:
OddEvenFlash();
rotura;
caso 1:
Progressive(8,0);
rotura;
caso 2:
Progressive(8,1);
rotura;
caso 3:
Larsen(8);
rotura;
}
Si (conmutada) {SwitchMode = false; ChangeMode();}

}

Esta es la rutina central que enciende un LED.
Sólo lleva el número (0 a 11)
usos dirigen de acceso a puerto, para facilidad y rapidez
void LightLED(byte LEDno) {}
DDRB & = B11100000;  Configurar los pines entrada
PORTB & = B11100000; Ajuste todos los pernos bajo
PORTB| = PolMatrix [LEDno]; Sets pasadores correspondientes altas y bajas
DDRB| = DirMatrix [LEDno]; fijar pasadores correspondientes a la salida
}

Comprueba el estado del botón.
No llame a menudo ' cos que pierde el tiempo.
Boolean CheckButton() {}
DDRB & = B11100000;  Configurar los pines entrada
PORTB & = B11100000; Ajuste todos los pernos bajo
PORTB| = B00000100; Establecer PB2 alta - set pullup interna
delayMicroseconds(100); Necesidad de permitir resolver aumento si problemas con botón Presione
Serial.println (PINB & B00000100);
prensa booleano volátil = PINB & B00000100;
if(!Press) {/ / si derribado por interruptor
mientras (! pulse) {/ / espere hasta que el interruptor de
Serial.Print ("debounce"); Serial.println (PINB & B00000100);
Delay(20);
Pulse = PINB & B00000100;
}
verdaderas;
}
devuelven el valor false;
}

Avances de la variable "Modo".
void ChangeMode() {}
Modo ++;
Si (modo > = MaxModes) modo = 0;
Serial.println(Mode);
para (flash bytes = 0; flash < = modo; flash ++) {}
LightLED(Mode);
Delay(5);
DDRB & = B11100000;
Delay(15);
}
}

Funciones del modo definidas a continuación...

OddEvenFlash - como la función predeterminada.  Este parpadea LED pares e impar alternativamente.
Debe ser útil para depurar el hardware así como OK.
void OddEvenFlash() {}
const unsigned int contador = 300;
ButtonPress = 0;
Odd boolean = false;
mientras (!. ButtonPress) {}
para (int unsigned tiempo = 0; tiempo <(Loop*Timer); hora ++) {}
para (byte LED = 0; LED < 12; LED += 2) {}
LightLED(LED+Odd);
}
}
Impar =! Impar;
SwitchMode=CheckButton();
Si {} (conmutada)
Serial.println ("juego del SwitchMode");
retorno;
}
}
}

Progresivo de colocación
Envía un "ojo" de 4 LEDs alrededor del lazo por descolorarse adentro y hacia fuera secuencialmente.
Segunda función - otra vez para hardware de depuración y también se ve genial!

anular progresiva (byte incremento, revés boolean) {}
byte EyePos [4] = {3,2,1,0};
Si {} (inversa)
EyePos [0] = 8;
EyePos [1] = 9;
EyePos [2] = 10;
EyePos [3] = 11;
}
byte EyeInt[4]={64,192,(192-Increment),(64-Increment)};
mientras (!. ButtonPress) {}
para (byte velocidad = 0; Velocidad < Loop; Velocidad += 8) {/ / esto debe igualar velocidad de frecuencia de reloj
para (byte Pos = 0; Pos < 4; POS++) {/ / luz 4 LEDs según su brillo
LightLED(EyePos[Pos]);
Serial.Print (EyePos [Pos], DEC); Serial.Print("="); Serial.Print(EyeInt[pos],DEC); Serial.Print("");
byte de desecho;
para (byte Count = 0; Cuenta < EyeInt [Pos]; Count++) {PORTB & = B11111111;}
}
Serial.println("");

EyeInt [0] += incremento;
EyeInt [1] += incremento;
EyeInt [2] = incremento;
EyeInt [3] = incremento;

Si (EyeInt [3] < incremento) {}
EyeInt [3] = EyeInt [2];
EyeInt [2] = EyeInt [1];
EyeInt [1] = EyeInt [0];
EyeInt [0] = 0;
EyePos [3] = EyePos [2];
EyePos [2] = EyePos [1];
EyePos [1] = EyePos [0];

{if(Reverse)}
EyePos [0]--;
Si (EyePos [0] > 200) {EyePos [0] = 11;}
}
Else {}
EyePos [0] ++;
Si (EyePos [0] > 11) {EyePos [0] = 0;}
}
SwitchMode=CheckButton();
if(SwitchMode) {return;}
}
}
}
}

Onda de tipo escáner Larsen
Podrían ser capaces de hacer esto como parte del progresivo.  Yo no podía hacerla eficiente.
void Larsen(byte Increment) {}
byte EyePos [4] = {3,2,1,0};
byte EyeInt[4]={64,192,(192-Increment),(64-Increment)};
Reversa boolean = false;
mientras (!. ButtonPress) {}
para (byte velocidad = 0; Velocidad < Loop; Velocidad += 8) {/ / esto debe igualar velocidad de frecuencia de reloj
para (byte Pos = 0; Pos < 4; POS++) {/ / luz 4 LEDs según su brillo
LightLED(EyePos[Pos]);
Serial.Print (EyePos [Pos], DEC); Serial.Print("="); Serial.Print(EyeInt[pos],DEC); Serial.Print("");
para (byte Count = 0; Cuenta < EyeInt [Pos]; Count++) {PORTB & = B11111111;} / / mantenga el LED encendido durante un tiempo dependiendo de la intensidad del ojo
}
Serial.println("");
}
EyeInt [0] += incremento;
EyeInt [1] += incremento;
EyeInt [2] = incremento;
EyeInt [3] = incremento;

Si (EyeInt [3] < incremento) {}
EyeInt [3] = EyeInt [2];
EyeInt [2] = EyeInt [1];
EyeInt [1] = EyeInt [0];
EyeInt [0] = 0;
EyePos [3] = EyePos [2];
EyePos [2] = EyePos [1];
EyePos [1] = EyePos [0];

{if(Reverse)}
EyePos [0]--;
Si (EyePos [0] > 200) {EyePos [0] = 1; Reverso = false;}
}
Else {}
EyePos [0] ++;
Si (EyePos [0] > 11) {EyePos [0] = 10; Reverso = true;}
}
SwitchMode=CheckButton();
if(SwitchMode) {return;}
}
}
}

Artículos Relacionados

Kit de LED Chaser

Kit de LED Chaser

el kit de compra de información se puede encontrar aquí: http://www.easternvoltageresearch.com/led_sequencer10.htmlLEDs tienen siempre fascinante me.  Y desde que vi por primera Knight Ryder en la década de 1980, siempre tenía una "cosa" para se
Diseñar una lámpara Multi nodo LED PWM

Diseñar una lámpara Multi nodo LED PWM

este instructable le mostrará cómo diseñé un controlador de PWM de la lámpara LED. Lámparas múltiples ser ensartadas para grandes cadenas de la luz.Crear algunas blinky luces LED para Navidad siempre ha estado en mi lista de deseos. Temporada de Navi
Cómo montar un Kit de LED de Guy Manuel.

Cómo montar un Kit de LED de Guy Manuel.

Esta es una guía paso a paso sobre cómo hacer un trabajo completamente kit LED de Guy Manuel.Estas instrucciones cubren sólo la electrónica, la Asamblea de las cajas reales no se muestra aquí.El resultado final es este:http://youtu.be/eiaxZPle4vsPor
Pequeña planta de LED interior crecer sala

Pequeña planta de LED interior crecer sala

He hecho unos jardines interiores, sobre todo porque el tiempo en Michigan no permite una muy larga temporada. Recientemente se mudó a Phoenix y trató de contenedor de jardinería fuera y estaba decepcionado por la cantidad de plagas que diezmaron mi
Controlador pequeño tira de LED con LED Amp y Arduino Nano

Controlador pequeño tira de LED con LED Amp y Arduino Nano

Un pequeño LED tira regulador hecho con un amplificador de LED y un Arduino Nano. Perfecto para hacer los patrones de iluminación personalizada y control de la tira led del ordenador. Utiliza las puertas del Mosfet del amplificador para controlar la
Parpadear Me Kit: Dual LED Flasher

Parpadear Me Kit: Dual LED Flasher

el parpadeo es un circuito super simple de usar la magia de los condensadores y transistores para crear un flasher led dual que puede ser utilizado en cualquier cosa que requiere algún tipo de parpadeo de luz.  Es un super facil aprender a kit soldad
Hacer una pequeña linterna de LED de larga duración

Hacer una pequeña linterna de LED de larga duración

Este proyecto es hacer una antorcha pequeña que ofrece comodidad en la noche y una cantidad limitada de iluminación. Rojo se recomienda ya que afecta a dormir menos (y para más largo). Un resistor se utiliza para reducir el brillo de lo LED, lo que a
Cómo hacer pequeña antorcha de LED recargable de la batería del teléfono celular

Cómo hacer pequeña antorcha de LED recargable de la batería del teléfono celular

Hola chicos este es mi nuevo proyecto de bricolaje... que he terminado ayer. También lo he subido en mi cuenta de Facebook. [facebook.com/hamidstranger]...i han hecho muchísimas más cosas... pronto los subiré...Paso 1: tengo tantas ideas en mi mente.
Arco iris LED - RGB LED PWM controlador construcción - fácil construir

Arco iris LED - RGB LED PWM controlador construcción - fácil construir

paso a paso, fácil de seguir las instrucciones en la construcción de un controlador de PWM LED arco iris RGB LED. Se necesitan solamente una cantidad mínima de piezas, junto con un procesador PIC, y se puede construir uno de los mejores controladores
Pequeño kit de supervivencia lata

Pequeño kit de supervivencia lata

aceptable a largo plazo oyente primera vez llamada, si usted consigue mi deriva.Este es mi intento de subir con un kit de supervivencia sensiblemente de tamaño. No el más grande y no el más pequeño. Es probablemente una 3ª mayor y una lata Altoids. T
Super escalofriante mal LED ojos de Doom usando atTiny85 y Arduino IDE

Super escalofriante mal LED ojos de Doom usando atTiny85 y Arduino IDE

hay unos ojos misteriosos instructables por ahí. Por ejemplo, existe uno basado en un temporizador 555, uno basado en un interruptor de encendido/apagado, uno basado en Arduino y basada en la cinta.Yo quería hacer una serie de espeluznantes ojos malv
Escáner Rgb Led Pwm lámpara controlada por Arduino Nano

Escáner Rgb Led Pwm lámpara controlada por Arduino Nano

Reciclado escáner rgb led lámpara pwm controlado por Arduino NanoPaso 1: Resultado FinalEsto es lo que obtienes si sigues este instructable.Paso 2: Buscar una impresoraBusque un hp roto todo en una impresora. (Otras marcas también pueden tener las pi
Cinta de LED del arco iris (WS2812 + ATTiny85)

Cinta de LED del arco iris (WS2812 + ATTiny85)

Hola, aquí está un proyecto de domingo por la mañana, mi hija me dio esta idea algunas veces hace:En primer lugar, debe encontrar una banda que se ajusta la cabeza de la persona.La diadema puede ser un viejo.Tira de cualquier ornamento para hacer los
RGB LED luz del humor con ATtiny85

RGB LED luz del humor con ATtiny85

llaman estas cosas Luces de estado de ánimo.No sé por qué. Supongo que el cambio de colores poner algunas personas de buen humor.Aunque he observado que cuando la gente mira este estado de ánimo ligera tiende a tener un efecto similar como en una fog