kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu
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.