Blauwe LED dawn simulator voor Soleil zon Alarm (9 / 11 stap)

Stap 9: Programma microcontroller

De code en de makefile zijn geschreven om te werken met avr-gcc. Kort, het berekent het pulserend sproeien van de klok, berekent de gewenste LED-besturingsniveau en spuugt een PWM-signaal. Er is sommige gemiddeld van de input- en output waarden om ongewenste knipperen van de LED's (zoals wanneer ze net een zonsopgang beginnen). In wezen, de microcontroller fungeert als een niet-lineaire PWM-filter.

Code: (download het .c bestand in plaats van knippen en plakken van deze tekst; er zijn sommige problemen met de syntaxis met opmaak)

 /* LED microcontroller dimmer for use with Soleil Sun AlarmWritten for Atmel ATMega8 and avr-gccEric J. WilhelmSquid Labs, LLCAttribution-NonCommercial-ShareAlike 2.5You are free: * to copy, distribute, display, and perform the work * to make derivative worksUnder the following conditions:by Attribution. You must attribute the work in the manner specified by the author or licensor.Noncommercial. You may not use this work for commercial purposes.Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. * For any reuse or distribution, you must make clear to others the license terms of this work. * Any of these conditions can be waived if you get permission from the copyright holder.*/#include <inttypes.h>#include <avr/io.h>#include <avr/interrupt.h>#include <avr/signal.h>#include <math.h># define OC1 PB1# define DDROC DDRB# define OCR OCR1Avolatile uint16_t xtimer;volatile uint16_t timer0;volatile uint8_t status;SIGNAL(SIG_OVERFLOW0){ timer0++; TCNT0=96; // preload the timer with 96 to make this interrupt occur every 20 us.}SIGNAL(SIG_OVERFLOW1){ //The interrupts don't work properly without this definition.}// falling edge PWM signal (rising edge at clock; reversed due to optoisolator)SIGNAL(SIG_INTERRUPT1) { // Zero timer0 to count the length of the positive pulse timer0=0; status=1;}//rising edge PWM signal (falling edge at clock; reversed due to optoisolator)SIGNAL(SIG_INTERRUPT0) { //record the length of the positive pwm signal in xtimer // if timer0 is greater than approximately 263 (at 20 us per interrupt) than the pulse was missed if(timer0<270) xtimer=timer0; status=0;}voidioinit (void){ // Timer1 does ~16-bit PWM TCCR1A = _BV (COM1B1) | _BV (WGM11) | _BV (COM1A1); TCCR1B = _BV (WGM13) | _BV (WGM12) | _BV (CS10); ICR1 = 65535; //Timer0 counts TCCR0 = _BV (CS00); TCNT0 = 96; timer0=0; // set PWM value to 0 OCR = 0; //enable OC1 as output DDROC = _BV (OC1); //enable external interrupts GICR = _BV (INT1) | _BV (INT0); //INT0 is rising edge, INT1 is falling edge MCUCR = _BV (ISC01) | _BV (ISC00) | _BV(ISC11); xtimer=0; status=0; //enable timers timer_enable_int (_BV (TOIE1) | _BV (TOIE0) ); // enable interrupts sei ();}intmain (void){ #define B -0.00325 #define C -11.09 #define D 0.396503 int i,on=0, oncounter=0; unsigned int x(100), y; long t(100), u; ioinit (); for (;;) { //average xtimer over samples because it jumps around alot for(i=99;i>0;i--) { x(i) = x(i-1); } x(0) = xtimer; y=0; for(i=0;i<100;i++) { y = y+x(i); } y=y/100; //divide by 5 because the clock has 120 us resolution on its PWM y=y/5; // average the output so it doesn't jump around for(i=99;i>0;i--) { t(i) = t(i-1); } //determine what to do if(timer0>270 && status == 1 && on == 1) { //Turn light on t(0) = 0; on=1; } else if(timer0>270 && status == 0) { //Turn light off t(0) = 65535; xtimer=0; on=0; oncounter=0; } else if(timer0<270){ t(0) = 65535*(1-exp((B*y + D)*y + C)); if(t(0)>65535) t(0) = 65535; if(t(0)<0) t(0) = 0; } //oncounter prevents the light from turning on suddenly from an off state if timer0>270, but there's a positive pulse on the PWM //this happens during the very start of a sunrise, when the clock's PWM hasn't quite turned on at the right frequency else if(timer0>270 && status == 1) { if(++oncounter==5) { on = 1; oncounter=0; } } // average the output so it doesn't jump around u=0; for(i=0;i<100;i++) { u=u+t(i); } //Change the output PWM OCR = u/100; } return (0);} 

Gerelateerde Artikelen

Blauwe LED lichtbak

Blauwe LED lichtbak

bouwen van uw eigen blauwe LED lichtbak bestrijding SAD en winter blues. Beter slapen en wakker worden met meer energie tijdens het verkennen van de wereld voor hoogvermogen LEDs. Als 18 Watt LED power is niet genoeg om u te wekken, voeg gewoon meer
Blauwe LED transilluminator

Blauwe LED transilluminator

