#define DAC_SW 48 #define DAC_LED0 46 #define DAC_LED1 50 int dac_select = 0; bool dac_sw_pressed = false; #define LP_OUT_CLK 7 //max 12 #define BITS 12 //max 150000 #define FILT_FREQ 150000 void setup() { Serial.begin(115200); //analog analogWriteResolution(BITS); //DAC pinMode(DAC_SW, INPUT); digitalWrite(DAC_SW, HIGH); pinMode(DAC_LED0, OUTPUT); digitalWrite(DAC_LED0, HIGH); pinMode(DAC_LED1, OUTPUT); pinMode(DAC0, OUTPUT); pinMode(DAC1, OUTPUT); //PWM pinMode(LP_OUT_CLK, OUTPUT); //50% analogWrite(LP_OUT_CLK, pow(2, BITS) / 2); PWMC_ConfigureClocks(FILT_FREQ * PWM_MAX_DUTY_CYCLE, 0, VARIANT_MCK); } bool check_switch(int in, int led0, int led1, int * select, bool * pressed) { if (digitalRead(in) == 0 && *pressed == false) { *pressed = true; *select = !(*select); digitalWrite(led0, *select == 0); digitalWrite(led1, *select == 1); return true; } if (digitalRead(in) == 1) *pressed = false; return false; } int64_t y = 0; uint32_t next = 0; //**************** Premenne ****************************** #define PERIOD 1000 int64_t a = 0; //******************************************************** void loop() { check_switch(DAC_SW, DAC_LED0, DAC_LED1, &dac_select, &dac_sw_pressed); //fix period time to 100us (10kHz) while (next > micros()); next = micros() + PERIOD; //**************** Generator ***************************** if ( a == 0 ) { a = 1; y = 4095; }else{ a = 0; y = 0; } //******************************************************** //y += 2047; //clamp values if (y > 4095) y = 4095; if (y < 0) y = 0; analogWrite(DAC1, y); }