Hallo,
ich sitzte jetzt schon seit 2 Tagen, weil ich offenbar zu blöd bin, den
Capture von einem Mega88 zum laufen zu bringen. Das Ganze soll einmal
ein über I2C ansteuerbarer Dimmer werden.
Was passiert ist folgendes: Abhängig vom Wert dimmer_val (wird zur
Laufzeit über DebugWire verändert) funktioniert das Ganze einwandfrei
oder der Triac wird nur jede zweite Halbwelle gezündet (blau). Die
Polarität spielt keine Rolle, das Ganze kippt auch manchmal.
Die Nulldurchgangserkennung funktioniert allerding, weil ich im INT0
Interrupt einen Pin togglen lasse (gelb).
Auf dem einen Bild ist dimmer_val einmal 300, das zweite wurde mit 500
gemacht.
Vieln Dank schon mal für sachdienliche Hinweise :)
Schorschi
Nachdem mein Quelltext relativ kurz ist, hoffe ich dass ich den hier
reinsetzen darf:
/*********************************************************************/
#include <stdlib.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
// Für Bitmanipulationen
#define BIT0 0x01
#define BIT1 0x02
#define BIT2 0x04
#define BIT3 0x08
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80
unsigned int dimmer_val=2; // werte bis 1200, sonst zündung der nächsten
periode
ISR ( INT0_vect ) // nulldurchgangserkennung
{
TCCR1B &= ~(1<<CS11); // stop timer
PORTB ^= BIT0;
TCNT1H=0x00; // reset timer value
TCNT1L=0x00;
OCR1AH = ( dimmer_val & 0xFF00 ) >> 8; // dauer bis capture
OCR1AL = ( dimmer_val & 0x00FF );
TCCR1A |= (1 << COM1A0)|(1 << COM1A1); // set output on capture
TCCR1B |= (1<<CS11); // clock /8 is timer clock
}
ISR( TIMER1_COMPA_vect ) // COMPA interrupt
{
TCCR1B &= ~(1<<CS11);
TCNT1H=0x00; // reset timer value
TCNT1L=0x00;
OCR1AH=0x00; // dauer bis capture
OCR1AL=0x30;
TCCR1A &= ~(1 << COM1A0); // reset output on capture
TCCR1B |= (1<<CS11); // clock /8 is timer clock
}
int main(void) {
EICRA |= (1 << ISC01)|(1 << ISC00);
EIMSK |= (1 << INT0);
TIMSK1 |= (1<<OCIE1A); // generate interrupt on capture
DDRB |= (1 << PB1)|(1 << PB0); // enable PD5 as output
sei();
while(1){
}
}
/*********************************************************************/
Hab gerade den Wert dimmer_val durchlaufen lassen und muss mich verbessern: Es kommt manchmal ein komplettes Durcheinander zustande....
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.