dit instructable beschrijft hoe maak je een blauwe LED (470nm) transilluminator voor DNA geschikt zijn met behulp van SYBR veilige kleurstoffen. De transilluminator heeft een 6 x 7 cm kijkoppervlak om kleine agarose gel.De transilluminator kan ook wo
LED Dawn / Sunrise Alarm Clock, nachtlampje & veiligheid Light - Arduino compatibele

LED Dawn / Sunrise Alarm Clock, nachtlampje & veiligheid Light - Arduino compatibele

zoals de nachten geleidelijk verlengd in het najaar van 2011, ik ontdekte de geneugten van Arduino en dacht dat het zou een geweldige manier om iets dat ik voor een lange tijd wilde - een zachte manier om op een winter's ochtend wakker te worden.  He
Hoe het bouwen van een 5 kanaals vlam-minder LED kaars Simulator

Hoe het bouwen van een 5 kanaals vlam-minder LED kaars Simulator

dit Instructable wordt uitgelegd hoe te construeren en 5 Channel "vlam-less" LED kaars stuurprogramma wijzigen.Onze hackerspace "The Rabbit-Hole" heeft een pompoen snijwerk nacht en wij wilden proberen iets anders aan het licht van de
LED licht meubilair voor Aquarium, licht groeien of winkel

LED licht meubilair voor Aquarium, licht groeien of winkel

LED's gebruik van relatief weinig energie en hebben een lange levensduur. De meeste LEDs zijn beoordeeld voor 50.000 of meer uren. Ter vergelijking bronnen meer traditionele licht alleen laatste ongeveer 2000 uur. Plus, LEDs zijn efficiënte - ze gebr
Blauwe LED fiets wiel

Blauwe LED fiets wiel

Hallo iedereen!In deze ible zal ik u tonen hoe te bouwen van een grappig en cool LED-project.Ik zal in principe veilig 6 blauwe LED's aan de spaken van het wiel.Het resultaat zal fantastisch zijn! En het is ook een nuttig project, want deze LEDs, tij
Blauwe LED muis

Blauwe LED muis

moe van die standaard rood licht onder uw muis? Schakel het uit!alles wat u nodig hebt is een soldeerbout (en bij voorkeur een desoldering hulpmiddel alsmede) voerde een multimeter, en de kleur u wilt (en eventueel een weerstand).Ik gebruikte een goe
LED groeien licht voor kamerplanten voor $30! Eenvoudig!

LED groeien licht voor kamerplanten voor $30! Eenvoudig!

Hello! En welkom op mijn instructable!Als u als me bent en niet de meeste vensters hebben en willen groeien sommige planten binnen., is hier hoe u het kon doen!Normaal ledverlichting plant kunnen gaan voor $100 + zal ik laten zien hoe ze voor veel go
Maak een mooie blauwe LED-Lamp (door Brad Justinen)

Maak een mooie blauwe LED-Lamp (door Brad Justinen)

een Fancy blauw regendruppel Ledlamp uit een uitval van 2 x 4, sommige acrylaat plexiglas en sommige blauwe LED's maken.Hier is een lijst van de hulpmiddelen die ik gebruikte, u mei zitten kundig wegkomen met het gebruik van minder:-Figuurzagen-Drill
Blauwe LED auto Radio Mod

Blauwe LED auto Radio Mod

Project wijzigen de achtergrondverlichting op een autoradio te gebruiken van blauwe LED's. Ik oorspronkelijk schreef en dit gepost op mijn blog en kan gevonden worden op:http://www.yorkspace.com/2006/02/35De radio is het Delco AM/FM/CD-model, die in
Eenvoudige Arduino LED kleur Sensor voor Beginners

Eenvoudige Arduino LED kleur Sensor voor Beginners

Er zijn een paar verschillende soorten kleur sensoren.Degene die zijn gebruikt in dit instructable is een "reflecterende" kleur sensor heeft een rood licht groen licht bron bron een blauwe lichtbron (een R, G, B LED zou werken) en een lichtsenso
Blauwe LED Flashlight Mod

Blauwe LED Flashlight Mod

hier is een snelle 10 minuten hack te schakelen van een gewone witte LED-zaklamp in een veel koeler blauwe LED een.Stap 1: Ontmanteling van het deel van de LED van de zaklamp Haal appart het bovenste gedeelte van de zaklamp, en verwijder de LEDs uit
Mini LED Spot Light voor computerkast of andere plat oppervlak

Mini LED Spot Light voor computerkast of andere plat oppervlak

deze miniture LED spot licht kunt toevoegen een warme gloed en fleuren de blik van de behuizing van uw computer. Het is klein en ronde en kan bijna ieder waar in een behuizing gemonteerd worden. De printplaat is net iets kleiner dan een cent heeft no
Hoe maak je Led ring licht voor camera

Hoe maak je Led ring licht voor camera

gemakkelijke en leuke manier om led ring licht voor uw digitale camera.U hoeft alleen wit 8ST stro leds, wit kunststof bord en vrouwelijke dc-aansluiting.Bezoek mijn blogspot:http://macoprojects.blogspot.com ofGa naar mijn kanaal:https://www.youtube.