// Einspeisewechselrichter // UVLO unsigned long netzist; unsigned long netzstart; bool netz; bool uvlonetz; // Nulldurchgang int nulldurchgangspin = A5; bool nulldurchgang; bool nulldurchgangvorher; bool nulldurchgangflanke; // Frequenzbegrenzung nach oben unsigned long ista; unsigned long starta; unsigned long ausvza = 8800; bool nulldurchganga; bool nulldurchgangavorher; bool nulldurchgangaflanke; // dc-dc-Converter Start unsigned long istb; unsigned long startb; unsigned long ausvzb = 2500; bool nulldurchgangb; bool nulldurchgangbvorher; bool dcdcstart; unsigned long istc; unsigned long startc; unsigned long ausvzc = 4500; bool nulldurchgangc; bool nulldurchgangcvorher; // Testpins int testxpin = 10; int testypin = 11; int testzpin = 12; int ledpin = 13; void setup() { pinMode(ledpin,OUTPUT); pinMode(testxpin,OUTPUT); pinMode(testypin,OUTPUT); pinMode(testzpin,OUTPUT); } void loop() { // UVLO Netzspannung (bei Unterspannung HIGH) netz = (analogRead(nulldurchgangspin) > 800); if(!netz) { netzist = millis(); if(netzist - netzstart > 11) { uvlonetz = HIGH; } } else { netzstart = millis(); uvlonetz = LOW; } nulldurchgang = (analogRead(nulldurchgangspin) < 40); //digitalWrite(testxpin, nulldurchgang); // Flanke nulldurchgangflanke = ((nulldurchgang != nulldurchgangvorher) && (nulldurchgangvorher == LOW)); nulldurchgangvorher = nulldurchgang; //digitalWrite(testypin, nulldurchgangflanke); // Frequenzbegrenzung nach oben if(!nulldurchgangflanke) { ista = micros(); if(ista - starta > ausvza) { nulldurchganga = LOW; } } else { starta = micros(); nulldurchganga = HIGH; } //digitalWrite(testzpin, nulldurchganga); // Flankea (Nulldurchgangsflanke mit Frequenzbegrenzung nach oben) nulldurchgangaflanke = ((nulldurchganga != nulldurchgangavorher) && (nulldurchgangavorher == LOW)); nulldurchgangavorher = nulldurchganga; //digitalWrite(ledpin, nulldurchgangaflanke); //DC-DC-Converter Start Monoflops if(!nulldurchgangflanke) { istb = micros(); if(istb - startb > ausvzb) { nulldurchgangb = LOW; } } else { startb = micros(); nulldurchgangb = HIGH; } digitalWrite(testxpin, nulldurchgangb); if(!nulldurchgangb) { istc = micros(); if(istc - startc > ausvzc) { nulldurchgangc = LOW; } } else { startc = micros(); nulldurchgangc = HIGH; } digitalWrite(testypin, nulldurchgangc); dcdcstart = !nulldurchgangb && nulldurchgangc && !uvlonetz; digitalWrite(ledpin, dcdcstart); }