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
Hallo Steffen! Wieso bekommst Du ein Signal mit 20Hz? Wenn Du den Nulldurchgang auswertest, kriegst Du 100 Hz raus. Und wofür brauchst Du das 1000Hz Signal? Leider kenne ich mich mit der Sprache C nicht aus und kann dadurch das PRG nicht deuten. MfG Paul
Ich bekomme nur jeden zweiten Nulldurchgang ein High-Signal, aber ich hatte mich verschrieben, natürlich ein Signal, das alle 20ms auftritt meinte ich! Also ein 50Hz Signal. Das 1000Hz Signal brauche ich, um den Einschaltzeitpunkt des Lastrelais zu bestimmen. Ich muss ja regeln können, dass ich von 0-10ms nach dem Nulldurchgang das Relais schalte, um eine variable Ausgangsleistung zu erzeugen...
Hallo Steffen! Das ist richtig. Mit den 1000Hz komme ich aber nicht klar, weil man ja eigentlich als Zündimuls auch nur 50Hz-weise den Triac ansteuern muß. Nur der Start des Impulses muß sich im Bereich zwischen 0 und 10ms ver scheiben lassen. MfG paul
Ja und genau dazu brauche ich die 1000Hz, damit im Bereich von 0-10ms verschieben kann. Allerdings vermute ich, dass mein Problem ganz wo anders liegt; es scheint so, als würde ich kein sauberes Signal vom Optokoppler auf meinen externen Interrupt bekommen. Ich werde der Sache mal auf den Grund gehen...
Steffen, neuer Ansatz. Nimm eine Gleichrichterbrücke vor deinen Opto, dann hast du 100Hz Impulse. Ab damit auf den Input-Capture. Rechenbeispiel Quartz 8MHz, Timer 1 Vorteiler auf 8, Takt damit 1 MHz, bei einem Rechteck aus dem Opto von 100 Hz steht damit der Zähler des Timer 1 bei ca. 10000 (etwas weniger wegen der Nulldurchgänge). Nun das Output-Compare Register laden und die meiste Arbeit ist getan. Michael
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.