Forum: Mikrocontroller und Digitale Elektronik Pin automatisch togglen


von PETER (Gast)


Lesenswert?

Hi, ich habe einen ATmega8 hier. Der soll den Pin PB1 selbstständig 
togglen.

Hier ist mein Code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
int main()
5
{
6
  DDRB     |= (1 << PB1);     // Pin als Ausgang konfigurieren
7
  TIMSK    |= (1 << OCIE1A);  // Compare Match Interrupt
8
  TCCR1A   |= (1 << WGM11);   // CTC-Modus
9
  TCCR1B   |= (1 << CS10);    // Vorteiler: 8
10
  OCR1A     = 17;             // Alle 16µs ein Interrupt
11
        while(1) { }
12
}

Wo liegt der Fehler?

von Johannes M. (johnny-m)


Lesenswert?

Wenn irgendwas automatisch toggeln soll, musst Du auch die COM-Bits 
entsprechend setzen. Und den Interrupt solltest Du nur dann freigeben, 
wenn auch ein Handler existiert, in dem irgendwas gemacht wird. Wenn der 
Interrupt nicht gebraucht wird, ist er auch nicht freizugeben!

von PETER (Gast)


Lesenswert?

Ok. Habe es angepasst. Jetzt funktioniert es. Hier der Code:
1
DDRB   = (1<<PB0);
2
OCR1A  = (F_CPU + FREQ) / (FREQ * 2); // Frequenz korrekt runden
3
TCCR1A = (1 << COM1A0);               // OC1A togglen
4
TCCR1B = (1 << CS10) | (1 << WGM12);  // Vorteiler: 1, CTC-Modus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.