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"