Forum: Mikrocontroller und Digitale Elektronik Nulldurchgangserkennung "geht aus"


von Randy N. (huskynet)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir die angehängte Nulldurchgangserkennung aufgebaut. INT geht 
an INT1 eines AT90CAN128. Wenn ich nun im Nulldurchgang einen Timer 
starte, der nach z.B. 5ms einen Triac zündet, funktioniert das wunderbar 
- die angeschlossene Lampe wird perfekt gedimmt.

Nun habe ich zwei Schalter angeschlossen, mit denen ich die Wartezeit 
verändern kann. Verringere (oder verlängere) ich diese testweise so 
sehr, dass die Lampe ausgeht, bekomme ich sie danach nicht wieder an, 
auch nicht, wenn ich die Zeit wieder zurück regle. Es hilft nur noch ein 
Aus- und Einschalter ODER das Berühren eines Pins des Gleichrichters 
oder ein Bein des Widerstandes mit dem Schraubenzieher (d.h. einem 
metallischen Gegenstand). Und das kann ich mir überhaupt nicht erklären, 
aber es funktioniert jedesmal. Nur einmal kurz berühren, und die Lampe 
geht wieder an. Woran könnte das liegen?

Grüße,
Randy

von Gast (Gast)


Lesenswert?

versuch mal zu testen ob die ints überhaupt noch ankommen...

z.B. eine LED blinken lassen oder so.. oder mit dem ossi an die int 
leitung

ich vermute den Fehler im Code...

von Randy N. (huskynet)


Lesenswert?

Nein sie kommen nicht an. Das ist ja das komische. Wenn ich aber einen 
Pin berühre, geht alles wieder.

Code (Takt 16 MHz):
1
volatile uint16_t delay;
2
...
3
// Nulldurchgangserkennung initialisieren
4
delay = 1875;
5
6
DDRC |= 0b00100000;  // PC5 als Ausgang
7
8
EICRA |= (1<<ISC11) | (0<<ISC10); // Interrupt bei fallender Flanke an INT1
9
DDRD &= ~(1<<INT1); // INT1 als Eingang
10
EIMSK |= (1<<INT1); // INT1-Interrupt aktivieren
INT1-Interrupt:
1
ISR(INT1_vect)
2
{
3
    TCCR1B = 0; // Timer deaktivieren
4
5
    TCNT1H = 0; // Counter zurücksetzen
6
    TCNT1L = 0;
7
  
8
    OCR1AH = (uint8_t)(delay >> 8); // Zeit setzen
9
    OCR1AL = (uint8_t)delay;
10
11
    TIMSK1 = (1<<OCIE1A);
12
    TCCR1B = (1<<WGM12) | (1<<CS11); // CTC + Prescaler 8
13
}
Timer-Interrupt:
1
ISR(TIMER1_COMPA_vect)
2
{
3
    TCCR1B = 0; // Timer deaktivieren
4
    TIFR1 = TIFR1 | (1<<OCF1A); // Eventuell schon wieder aufgetretene Interrupts unterbinden
5
6
    PORTC = 0b00100000;
7
    asm volatile ("nop"); // gekürzt: insgesamt 20 Stück
8
    PORTC = 0b00000000;
9
}

Nur, wenn es ein Softwarefehler wäre, wieso gehts dann, wenn ich einen 
Pin berühre?

von Randy N. (huskynet)


Lesenswert?

Wobei mir grad einfällt, dass ich nur im µC geprüft habe, ob die 
Interrupts aufgerufen werden (d.h. bei jedem Nulldurchgang schick ich 
eine 1 an den PC). Also ein Softwarefehler sei mal nicht ganz 
auszuschließen, aber was hat das ganze mit dem Berühren der Pins zu tun? 
Warum gehts damit?

von gast (Gast)


Lesenswert?

is da irgendwo eine (parasitäre)kapazität nach dem gleichrichter, die 
sich eventuell auflädt und an der LED keine pulsierende Gleichspannung 
mehr anliegt, sondern eine "glatte" gleichspannung? mess mal über der 
LED oder über dem Transistor

von Randy N. (huskynet)


Lesenswert?

Aber es funktioniert stundenlang, wenn ich das ganze einmal mit dem 
Berühren eines Pins "ins Rollen gebracht" habe. Hatte es heute mal 
testweise ne Stunde laufen. Ich kann dabei auch die Helligkeit ändern. 
Und wenn die Wartezeit zu groß ist, und ich nicht mehr zünde, hat das ja 
eigentlich nichts mit dieser Nulldurchgangserkennung zu tun. Also die 
läuft ja eigentlich weiter.

von Tobias P. (hubertus)


Lesenswert?

Vielleicht hast du irgend einen digitalen Eingang vergessen zu 
beschalten, und der ist jetzt offen und "empfängt" Störungen? Was für 
eine Spannung liefert der Brückengleichrichter?

von marc (Gast)


Lesenswert?

Kann das sein, daß Du über der Last mißt? Das wäre dann natürlich nichts 
mehr.

Gruß! Marc

von Randy N. (huskynet)


Lesenswert?

@marc:
Meinst du, ob ich den Nulldurchgang am Ausgang des Triacs gemessen habe? 
Wenn ja, dann hattest du recht. :-) Habs grad selbst auch gemerkt. Sowas 
kann nur mir passieren. Aufm Mikrocontroller ein Programm, das eine 
angeschlossene PS/2-Tastatur auswertet und ein Display ansteuert, aber 
dann das ganze falsch ans Netz angeschlossen. AHGRH. Ich hab praktisch 
am Ausgang meinen Nulldurchgang erkannt. Wenn ich nun an den Pin 
gekommen bin, hat diese Minispannung auf dem Schraubenzieher gereicht, 
um einen ersten Nulldurchgang zu erkennen, und dann hat der µC ja die 
Lampe angesteuert, und sich somit seinen eigenen Nulldurchgang 
generiert. Jetzt geht alles. Super, trotzdem vielen Dank!

von marc (Gast)


Lesenswert?

Is mir auch schon passiert. Genau so...

Späße! Marc

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.