Kleine draagbare LED kit - 12 PWM LEDs uit een reprogramable ATtiny85 (7 / 8 stap)

Stap 7: Code


ik heb bijgevoegd de Arduino "pde" broncode bestand hieronder in de vorm geschikt voor gebruik op de ATtiny85.

Als u wilt gebruiken op een 16 wijzigt MHz Arduino gewoon de "Lus" constante boven tot 128 in plaats van 8.  Deze constante maakt gewoon de code alles een bepaald aantal keren herhalen.  Wij draaien onze ATtiny op 8 MHz, maar ik denk dat de interne klok scheidingslijn moet standaard worden ingesteld omdat het gedraagt zich alsof het draait op 1MHz.

Om een geschikte snelheid, vermenigvuldig deze constante lus omhoog met de snelheid van uw klok (bijvoorbeeld het maken voor een ' 328 waarop de interne 8MHz oscillator 64) enz.  Zorg ervoor dat er altijd een veelvoudig van 8 of de code is waarschijnlijk moeite hebben.

De bijgevoegde code is vrij eenvoudig en heeft slechts 4 modi:

1 - odd & Even afwisselend
2 - scanner met de klok mee
3 - scanner linksom
4 - "Larsen" Typ afwisselend scanner.

Kunt u gemakkelijk veel meer vormen toevoegen en deze kernprogramma duurt slechts rond 1.6K, zodat u een andere 6K + om mee te spelen.

Dezelfde code moet compileren heel goed voor een Arduino ongewijzigd.  Op een Arduino, PB0 aan PB4 zijn digitale "pinnen" 8 tot en met 12 respectievelijk.  Dat wil zeggen 14 tot en met 18 pinnen op de werkelijke ATmega328 of ' 168 chip.  Dit is heel handig voor testdoeleinden of als u zijn coderen terwijl u op onderdelen wacht te komen.

Dit is mijn code:

Schets van de test
Elke LED beurtelings inschakelen
MIT-licentie
Ugi 2012

Dat is mijn standaard-vermenigvuldiger zodat ik kan de schets voor verschillende timing en kloksnelheden tweak.  128 voor Arduino
Maak het een veelvoud van 8!

Const unsigned int lus = 8;

8 tot 12 kaart naar de relevante bits van PORTB op de ' 328, pennen.  Omdat wij direct PORTB opdrachten gebruikt zou moeten dit werken op ' 328 en ATtiny85

Deze maakt gebruik van directe toegang PORTB - thats pinnen D0 te D4 op Tiny Arduino of D8 naar D12 op normale Arduino
Eerste reeks is huidige pin lay-out.
Tweede set is oude versie:
//
Huidige versie:
byte DirMatrix [12] = {B10001, B10001, B10010, B10010, B10100, B10100, B01001, B01001, B01010, B01010, B01100, B01100}; Welke pinnen worden uitgevoerd en die zijn hoge impedence
byte PolMatrix [12] = {B10000, B00001, B10000, B00010, B10000, B00100, B01000, B00001, B01000, B00010, B01000, B00100}; Welke pin is hoog en laag voor elke LED
//
Oude versie:
byte DirMatrix [12] = {B00110, B00110, B01010, B01010, B10010, B10010, B00101, B00101, B01001, B01001, B10001, B10001}; Welke pinnen worden uitgevoerd en die zijn hoge impedence
byte PolMatrix [12] = {B00010, B00100, B00010, B01000, B00010, B10000, B00001, B00100, B00001, B01000, B00001, B10000}; Welke pin is hoog en laag voor elke LED

byte modus = 0; genummerd vanaf nul
Const byte MaxModes = 4; Werkelijke aantal modi (dus 1 als alleen Mode 0 gedefinieerd). Als groter dan 12 moet wijzigen ChangeMode()
Boole SwitchMode = false;
Boole ButtonPress = false; Dit is nu overbodig.

VOID Setup {}

Serial.begin(9600); Er zijn sommige debugging seriële commando's resterende maar commentaar uit.  Ze werken op Ardu' maar niet tiny85
Serial.println ("tiny85 test");
Serial.println ("Ugi 2012");

DDRB & = B11100000; alle pinnen ingesteld op hoge impedence

}

