Frequenzgenerator mit ATMEGA8 - C

OP #1104107
Lesenswert?

Hallo,

ich bin Neuling in der Arbeit mit Mikrocontrollern, versuche derzeit 
aber mit einem ATMEGA8-16PU einen Frequenzgenerator zu bauen.
Die Frequenz möchte ich von 1Hz-1kHz in 1Hz-Schritten ändern können.

Aber erstmal möcht ich einfach nur mal eine Frequenz an einem Ausgang 
abgreifen können.

Dazu hab ich gelesen, dass man das mit einem Timer machen soll, am 
besten mit dem 16-bit Timer.
Habe mich auch mal in das AVR-GCC Tutorial eingelesen, nur fehlt mir im 
Moment irgendwie noch der Durchblick.

Mein Code sieht derzeit so aus:
1
int main(void)
2
{
3
DDRD = 0xC0;
4
PORTD = 0x00;
5
PORTB = 0xFF;
6

7
TCCR1A = (1<<COM1A1) | (1<<COM1A0); //Signal an OC1 wird invertiert
8
TCCR1B = (0<<CS12) | (1<<CS11) | (0<<CS10); //CPU-Takt/8
9
}

Jo, also so wie ich das bisher gelesen habe sollte das doch reichen.
Ist es nicht so, dass der Zähler nun mit einer Frequenz von 2MHz 
(16MHz/8) heraufzählt und dann beim Überlauf das Signal am Ausgang 
invertiert wird?
Oder verstehe ich das falsch?

Hab bisher auf jeden Fall am Ausgang andauernd 1-Signal anstehen.

Bin dankbar für jede Hilfe!

MfG
OP #1104205
Lesenswert?

Hallo,

also ich hab nochmal ins Datenblatt geschaut, die richtigen 
Einstellungen nun gewählt und CTC eingeschaltet.
1
int main(void)
2

3
TCCR1A = (1<<COM1A0) | (1<<WGM12);
4
TCCR1B = (0<<CS12) | (1<<CS11) | (0<<CS10):
5

6
while(1)
7

8
return 0;
9
}

Ergebnis:

Genau das Gleiche wie vorher!
An OC1 liegt weiterhin dauerhaft 1 an.

Bin hier irgendwie kurz vorm verzweifeln ;)
Gast #1104239
Lesenswert?

Hi

Entschuldige:

>OCR2 muss auch noch gesetzt werden. Z.B. 128.

Muss natürlich OCR1H /OCR1L heissen (War beim falschen Timer). Evtl kann 
man in C das 16Bit-Register in einem Rutsch setzen. Ansonsten 
Reihenfolge beachten. Der wert sollte natürlich auch grösser werden, 
z.B. 0x8000.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren