kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Aufbau der Lautsprecherschaltung

(EN google-translate)

(PL google-translate)

Grundidee

  • Ein PWM-Ausgang dient dazu, die Tonhöhe sinusförmig vorzugeben, PWM 3.
  • Ein zweiter PWM-Ausgang dient dazu, eine Hüllkurve darum zu legen, PWM 13.
Stromlaufplan zur Lautspredcherschaltung.

Bild 0-1: Stromlaufplan zur Lautspredcherschaltung.

Laborplatine.

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"