www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Flackern beim 230v Dimmer


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mir einen kleinen Dimmer gebaut der auch soweit sehr gut 
funktioniert. Die Zero-Cross Erkennung und die Tryristor-Beschaltung 
habe ich von http://www.hoelscher-hi.de/hendrik/light/dmxdimmer.htm
Hier mal mein Programm:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <util/delay.h>

volatile uint8_t i;
volatile uint16_t ms;
volatile uint8_t s;
volatile uint8_t m;
volatile uint16_t vorgabe;
volatile uint16_t wert[160];
volatile uint16_t B;
volatile uint16_t B;
volatile uint16_t C;

ISR(INT0_vect) 
{
 TCNT1 = vorgabe;        //Zündzeitpunkt vorgeben
}

ISR (TIMER1_OVF_vect)
{
 PORTB=0x01;                    //Triac zünden 
 _delay_us(20);          //kurz warten bis Triac gezündet hat  
 PORTB=0x00;          //Triac Zündung ausschalten
}

ISR (TIMER0_OVF_vect)
{
 TCNT0=131;
 ms=ms+1;             //Millisekundenberechnung            
 if (ms==1000){
 ms=0;
 s=s+1;
 }
 if (s==60){          //Sekundenberechnung
 s=0;
 m=m+1;
 }  
}
int main(void)
{
B=64590;
for (C = 0; C < 150; C++){      //Zündzeitpunkte 
B=B+5;
wert[C]=B;
}
sei();              //Global Interrupt enable
DDRB=0x01;             //Portb.0 als Ausgang
GICR |= (1<<INT0);         //enable für Int0
MCUCR |= (1<<ISC00);       //Int0 bei fallender und steigender Flanke
TCCR0 |= (1<<CS11) | (1<<CS10); //Prescale(64) für Timer0
TCCR1B |= (1<<CS11) | (1<<CS10); //Prescale(64) für Timer1
TIMSK |= (1<<TOIE0) | (1<<TOIE1); //Timer1 und Timer2 Overflow Interrupt enable
i=1; 
while(1)
{
if (ms==30){     //langsames hochdimmen
vorgabe=wert[i];
i=i+1;
ms=0;
}
if (i==150){
TCCR0 &=0x00;
i=0;
}
}
}
Mein Problem ist das beim Timerwert zwischen 64890 - 64915 nur eine 
Halbwelle von der Hardware angeschnitten wird obwohl das Programm es 
richtig ansteuert. Kann mir vielleicht jemand bei diesem Problem helfen?

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.