Da ich mir demnächst einen Twinstar2 bauen werden und diesen mit Beleuchtung ausstatten will, habe ich mich gestern abend kurz hingesetzt und eine kleine Schaltung für einen Doppelblitz, 2x Positionsleuchten,2x Landescheinwerfer gebaut. Das ganze über einen RX Kanal Steuerbar und realisiert um einen AtTiny13.
Ja ich weiß, gibt es zuhauf. Aber ich hatte keine da und ausserdem macht selber entwicklen einfach am meisten Spass.
Das Ergebniss möchte ich euch nicht vorenthalten, vielleicht braucht ja ebenfalls jemand "mal schnell" so eine Schaltung.
Hier eine kleine Demo:
http://www.rcmovie.de/video/9d186560061e3e73cbe5/Eigenbau-Blitzer-Demo
Die Software ist über Makros einfach an seine Bedürfnisse oder geänderte Hardware anzupassen. Ein Eingriff in den eigentlichen Quellcode ist nicht nötig.
Leider kann ich keine ZIPs hochladen, deshalb poste ich den Quellode mal direkt hier rein.
Der eigentliche Quellcode:
sbi.h
Ja ich weiß, gibt es zuhauf. Aber ich hatte keine da und ausserdem macht selber entwicklen einfach am meisten Spass.
Das Ergebniss möchte ich euch nicht vorenthalten, vielleicht braucht ja ebenfalls jemand "mal schnell" so eine Schaltung.
Hier eine kleine Demo:
http://www.rcmovie.de/video/9d186560061e3e73cbe5/Eigenbau-Blitzer-Demo
Die Software ist über Makros einfach an seine Bedürfnisse oder geänderte Hardware anzupassen. Ein Eingriff in den eigentlichen Quellcode ist nicht nötig.
Leider kann ich keine ZIPs hochladen, deshalb poste ich den Quellode mal direkt hier rein.
/*
* blitzer.h
*
* Created on: 10.12.2010
* Author: cyblord
*/
#ifndef BLITZER_H_
#define BLITZER_H_
//------- Config Start -------------
//Ein- Ausgänge
//Daten und Datenrichtungsbus der LEDs
#define LED_PORT PORTB
#define LED_DIR DDRB
//Zuordnung Port->LED
#define LED_BLITZ PB0
#define LED_POS PB1
#define LED_LAND PB2
//Daten und Datenrichtungsbus für den RX Eingang
#define INPUT_PIN PINB
#define INPUT_PORT PORTB
#define INPUT_DIR DDRB
//RX Eingangsport
#define RX_IN PB4
//Intervalle für den Doppelblitz (in ms)
#define FLASH_ON_DELAY 30
#define FLASH_OFF_DELAY 100
#define FLASH_PAUSE_DELAY 1000
//Pulsbreiten für Steuerung via RX
#define PULSE_ON (1100*10)/256 //1100 µS
#define PULSE_LAND (1600*10)/256 //1600 µS
#define HYST (77*10)/256 //Hysterese
//------- Config ENDE -------------
#endif /* BLITZER_H_ */
Der eigentliche Quellcode:
/*
* blitzer.c
*
* Created on: 09.12.2010
* Author: cyblord
*/
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "sbi.h"
#include "blitzer.h"
uint16_t hitime;
uint8_t histate=0;
uint8_t volatile lightsFlash,lightsPos,lightsLand;
void setLights() {
if (lightsPos) sbi(LED_PORT,LED_POS); else cbi(LED_PORT,LED_POS);
if (lightsLand) sbi(LED_PORT,LED_LAND); else cbi(LED_PORT,LED_LAND);
}
ISR(TIM0_OVF_vect) {
if (histate) {
if (bit_is_set(INPUT_PIN,RX_IN)) hitime++;
else {
histate=0;
if (hitime<PULSE_ON) {
lightsFlash=0;
lightsPos=0;
lightsLand=0;
}
else if (hitime>=PULSE_ON+HYST && hitime<PULSE_LAND) {
lightsFlash=1;
lightsPos=1;
lightsLand=0;
}
else if (hitime>=PULSE_LAND+HYST) {
lightsFlash=1;
lightsPos=1;
lightsLand=1;
}
setLights();
hitime=0;
}
}
else {
if (bit_is_set(INPUT_PIN,RX_IN)) {
histate=1;
hitime=0;
}
}
}
void init()
{
sbi(LED_DIR,LED_BLITZ); //Flash LED Ausgang
sbi(LED_DIR,LED_POS); //Pos LEDs Ausgang
sbi(LED_DIR,LED_LAND); //Lande LEDs Ausgang
sbi(INPUT_PORT,RX_IN); //Empfänger Signal Eingang Pullups EIN
sbi(TCCR0B,CS00); //Prescaler Timer0 = system clock
sbi(TIMSK0,TOIE0); //Timer Overflow Interrupt EIN
sei(); //Interrupts Global EIN
}
void doFlash() {
if (!lightsFlash) return;
_delay_ms(FLASH_PAUSE_DELAY);
if (!lightsFlash) return;
sbi(LED_PORT,LED_BLITZ);
_delay_ms(FLASH_ON_DELAY);
cbi(LED_PORT,LED_BLITZ);
_delay_ms(FLASH_OFF_DELAY);
sbi(LED_PORT,LED_BLITZ);
_delay_ms(FLASH_ON_DELAY);
cbi(LED_PORT,LED_BLITZ);
}
int main() {
init();
while(1) {
doFlash();
}
return 0;
}
sbi.h
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif