Gast
#129033
Hallo,
nachdem ich meinen IR-Empfänger nun am laufen habe, kommt schon das
nächste Problem. Ich bekomme einfach keine vernünftige
Phasenanschnittssteuerung zum Laufen.. :(
Vielleicht könnt ihr mir auf die Sprünge helfen:
SIGNAL (SIG_OVERFLOW1) {
TCNT1=61536;
dim_timer++;
if ( (dim_timer==dimmer) || (dim_timer==(dimmer+10)) )
{
PORTD&=~(1<<PD0);
}
if ((dim_timer==10) || (dim_timer==20))
{
PORTD|=(1<<PD0);
}
}
SIGNAL (SIG_INTERRUPT1) {
dim_timer=0;
}
int main(void) {
dimmer=9;
DDRD=0x01;
GIMSK |= (1<<INT1);
MCUCR |= ((1<<ISC10) | (1<<ISC11));
TIMSK |= (1<<TOIE1);
TCCR1B |= (1<<CS10);
TCNT1=61536;
sei();
}
Der Externe Interrupt wird durch einen Optokoppler generiert, der immer
bei Nulldurchgang ein High Signal ausgibt, also ein Signal mit 20Hz.
Damit soll die variable dim_timer auf Null gesetzt werden. Ab diesem
Zeitpunkt wird dann gezählt, wieviel Zeit seit Nulldurchgang vergangen
ist (in ms) und dann entsprechend das Lastrelais eingeschaltet (an
PD0). In der Theorie schön und gut, aber ich bekomme keine gedimmte
Lampe sondern eine blinkende Lampe :(
Der Prozessor, ein 2313 ist mit 4Mhz getaktet, also muss ich den Timer
mit 61536 vorladen und mit voller Taktfrequenz betreiben um ein exaktes
1000Hz Signal bekommen. Aber irgendwas ist bei meiner Theorie faul.
Ich hab hier im Forum auch schon viel geblättert und gesucht, aber ich
habe keine Lösung gefunden.
Danke schonmal!
Steffen