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
|