void loop {}
schakelaar (modus) {}
Case 0:
OddEvenFlash();
breken;
Case 1:
Progressive(8,0);
breken;
Case 2:
Progressive(8,1);
breken;
Case 3:
Larsen(8);
breken;
}
Als (SwitchMode) {SwitchMode = false; ChangeMode();}

}

Dit is de centrale routine die een LED licht.
Duurt slechts het nummer van de LED (0 t/m 11)
Gebruik directe poort toegang voor gemak en snelheid
VOID LightLED(byte LEDno) {}
DDRB & = B11100000;  Alle pennen instellen
PORTB & = B11100000; Alle pinnen laag ingesteld
PORTB| = PolMatrix [LEDno]; Stel relevante pinnen hoge & lage
DDRB| = DirMatrix [LEDno]; twee relevante pennen voor uitvoer instellen
}

Controleert de status van de knop.
Roep het niet te vaak ' cos het afval tijd.
Booleaanse CheckButton() {}
DDRB & = B11100000;  Alle pennen instellen
PORTB & = B11100000; Alle pinnen laag ingesteld
PORTB| = B00000100; PB2 hoog - set interne pullup instellen
delayMicroseconds(100); Moet worden toegestaan om af te wikkelen verhoging als problemen met knop druk op
Serial.println (PINB & B00000100);
vluchtige Booleaanse pers = PINB & B00000100;
if(!Press) {/ / als neergehaald door schakelaar
terwijl (! druk op) {/ / wachten tot switch vrijgegeven
Serial.Print ("ontdendering"); Serial.println (PINB & B00000100);
vertraging(20);
Druk op = PINB & B00000100;
}
return true;
}
return false;
}

Voorschotten op de "Mode"-variabele.
VOID ChangeMode() {}
Modus ++;
Als (modus > = MaxModes) modus = 0;
Serial.println(mode);
voor (byte flash = 0; flash < = Mode; flash ++) {}
LightLED(Mode);
delay(5);
DDRB & = B11100000;
delay(15);
}
}

Modus functies hieronder omschreven...

OddEvenFlash - ontworpen als de standaardfunctie.  Dit flitsen en oneven LED afwisselend.
Moet nuttig zijn voor foutopsporing van de hardware, evenals het kijken OK.
VOID OddEvenFlash() {}
Const unsigned int Timer = 300;
ButtonPress = 0;
Booleaanse oneven = false;
terwijl (!. ButtonPress) {}
voor (int unsigned tijd = 0; tijd <(Loop*Timer); tijd ++) {}
voor (byte LED = 0; LED < 12; LED += 2) {}
LightLED(LED+Odd);
}
}
Oneven =! Oneven;
SwitchMode=CheckButton();
Als (SwitchMode) {}
Serial.println ("SwitchMode instellen");
terugkeer;
}
}
}

Progressieve Looping
Stuurt een "oog" van 4 LED's rond de lus door het in-en uitfaden opeenvolgend.
Tweede functie - opnieuw steun hardware foutopsporing & ook ziet er cool!

VOID progressief (byte Increment, Booleaanse Reverse) {}
byte EyePos [4] = {3,2,1,0};
Als (Reverse) {}
EyePos [0] = 8;
EyePos [1] = 9;
EyePos [2] = 10;
EyePos [3] = 11;
}
byte EyeInt[4]={64,192,(192-Increment),(64-Increment)};
terwijl (!. ButtonPress) {}
voor (byte snelheid = 0; Snelheid < lus; Snelheid += 8) {/ / dit moet gelijke snelheid voor clock freq
voor (byte Pos = 0; POS < 4; POS++) {/ / light 4 LEDs volgens hun helderheid
LightLED(EyePos[Pos]);
Serial.Print (EyePos [Pos], DEC); Serial.Print("="); Serial.Print(EyeInt[POS],DEC); Serial.Print("");
byte schroot;
voor (byte Count = 0; Graaf < EyeInt [Pos]; Count++) {PORTB & = B11111111;}
}
Serial.println("");

EyeInt [0] += Increment;
EyeInt [1] += Increment;
EyeInt [2]-= Increment;
EyeInt [3]-= Increment;

Als (EyeInt [3] < Increment) {}
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]--;
Als (EyePos [0] > 200) {EyePos [0] = 11;}
}
else {}
EyePos [0] ++;
Als (EyePos [0] > 11) {EyePos [0] = 0;}
}
SwitchMode=CheckButton();
if(SwitchMode) {terugkeer;}
}
}
}
}

