Αποτελεσματική TMR0 INT ρουτίνα;

Γιατί να το διορθώσουμε, αν δεν έχει σπάσει ...

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Πολύ Καλή" border="0" />Για μένα 200us σε μία διακοπή ρουτίνας, δεν είναι τόσο άσχημα ...

έτσι θα έχετε τα εξής βήματα πρώτα:

- Ανίχνευση μηδενικού επιπέδου?
- Έναρξη TMR0? / / Περίοδο;
- Όταν υπερχειλίσεις ενεργοποίηση TRIAC
- Καθυστέρηση 200 μας
- Κλείνω TRIAC

αλλά τότε θα μπορούσε να δει ότι το δεύτερο κομμάτι του κώδικα δεν λαμβάνει όλα τα μέτρα υπόψη ...

 
H

hhhsssmmm

Guest
Γειά

Έχω PIC18F2420 με κρύσταλλο 20MHz και C18 compiler.

Έχω εκτελείται ένα απλό μετασχηματιστή συνδυασμό λαμπτήρα αλογόνου θαλερότητα μέσω ΣΜΕ μου.Το ΣΜΕ επιτυγχάνει αυτό με τον έλεγχο της γωνίας εκτόξευση του
230V AC 50Hz κυματομορφής για τον μετασχηματιστή πλευρά HT.Η TRIAC είναι Snubberless.Ακολουθεί ένα δείγμα κώδικα μου.Η μέθοδος της κωδικοποίησης έργων και παίρνω πολύ καλά αποτελέσματα .... ότι είναι η λάμπα ξεκινά από πολύ χαμηλό επίπεδο αμυδρό και στη συνέχεια να φωτίζει σταδιακά σε όλη τη διαδρομή προς την ένταση MAX.Επίσης, ο μετασχηματιστής ΠΟΤΕ θερμαίνει και τα πάντα είναι ομαλή λειτουργία.Ωστόσο, δεν είναι καλή πρακτική να μείνετε μέσα σε ένα ΔΑΜ για πάρα πολύ καιρό, όπως φαίνεται στον TMR0 Διακόψτε ρουτίνα μου, όπου το πρόγραμμα παραμένει για 200us για την TRIAC μανδάλωσης.Οτιδήποτε λιγότερο από 200us ... και η τρεμοπαίζει λαμπτήρα αλογόνου.

Κωδικός:unsigned char bulbdim = 107? / / initiallize σε ΜΗΝ ένταση/ / TMR0 είναι prescaled να 1:256void main ()

(while (1)? / / loop forever)void LowInterrupt (void)

(αν (INTCONbits.INT0IF == 1) / / αν INT0 (μηδενικού επιπέδου) να διακόψει

(bulbdim ? / / φωτίζουν μέχρι έντασηεάν (bulbdim == 215) / / MAX επιτευχθεί η έντασηbulbdim = 107? / / reset για να ΜΗΝ έντασηTMR0L = bulbdim? / / TRIAC εκτόξευση χρόνο initiallizeT0CONbits.TMR0ON = 1? / / Επιτρέπει Timer0INTCONbits.INT0IF = 0? / / Επαναφορά του λίγο INT0 Εξωτερικού Interrupt Flag)εάν (INTCONbits.TMR0IF == 1) / / Αν TMR0 διακόπτουν

(LATBbits.LATB1 = 1? / / Ενεργοποιήσετε TRIACDelay10KTCYx (1)? / / 200us TRIAC μανδάλωσης καθυστέρησηLATBbits.LATB1 = 0? / / Απενεργοποιήσετε TRIACT0CONbits.TMR0ON = 1? / / Απενεργοποίηση Timer0INTCONbits.TMR0IF = 0? / / Επαναφορά του λίγο TMR0 Interrupt Flag)) / / τέλος του LowInterrupt ISR

 

Welcome to EDABoard.com

Sponsor

Back
Top