Aufbau der Lautsprecherschaltung
(EN google-translate)
(PL google-translate)
Grundidee
|

Bild 0-1: Stromlaufplan zur Lautspredcherschaltung.

Bild 0-2: Laborplatine.
#include<avr/interrupt.h> /* unsigned char sinus[] = { 127,142,158,173,188,201,213,224,234,241, 247,251,253,253,251,247,241,234,224,213, 201,188,173,158,142,127,111,95,80,65, 52,40,29,19,12,6,2,0,0,2, 6,12,19,29,40,52,65,80,95,111 }; */ unsigned char sinus[] = {127,166,201,229,247,254,247,229,201,166,127,87,52,24,6,0,6,24,52,87}; unsigned char zaehler=0; unsigned char zaehler_langsam=0; unsigned char TON = 0; unsigned char TONFOLGE[]={0,4,2,1,3}; ISR(TIMER1_COMPA_vect) { // analogWrite(3,sinus[zaehler]); // zaehler++; // zaehler%=20; digitalWrite(3,1); digitalWrite(3,0); } void setup() { DDRB=255; TCCR1B &= ~(1<<WGM13); //Mode 4 TCCR1B |= (1<<WGM12); TCCR1A &= ~(1<<WGM11); TCCR1A &= ~(1<<WGM10); //Vorteilung: 64, dann 250000Hz Zählung: TCCR1B &= ~(1<<CS12); TCCR1B |= (1<<CS11); TCCR1B |= (1<<CS10); //Abtastrate: 50000Hz fünfzigtausend mal pro Sekunde. OCR1A=250; TIMSK1 |= (1<<OCIE1A); //Mode 4 sei(); //Motortreiber sicher ausgeschaltet lassen, da externe Spannung nötig!: //LINKER MOTOR //A5 als digitaler Ausgang, INPUT 3 pinMode(23,OUTPUT); //A0 als digitaler Ausgang, INPUT 4 pinMode(18,OUTPUT); digitalWrite(23,1); //1 eine Richtung digitalWrite(18,0); //0 analogWrite(6,0); //RECHTER MOTOR //A4 als digitaler Ausgang, INPUT 2 pinMode(22,OUTPUT); //A1 als digitaler Ausgang, INPUT 1 pinMode(19,OUTPUT); digitalWrite(22,1); //1 eine Richtung digitalWrite(19,0); //0 analogWrite(5,0); //Lautsprecher pinMode(3,OUTPUT); } void loop() { analogWrite(13,210-(sinus[zaehler_langsam]>>3)); OCR1A=TONFOLGE[TON]*20+250-(sinus[zaehler_langsam]>>3); zaehler_langsam++; if(zaehler_langsam==20) { zaehler_langsam=0; TON++; TON%=5; } delay(100); //100*20==2000 2 Sekunden ist ein Zyklus. }
Code 0-1: "Walfischgesänge"