ZCD Free-Running Code
Example
#include <avr/io.h>
void ZCD0_Init(void);
void PORT_Init(void);
void ZCD0_Init(void)
{
ZCD0.CTRLA = ZCD_ENABLE_bm
| ZCD_OUTEN_bm;
}
void PORT_Init(void)
{
PORTD.PIN1CTRL |= PORT_ISC_INPUT_DISABLE_gc;
PORTA.DIRSET |= PIN7_bm;
PORTA.OUTSET |= PIN7_bm;
}
int main(void)
{
ZCD0_Init();
PORT_Init();
while(1)
{
;
}
}
ZCD Frequency Detection Code
Example
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t signal_frequency = 0;
void CLK_Init (void);
void PORT_Init (void);
void ZCD0_Init (void);
void TCB0_Init (void);
void EVSYS_Init (void);
void CLK_Init(void)
{
_PROTECTED_WRITE (CLKCTRL.MCLKCTRLA, CLKCTRL_CLKSEL_OSCHF_gc);
_PROTECTED_WRITE (CLKCTRL.OSCHFCTRLA, CLKCTRL_FREQSEL_4M_gc);
}
void PORT_Init(void)
{
PORTD.PIN1CTRL = PORT_ISC_INPUT_DISABLE_gc;
PORTA.OUTSET |= PIN7_bm;
PORTA.DIRSET |= PIN7_bm;
}
void ZCD0_Init(void)
{
ZCD0.CTRLA = ZCD_ENABLE_bm
| ZCD_OUTEN_bm;
}
void TCB0_Init(void)
{
TCB0.CTRLB = TCB_CNTMODE_FRQ_gc;
TCB0.EVCTRL = TCB_CAPTEI_bm;
TCB0.INTCTRL = TCB_CAPT_bm;
TCB0.CTRLA = TCB_CLKSEL_DIV2_gc
| TCB_ENABLE_bm
| TCB_RUNSTDBY_bm;
}
void EVSYS_Init(void)
{
EVSYS.CHANNEL0 = EVSYS_CHANNEL0_ZCD0_gc;
EVSYS.USERTCB0CAPT = EVSYS_CHANNEL00_bm;
}
int main(void)
{
CLK_Init();
TCB0_Init();
EVSYS_Init();
ZCD0_Init();
PORT_Init();
while(1)
{
;
}
}
ISR(TCB0_INT_vect)
{
signal_frequency = TCB0.CCMP;
}
ZCD Active Bridge Code
Example
#include <avr/io.h>
void ZCD0_Init(void);
void ZCD1_Init(void);
void PORT_Init(void);
void EVSYS_Init(void);
void PORT_Init(void)
{
PORTE.PIN3CTRL = PORT_ISC_INPUT_DISABLE_gc;
PORTD.PIN1CTRL = PORT_ISC_INPUT_DISABLE_gc;
PORTB.OUTSET |= PIN2_bm;
PORTB.DIRSET |= PIN2_bm;
PORTC.OUTSET |= PIN2_bm;
PORTC.DIRSET |= PIN2_bm;
}
void ZCD0_Init(void)
{
ZCD0.CTRLA = ZCD_ENABLE_bm;
}
void ZCD1_Init(void)
{
ZCD1.CTRLA = ZCD_ENABLE_bm
| ZCD_INVERT_bm;
}
void EVSYS_Init(void)
{
EVSYS.CHANNEL0 = EVSYS_CHANNEL0_ZCD0_gc;
EVSYS.USEREVSYSEVOUTB = EVSYS_CHANNEL00_bm;
EVSYS.CHANNEL1 = EVSYS_CHANNEL1_ZCD1_gc;
EVSYS.USEREVSYSEVOUTC = EVSYS_CHANNEL01_bm;
}
int main(void)
{
EVSYS_Init();
ZCD0_Init();
ZCD1_Init();
PORT_Init();
while(1)
{
;
}
}