www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nulldurchgangserkennung "geht aus"


Autor: Randy N. (huskynet)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Randy N. (huskynet)
Datum:

Bewertung
0 lesenswert
nicht 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):
volatile uint16_t delay;
...
// Nulldurchgangserkennung initialisieren
delay = 1875;

DDRC |= 0b00100000;  // PC5 als Ausgang

EICRA |= (1<<ISC11) | (0<<ISC10); // Interrupt bei fallender Flanke an INT1
DDRD &= ~(1<<INT1); // INT1 als Eingang
EIMSK |= (1<<INT1); // INT1-Interrupt aktivieren
INT1-Interrupt:
ISR(INT1_vect)
{
    TCCR1B = 0; // Timer deaktivieren

    TCNT1H = 0; // Counter zurücksetzen
    TCNT1L = 0;
  
    OCR1AH = (uint8_t)(delay >> 8); // Zeit setzen
    OCR1AL = (uint8_t)delay;

    TIMSK1 = (1<<OCIE1A);
    TCCR1B = (1<<WGM12) | (1<<CS11); // CTC + Prescaler 8
}
Timer-Interrupt:
ISR(TIMER1_COMPA_vect)
{
    TCCR1B = 0; // Timer deaktivieren
    TIFR1 = TIFR1 | (1<<OCF1A); // Eventuell schon wieder aufgetretene Interrupts unterbinden

    PORTC = 0b00100000;
    asm volatile ("nop"); // gekürzt: insgesamt 20 Stück
    PORTC = 0b00000000;
}

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

Autor: Randy N. (huskynet)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Randy N. (huskynet)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: marc (Gast)
Datum:

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

Gruß! Marc

Autor: Randy N. (huskynet)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Is mir auch schon passiert. Genau so...

Späße! Marc

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.