kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Tonerzeugung mit der Licht-Klangkugel

(EN google-translate)

(PL google-translate)

Die bisherigen Programme dienten dazu Licht zu erzeugen. Das folgende Programm dient zur Tonerzeugung.

#include<avr/io.h>
#include<avr/interrupt.h>


#define XX PORTD|=0b01000000;
#define YY PORTD&=0b10111111;

volatile unsigned int ZEIT = 0;

SIGNAL(SIG_OUTPUT_COMPARE1A) //Interruptfunktion
{
    ZEIT++;
    ZEIT%=10000;    
}


void init()
{     
   DDRA = 0;DDRB = 0;DDRC = 0;DDRD = 0;
   PORTA = 0;PORTB = 0;PORTC = 0;PORTD = 0;   

   //rot1: Pin26
   DDRC |= 0b00010000;  //PC4 als Ausgang konfigurieren.                           
   //grün1: Pin39,40
   DDRA |= 0b00000011;  //PA0 und PA1 als Ausgang konfigurieren.          
   //blau1: Pin33,34
   DDRA |= 0b11000000;  //PA6 und PA7 als Ausgang konfigurieren.

   //rot2: Pin4,5
   DDRB |= 0b00011000;
   //grün2: Pin28,29
   DDRC |= 0b11000000;
   //blau2: Pin21,23
   DDRC |= 0b00000010; //PC1
   DDRD |= 0b10000000; //PD7

   //Timer0 kann ein PWM-Signal erzeugen und damit LED rot2 
   //durch Variation der Pulsbreite dimmen.
   //Dies wird hier konfiguriert:
   TCCR0 = (0<<FOC0) | (1<<WGM00) | (1<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (1<<CS00);
   OCR0 = 255; //Pulsbreite 0..255, 0==maximale Helligkeit, 255==dunkel.
   //Damit Strom fließen kann, muß PB4 auf High-Potential gelegt werden:
   PORTB |= 0b00010000;

   //Das PWM-Signal von Timer2 geht über Pin 21 (PD7, OC2) auf blau2
   //und wird hier auch für das Dimmen konfiguriert:
   TCCR2 = (0<<FOC2) | (1<<WGM20) | (1<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (1<<CS20);
   OCR2 = 0; //Pulsbreite 0..255, 255==maximale Helligkeit, 0==dunkel.
   //hier ist es o.k., wenn PC1 auf 0 gesetzt ist.

   //ZEIT-Geber:
   TCCR1A = (0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<FOC1A) | (0<<FOC1B) | (0<<WGM11) | (0<<WGM10);
   TCCR1B = (0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);
   TIMSK |= (1<<OCIE1A); 
//   OCR1A = 97; //97=> ungefähr im 0,1 Sekunden-Takt wird Interrupt ausgelöst.
              //genauer sind es 10,067654639Hz, also 0,099328Sekunden pro Zählschritt.

//Kleiner setzen, sonst ist das Dimmen zu langsam:
   OCR1A = 10;

    sei(); //Interrupts zulassen

//Für Ton PD6 als digitalen Ausgang setzen:
    DDRD |= 0b01000000;

}

//Resonnanzfrequenz der Kugel: 263Hz.
//ALT: Bei 2 Schritten pro Zuweisung und 1901 Zuweisungen: f = 1000000/(2*1901) = 263,019Hz 
//Bei 1 Schritt!!!
//es werden 1900 Schritte genommen:

int main(void)                    
{    
    unsigned int  wert = 0;

    init();

    while(1)
    {

       wert = ZEIT%512;
       if(wert>255)
           wert = 511-wert;
       OCR0 = wert;
       OCR2 = wert;

//Nun ist es so, dass am Anfang und Ende sehr viele Nuller auftreten (YY)
//Diese werden gelöscht.
//Das schafftZeit für die restlichen Programmteile!

//100 zu Beginn löschen:
//YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY 
YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY 
YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY 
YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY XX YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY 
XX YY YY YY YY YY YY YY YY XX YY YY XX YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY XX YY YY YY XX XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY XX YY YY XX XX YY YY YY YY YY YY 
YY XX YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY XX YY YY YY YY YY YY YY YY XX YY YY YY YY XX YY XX YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY XX YY YY YY YY YY YY XX YY YY YY YY YY YY XX YY YY XX XX YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY 
YY YY YY XX YY YY YY XX YY XX YY YY YY XX YY YY YY YY YY YY YY XX XX YY YY YY YY YY YY YY YY YY YY YY XX YY YY XX YY YY YY XX YY YY YY YY YY YY YY YY YY XX XX YY YY YY YY XX YY YY YY YY YY XX YY YY YY XX YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY XX YY YY XX YY YY XX YY YY YY YY YY XX YY YY YY YY 
YY XX YY YY XX YY YY XX YY YY YY YY YY XX XX YY YY YY YY YY YY YY YY XX YY YY YY YY YY XX YY YY YY XX XX YY XX YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY XX YY XX YY YY YY XX YY YY XX YY YY YY YY YY YY YY XX XX YY YY YY YY YY XX YY YY YY YY YY XX YY XX YY YY YY YY YY XX YY YY XX YY YY YY YY YY 
YY YY XX XX XX XX YY YY YY YY YY YY YY YY YY YY XX YY YY YY XX YY YY YY YY YY YY YY XX YY YY YY XX YY YY YY XX XX YY XX YY YY YY YY YY XX XX YY YY YY YY YY YY YY XX YY YY YY YY YY XX YY XX YY YY XX YY XX XX YY YY YY YY YY YY YY YY YY YY YY XX XX YY YY YY YY YY XX YY YY YY YY YY XX YY YY XX YY XX XX 
YY YY YY XX YY YY YY XX YY YY XX YY YY YY YY YY XX YY YY YY XX YY YY YY YY YY YY YY XX YY YY YY YY YY YY XX YY XX YY YY XX YY YY YY YY YY XX YY XX YY XX YY XX YY XX YY YY YY YY XX YY YY YY YY YY YY YY YY YY XX XX YY YY YY YY YY XX XX YY YY YY YY YY XX YY YY YY YY YY XX XX YY YY YY YY XX XX YY XX YY 
YY YY YY YY YY YY YY XX YY YY XX YY YY YY YY XX YY YY YY XX YY YY YY YY YY XX YY XX YY YY YY XX XX YY YY YY YY XX YY XX YY YY YY YY YY YY XX YY YY YY XX YY YY YY YY YY XX YY YY XX XX YY YY YY YY XX YY YY XX YY YY YY YY XX YY YY YY XX YY YY XX YY YY YY YY YY YY YY YY YY XX YY YY XX XX YY YY YY YY XX 
YY XX YY YY YY XX YY YY YY XX YY YY YY YY YY XX YY YY YY YY YY XX YY YY YY YY YY XX YY YY YY XX YY YY XX YY YY YY YY YY YY YY XX YY XX XX YY YY YY YY XX YY YY YY YY YY YY XX YY YY YY YY XX YY YY YY YY XX YY YY YY YY XX YY YY XX YY YY XX YY YY YY YY YY YY YY YY YY YY XX XX YY YY YY YY YY YY XX YY XX 
YY YY YY XX YY YY YY XX YY YY YY XX YY YY YY YY YY YY YY XX XX YY YY YY YY YY YY YY YY YY YY YY YY XX XX XX YY YY YY YY XX YY YY YY YY YY YY YY YY XX YY YY XX YY XX YY YY YY YY YY XX YY YY YY YY YY YY XX YY YY YY YY YY YY YY XX YY YY YY XX YY XX YY YY YY YY YY YY YY YY YY XX YY YY XX YY YY YY YY YY 
YY XX YY YY YY YY YY YY YY YY XX YY YY YY XX XX YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY XX YY YY YY YY XX YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY XX YY YY YY XX YY YY XX YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY XX YY YY YY YY YY YY XX YY XX YY YY YY YY YY YY XX YY YY 
YY YY YY YY YY YY YY YY YY YY XX YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY XX YY YY YY YY YY YY XX YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY XX YY YY YY YY YY XX YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY 
YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY XX YY YY 
YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY 
YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY XX YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY 
//YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY YY
//..und 100 am Ende.
//Somit verbleiben 1700 Aufrufe.

    }//Ende while(1)
}

Code 0-1: Quelltext von 001_ton.c

Gesamtschaltplan der Licht-Klangkugel.

Bild 0-1: Gesamtschaltplan der Licht-Klangkugel.

Übung
  • Testen Sie obiges Programm.
  • Was bewirkt es? Wie arbeitet es?
  • Versuchen Sie andersartige Töne oder gar Tonfolgen zu erzeugen.