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
Bild 0-1: Gesamtschaltplan der Licht-Klangkugel.
Übung
|