Larsen scanner type Golf
Zou kunnen doen dit als onderdeel van progressieve.  Ik kon het niet maken efficiënt.
VOID Larsen(byte Increment) {}
byte EyePos [4] = {3,2,1,0};
byte EyeInt[4]={64,192,(192-Increment),(64-Increment)};
Booleaanse Reverse = false;
terwijl (!. ButtonPress) {}
voor (byte snelheid = 0; Snelheid < lus; Snelheid += 8) {/ / dit moet gelijke snelheid voor clock freq
voor (byte Pos = 0; POS < 4; POS++) {/ / light 4 LEDs volgens hun helderheid
LightLED(EyePos[Pos]);
Serial.Print (EyePos [Pos], DEC); Serial.Print("="); Serial.Print(EyeInt[POS],DEC); Serial.Print("");
voor (byte Count = 0; Graaf < EyeInt [Pos]; Count++) {PORTB & = B11111111;} / / hold de LED branden gedurende een tijd afhankelijk van de intensiteit van de ogen
}
Serial.println("");
}
EyeInt [0] += Increment;
EyeInt [1] += Increment;
EyeInt [2]-= Increment;
EyeInt [3]-= Increment;

Als (EyeInt [3] < Increment) {}
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]--;
Als (EyePos [0] > 200) {EyePos [0] = 1; Reverse = false;}
}
else {}
EyePos [0] ++;
Als (EyePos [0] > 11) {EyePos [0] = 10; Reverse = true;}
}
SwitchMode=CheckButton();
if(SwitchMode) {terugkeer;}
}
}
}

Gerelateerde Artikelen

Hoe te rijden een heleboel LEDs uit een paar pennen van de microcontroller.

Hoe te rijden een heleboel LEDs uit een paar pennen van de microcontroller.

