sitemap link mailform link home

Programmierung 1


Nun soll der kleine Lautsprecher des Pollin-Spiels "Lärm" machen

Das ist relativ simpel, da die Leute der Fa. Pollin das schon vorbereitet haben.

Die Initialisierungs-Routine AVRInit() findet man in der Datei nikospiel.c und beinhaltet unter anderem die Funktionalität, um Töne zu erzeugen.
Die Funktion AVRInit() muss im Hauptprogramm main() unbedingt aufgerufen werden:

 

// Unser zweites C-Programm für das Pollin-Spiel
// Wir wollen Lärm machen!
// Dieses Programm spielt die ersten fünf Töne der Tonleiter

# include <stdlib.h>
# include <avr/interrupt.h>
# include "display.h"
# include "delay.h"
# include "nikospiel.c"


int main(void)
{
    AVRInit();
    InitDisplay();
    ClearDisplay();
   
    while(1)
    {
    // Für OCR0A sind Werte von 1 bis 255 erlaubt
    // Dabei ist 255 der tiefste Ton!
   
    OCR0A=78; // Tonhöhe 1. Ton festlegen
    TCCR0A = 0b00010010;   // Ton an
    Ssleep(1);
    TCCR0A = 0b00000010;      // Ton aus!
    Ssleep(1);
    OCR0A=70; // Tonhöhe 2. Ton festlegen
    TCCR0A = 0b00010010;   // Ton an
    Ssleep(1);
    TCCR0A = 0b00000010;      // Ton aus!
    Ssleep(1);
    OCR0A=62;
    TCCR0A = 0b00010010;   // Ton an
    Ssleep(1);
    TCCR0A = 0b00000010;      // Ton aus!
    Ssleep(1);
    OCR0A=57;
    TCCR0A = 0b00010010;   // Ton an
    Ssleep(1);
    TCCR0A = 0b00000010;      // Ton aus!
    Ssleep(1);
    OCR0A=50;
    TCCR0A = 0b00010010;   // Ton an
    Ssleep(1);
    TCCR0A = 0b00000010;      // Ton aus!
    Ssleep(1);
   
    }

}

 

Wir "verlagern" die Klangerzeugung in eine Funktion


// Unser zweites C-Programm für das Pollin-Spiel
// Die Klangerzeugung wird nun in eine eigene Funktion ausgelagert


# include <stdlib.h>
# include <avr/interrupt.h>
# include "display.h"
# include "delay.h"
# include "nikospiel.c"

int PlayTones(int Note)
{   
    OCR0A=Note; // Tonhöhe festlegen
    TCCR0A = 0b00010010;   // Ton an
    Ssleep(1);
    TCCR0A = 0b00000010;      // Ton aus!
    return 0;
}

int main(void)
{
    AVRInit();
    InitDisplay();
    ClearDisplay();
   
    while(1)
    {
    PlayTones(90);
    PlayTones(80);
    PlayTones(70);
    PlayTones(65);
    PlayTones(59);
    PlayTones(52);
    PlayTones(46);
    PlayTones(43);
    Ssleep(2);
    }
return 0;
}



Die Noten bekommen Namen - Compiler-Direktiven


// Unser zweites C-Programm für das Pollin-Spiel
// Compiler-Direktiven

// Auch dies hier sind Compiler-Direktiven:

# include <stdlib.h>
# include <avr/interrupt.h>
# include "display.h"
# include "delay.h"
# include "nikospiel.c"

// Wir verbessern die Lesbarkeit, indem wir die Tonhöhen den Notennamen zuordnen
// Die Compiler-Direktiven sorgen dafür, dass der Compiler z.B. statt C1 eine 90 übersetzt

# define C1 90
# define D1 80
# define E1 70
# define F1 65
# define G1 59
# define A1 52
# define H1 46
# define C2 43

int PlayTones(int Note)
{   
    OCR0A=Note; // Tonhöhe festlegen
    TCCR0A = 0b00010010;   // Ton an
    Ssleep(1);
    TCCR0A = 0b00000010;      // Ton aus!
    return 0;
}

int main(void)
{
    AVRInit();
    InitDisplay();
    ClearDisplay();
   
    while(1)
    {
    PlayTones(C1);
    PlayTones(D1);
    PlayTones(E1);
    PlayTones(F1);
    PlayTones(G1);
    PlayTones(A1);
    PlayTones(H1);
    PlayTones(C2);
    Ssleep(2);
    }
return 0;
}

.

 

 

Letzte Änderung:
March 23. 2023 21:04:40
«    top    »