Forum: Mikrocontroller und Digitale Elektronik Verzweifle mit Dimmer


von Steffen Abel (Gast)


Lesenswert?

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

von Paul Baumann (Gast)


Lesenswert?

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

von Steffen Abel (Gast)


Lesenswert?

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...

von Paul Baumann (Gast)


Lesenswert?

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

von Steffen Abel (Gast)


Lesenswert?

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...

von Michael (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.