Ik heb even wat in elkaar gezet, met als basis het printje van de huisjesverlichting.
Ik heb de wensen rondom de timing van Dylan overgenomen, dus eens in de 13-20 minuten flitst dit ding er even vrolijk op los.
Ik heb twee kleine wijzigingen aangebracht
1: de schakeling bevat nu 5 helder witte leds (15.000 Mcd exemplaren). Die schakelen in de tijd iets na elkaar (een paar mili seconde) en hoewel je dat net niet ziet, geeft het net iets meer effect. Op bijgaande afbeelding zie je 4 van de 5 uitgangen op de scope, waarbij je precies het tijdverschil ziet. Vooral als je de 5 leds een beetje 'uitwaaiert' geeft het echt een leuk effect zo.
2. Er komen 4 flitsen, alsof het weerlicht..
Daarnaast was er nog een ingang over, als die laag gemaakt wordt, wordt er ook een flits gegeven. Handig voor wie aan iemand even wil laten zien hoe het werkt.
Op de foto van de print, de onderdelen en de manier waarop het nu even is aangesloten. Bij gebruik van de witte leds, gebruik ik een 47 Ohm voorschakelweerstand. De witte leds zijn immers 4,2 Volt, terwijl de voedingspanning na de spanningsregelaar 5 volt is.
Bijgaand ter lering ook nog even de gebruikte code in de micro controller. Die is denk ik wel te volgen.
Het bestaaat uit 2 routines: de Main, die uitgevoerd wordt na het starten van de controller en de Flash, die aangeroepen wordt als de flitser af moet gaan. Ik heb de code vrij uitvoerig gedocumenteerd.
Wie interesse heeft in de MC, de hexfile of een printje, stuur maar een PB'tje.
Groet,
Leendert
#pragma CLOCK_FREQ 4000000
#include <system.h>
#include "boostc.h"
#include "rand.h"
#include <PIC12F629.h>
#pragma DATA _CONFIG, _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
unsigned char MainAdd;
unsigned char MainCmd;
char ltabel[5], ttabel[5];
void flash()
{
int i, n;
for (n=0; n<4; n++) {
for (i=0; i<5; i++) {
gpio += ltabel;
delay_ms(5);
} // alle leds staan nu aan
delay_ms(25); // laten we nog even aanstaan
for (i=0; i<5; i++) {
gpio -= ltabel;
delay_ms(5);
} // en ook weer uit
gpio = 0;
delay_ms(ttabel[n]*2);
}
for (i=0; i<4; i++) {
delay_ms(250);
}
}
void main()
{
char n, m, i, minuut, seconde;
// 76543210
trisio = 0b00001000; // GP0 output, GP3 input
gpio = 0; // make all outputs '0'
ttabel[0] = 12; // tabel voor de wachtminuten
ttabel[1] = 13;
ttabel[2] = 15;
ttabel[3] = 17;
ttabel[4] = 20;
ltabel[0] = 1; // 0 tabel voor de uitgangen van de PIC
ltabel[1] = 2; // 1
ltabel[2] = 4; // 2
ltabel[3] = 16; // 4
ltabel[4] = 32; // 5
for (i=0; i<64; i++) { // even een lusje bij het opstarten
gpio = ltabel[i%5]; // om te laten zien dat alle leds werken
delay_ms(100);
}
for (i=0; i<4; i++) {
flash(); // en even een flist....
}
srand(101); // vul baseline voor willekeurige waardes
while( 1 ) {
n = rand() % 5;
for (minuut = 0; minuut < ttabel[n]; minuut++) {
for (seconde = 0; seconde <60; seconde++) {
if (!gpio.3 ) { // de poort is laag
flash();
}
else {
for (m=0; m<4; m++) {
delay_ms(250);
}
} // klaar met de secondes
} // klaar met te minuten
// flashen die handel en overnieuw wachten
}
flash(); // de wachttijd is om. Gaan met de handel...
} // eind while (1)
} // einde main