PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ~~Probleme bei Frequenzerzeugung mit ATmega8~~



Jacob2
01.08.2009, 14:21
Hi,
eigentlich war ich der Meinung, ich würde mit diesem Code am Pin OC1A meines Mega8 ein ca. 440 Hz Signal bekommen, aber dem ist irgendwie nicht so:


#include <avr/io.h>

int main (void)
{
//Signal an OC1 wird getoggelt
//PWM deaktiviert
TCCR1A |= (1<<COM1A0);
TCCR1A &= ~((1<<WGM10) | (1<<WGM11) | (1<<COM1A1));

//CTC-Betriebsart gesetzt
//Takt: CLK/8
TCCR1B |= (1<<WGM12) | (1<<CS11);

//Vergleichswert = 142
OCR1A = 0b0000000010001110;

//OC1 wird mit (1MHz/(8*(142 + 1)) = 874 Hz) umgeschaltet,
//d.h. die Frequenz ist 874/2 = 437 Hz (soll ca. Kammerton A sein)
}

Ich will damit über einen Transistor einen kleinen Lautsprecher zum Klingen bringen.
Leider bin ich zur Zeit etwas unter Zeitdruck! Kann mir jemand helfen?

Besserwessi
01.08.2009, 14:36
Es wird übersichtlicher, wenn man die Timerregister direkt setzt, und nihct die Bits einzeln setzen und löschen. Also lieber TCCR1A = .....

Man kann zahlen auch gleich dezimal angeben. Wer braicht die 142 schon in binärer Form.

Ach ja, gehen tuts wohl nicht, weil der Port nihct auf Ausgang gestellt ist.

Das Programm solle auch nie bis agnz zu ende laufen, da sollte also ein Endlosschleife hin , oder ein sleep-Befehl (aus sleep.h).