//Digitale 5 Kanal Arduino PWM Lichtorgel //Analog Eingang A0 //PWM an Pin 3,5,9,10,11 //0-Pegel detect an Pin 13 zum abgleich des Eingangsspannungsteilers //Entwickelt 2015 von Christof Rieger //sollte auf allen AVR-8 Arduinos laufen mit 16MHz und mindestens mit ATmega168 //Ein Geschenk an die Arduinogemeinde. Die Vermarktung des Cods ist verboten !!! //#include //Der Wert der überschritten werden muss, damit der Kanal aktiv wird (maximal 255) #define triggeroffset 128 //Der Wert der als Maximalwert für den PWM gesetzt wird (zwischen 255 und 255 + triggeroffset setzen) #define maxon triggeroffset + 255 - 10 //Anzahl der Zyklen nach denen die Verstärkung erhöht wird beidenen der Kanal aus war. #define gainraisetime 74 //PWMoffset sollte nicht verändert werden. #define PWMoffset maxon - 255 //Je nach Spannungsteiler am Analogeingang kann hiermit die Referenzpannung eingestellt werden. //REFS1 REFS0 Voltage Reference Selection // 0 0 AREF, Internal Vref turned off // 0 1 AVCC with external capacitor at AREF pin // 1 0 Reserved // 1 1 Internal 1.1V Voltage Reference with external capacitor at AREF pin //ADC0 Ref 5V 8Bit in ADCH Eingang A0 #define S_ADMUX 0<> 2; adde0();//9.Sampel d2 = ea >> 2; adde0();//10.Sampel //0-Stellung Anzeigen, hilfe zum Einstellen des Analog Spannungsteilers if (d1 < 128) {digitalWrite(13, HIGH);} else {digitalWrite(13, LOW);} adde0();//10.Sampel //Gleichspannung und Tiefstfrequenzen d1 = d1 >> g0; adde0();//11.Sampel if (d1 > maxon) { l0 = 255; ++g0;} else { if (d1 > triggeroffset) {l0 = d1 - PWMoffset ; s0 = 0;} else {l0 = 0; ++s0;} } adde0();//12.Sampel if ((s0 > gainraisetime) && (g0 > 0)) {--g0; s0 = 0;} adde0();//13.Sampel //Bässe d2 = d2 >> g1; adde0();//14.Sampel if (d2 > maxon) { l1 = 255; ++g1;} else { if (d2 > triggeroffset) {l1 = d2 - PWMoffset ; s1 = 0;} else {l1 = 0; ++s1;} } adde0();//15.Sampel if ((s1 > gainraisetime) && (g1 > 0)) {--g1; s1 = 0;} adde0();//16.Sampel //Mitten tief d0 = d0 >> g2; adde0();//17.Sampel if (d0 > maxon) { l2 = 255; ++g2;} else { if (d0 > triggeroffset) {l2 = d0 - PWMoffset ; s2 = 0;} else {l2 = 0; ++s2;} } adde0();//18.Sampel if ((s2 > gainraisetime) && (g2 > 0)) {--g2; s2 = 0;} adde0();//19.Sampel //Mitten hoch c0 = c0 >> g3; adde0();//20.Sampel if (c0 > maxon) { l3 = 255; ++g3;} else { if (c0 > triggeroffset) {l3 = c0 - PWMoffset ; s3 = 0;} else {l3 = 0; ++s3;} } adde0();//21.Sampel if (s3 > gainraisetime && (g3 > 0)) {--g3; s3 = 0;} adde0();//22.Sampel //Höhen b0 = b0 << 3; adde0();//23.Sampel b0 = b0 >> g4; adde0();//24.Sampel if (b0 > maxon) { l4 = 255; ++g4;} else { if (b0 > triggeroffset) {l4 = b0 - PWMoffset ; s4 = 0;} else {l4 = 0; ++s4;} } adde0();//25.Sampel if (s4 > gainraisetime && (g4 > 0)) {--g4; s4 = 0;} adde0();//26.Sampel analogWrite(11, l4); //Höhen adde0();//27.Sampel adde0();//28.Sampel analogWrite(10, l3); //Mitten hoch adde0();//29.Sampel adde0();//30.Sampel analogWrite(9, l2); //Mitten tief adde0();//31.Sampel adde0();//32.Sampel analogWrite(5, l1); //Bässe adde0();//33.Sampel adde0();//34.Sampel analogWrite(3, l0); //Gleichspannung und Tiefstfrequenzen adde0();//35.Sampel adde0();//36.Sampel for (byte x = 0; x < 219; x++) { while ((ADCSRA & 1<