Met behulp van het feit dat vele pennen van de microcontroller drie staten hebben (+ V, GND, of"hoge impedence", je kunt rijden N*(N-1) LEDs van N pins. Dus het weinig 8PIN microcontroller zoals een PIC12Fxxx of een ATtiny11 kan rijden 20 LEDs o
Bouwen van een ultra draagbare en accu aangedreven tracing lightbox uit een oude monitor en een osram ledstixx

Bouwen van een ultra draagbare en accu aangedreven tracing lightbox uit een oude monitor en een osram ledstixx

VIDEONadat we via het net te vinden van een slanke batterij aangedreven tracing lightbox voor mijn tekening. Mij konden uitsluitend vondst die zo omvangrijk, geschikt voor socket aangedreven en extreem duur. Dus ik dacht: waarom niet ik net bouwen mi
Hoe maak je een Wind Powered LED van een VCR

Hoe maak je een Wind Powered LED van een VCR

deze tutorial wordt uitgelegd hoe u een wind aangedreven LED uit een oude videorecorder en een pinwheel. U kunt ook een oude cd-rom-station als u niet over een videorecorder.Als u geïnteresseerd in de tutorial bent over het maken van dit vanaf een cd
Hoe maak je een kleine DIY LED Projector

Hoe maak je een kleine DIY LED Projector

ik zijn bezig dit voor over enige tijd. Ik verdunt te doen die niet te duur maar doet het werk van iets een stuk duurder. Ik denk in deze webpagina vindt u veel mensen doen hetzelfde, en dat is echt nuttig voor ons allemaal.Zie meer coole projecten i
Ultra heldere draagbare LED-lamp

Ultra heldere draagbare LED-lamp

Hallo , dit is mijn eerste instructable hoop dat u allen genieten van met dit...Dit is een zeer nuttig draagbare led lamp met verstelbare arm, het krijgt kracht van accu, zodat we kunnen gebruiken deze lamp als Pechlamp wanneer macht afsluit.om dit t
Net op tijd voor de feestdagen - kappen jezelf een vrolijk kleine set LED Kerstverlichting

Net op tijd voor de feestdagen - kappen jezelf een vrolijk kleine set LED Kerstverlichting

nu de feestdagen zijn snel nadert-- en een reeks van LED-lampjes gaat voor slechts vier of vijf dollar--het is hoog tijd om uw draad scharen en heat-shrink tubing, en maken een aantal flitsende lichten die u van je Arduino beheren kunt!In dit instruc
Rijden van RGB LED strips uit een Arduino

Rijden van RGB LED strips uit een Arduino

Kerstmis komt eraan en je kunt je afvragen hoe het kleurrijke en helder met een Arduino en een RGB LED strip te maken. Tenminste, was dat precies wat ik deed een jaar geleden en was niet kundig voor vondst geen duidelijke en eenvoudige instructies ov
Dimbare draagbare Led schijnwerper.

Dimbare draagbare Led schijnwerper.

ik wilde een lichtgewicht en draagbare led schijnwerper met een dimmer. Hier is hoe ik het deed dit mini project.Stap 1: Het geval. Met behulp van een oude solar lamp-zaak, ik ging over te maken van mijn floodlight.Stap 2: De leds.Elk van de matrices
Draagbare LED Matrix gezichtsmasker

Draagbare LED Matrix gezichtsmasker

Eigenlijk gewoon een 12 x 16 pixel LED matrix een wearable masker verfilmd. Een hoge impact polystyreen Kunststof grondplaat met 142 pixels voor WS2812B 60 LEDs per meter strip gekoppeld. Elke pixel is van een enkele kleine Pixel Controller Ion. onaf
Maak een ALTOIDS kleine USB LED-TESTER / FLASH DRIVE (met Voltages regelbaar)

Maak een ALTOIDS kleine USB LED-TESTER / FLASH DRIVE (met Voltages regelbaar)

ik heb altijd al iets met behulp van een kleine geval van alotids te maken, maar ik kon nooit erachter te komen wat tot voor kort! Dit omvat hoe te maken van een LED-tester (met spanning selectie) / flash drive. Het usb gebruikt als een stroombron (5
PLAE - draagbare Led Angel Eyes [+ 1000lm]

PLAE - draagbare Led Angel Eyes [+ 1000lm]

Hallo iedereen!Dit is het uiteindelijke resultaat gezien binnen en buiten:Ik verontschuldig me voor de kwaliteit van de video, maar het is moeilijk om een goede kwaliteit video's nachts, zelfs met een goede digitale camera. In feite is het niet duide
Kerstboom LED lamp... uit een doos Ferrero chocolade!

Kerstboom LED lamp... uit een doos Ferrero chocolade!

Niet weg te gooien de doos van de Ferrero collectie chocolade! Als u notities geschreven in bloed voor de deur verwachtte. Spullen van het vak met ledjes erin en je hebt een redelijk eenvoudig LED Kerstdecoratie! En Let op dat dit een heel goed excuu
Hoe Vervang de witte LED uit uw sleutelhanger zaklamp met een RGB LED.

Hoe Vervang de witte LED uit uw sleutelhanger zaklamp met een RGB LED.

Hi,In deze eenvoudige instructable 'm I gonna leer je hoe de witte LED uit uw sleutelhanger zaklamp vervangen door een RGB-LED. Een RGB-LED is een rode, groene, blauwe LED gecombineerd tot één LED. U kunt het vervangen van elke kleur, maar ik denk da
Draagbare LED tracering lichtbak (upcycled van LCD TFT))

Draagbare LED tracering lichtbak (upcycled van LCD TFT))

Lichtbakken bent één van hen belachelijk geprijsde artikelen dat op hetzelfde moment ze zo makkelijk zijn te maken, en dat is één reden instructables is vol van dergelijke projecten.Er zijn ook veel manieren om ze te maken, dus er vele benaderingen v