Ich habe es nun erstmals geschafft, den Timer zu verwenden...
Aber ein Problem blieb:
Code:
//----------------------------------------------------------------------
// Titel : Töne
//----------------------------------------------------------------------
// Funktion : ...
// Schaltung : ...
//----------------------------------------------------------------------
// Prozessor : ...
// Takt : 1 MHz
// Sprache : C
// Datum : ...
// Version : ...
// Autor : ...
//----------------------------------------------------------------------
#define F_CPU 1000000 // Taktfrequenz des myAVR-Boards
#include <avr\io.h> // AVR Register und Konstantendefinitionen
//----------------------------------------------------------------------
main () // Hauptprogramm, startet bei Power ON und Reset
{
int i,j = 0;
DDRB=0b00001111;
TCCR0B=TCCR0B|(1<<CS00); //Timer0 einstellen + starten: prescaler=1 -> 1Mhz
// Timer läuft synchron zu allem ab!
while (true)
{
for(i=0;i<10000;i++) // ungefähr 1 sek Ton halten
{
if (j>=10)
{ PORTB^=(1<<PB2);
}
if (TCNT0 >= 113) // TCNT0 = Speichervariable für Timer0, geht nur bis 255 weil 8bit
{
TCNT0=0; // Reset Timer -> fängt wieder bei 0 an
j++;
}
}
waitMs(500);
j,i=0;
TCNT0=0;
for(i=0;i<10000;i++) // ungefähr 1 sek Ton halten
{
if (j>=10)
{ PORTB^=(1<<PB2);
}
if (TCNT0 >= 85) // TCNT0 = Speichervariable für Timer0, geht nur bis 255 weil 8bit
{
TCNT0=0; // Reset Timer -> fängt wieder bei 0 an
j++;
}
}
waitMs(500);
j,i=0;
TCNT0=0;
for(i=0;i<10000;i++) // ungefähr 1 sek Ton halten
{
if (j>=10)
{ PORTB^=(1<<PB2);
}
if (TCNT0 >= 64) // TCNT0 = Speichervariable für Timer0, geht nur bis 255 weil 8bit
{
TCNT0=0; // Reset Timer -> fängt wieder bei 0 an
j++;
}
}
waitMs(500);
j,i=0;
TCNT0=0;
for(i=0;i<10000;i++) // ungefähr 1 sek Ton halten
{
if (j>=10)
{ PORTB^=(1<<PB2);
}
if (TCNT0 >= 95) // TCNT0 = Speichervariable für Timer0, geht nur bis 255 weil 8bit
{
TCNT0=0; // Reset Timer -> fängt wieder bei 0 an
j++;
}
}
waitMs(500);
}
}
//----------------------------------------------------------------------
Die Töne, die gespielt werden sollen, sind A (440 Hz), D (170 Hz), G (128 Hz) und C (191 Hz)
Der erste Ton kling tief, der zweite höher.
Das passt also noch.
Aber der dritte und vierte sind genau gleich wie der zweite!!!
selbst mit erneutem setzen der Zählvariablen i und j....
Lesezeichen