Forum: Mikrocontroller und Digitale Elektronik Register ICR1


von Rafael (Gast)


Lesenswert?

void Timer1Init(void)
{
TCCR1A = 0x00;
TIMSK1 = 0x07;
EIMSK |= 0x01;
EICRA |= 0x03;
/*
OCR1A= 20000;
OCR1B= 20000;
ICR1 = 0x4e20;
*/
TCCR1B = 0x02;
}
Kann mir jmd sagen, wieso die hier auskommentierten Register für einen 
Phasenanschnitt/korrekten Ablauf des Timer1 im Quellcode vorhanden sein 
müssen? Der ICR1 macht mir zu schaffen. uC=ATMega 2561

Danke und Gruß

von spess53 (Gast)


Lesenswert?

Hi

>Der ICR1 macht mir zu schaffen.

Braucht man nicht. Wenn der Code von dir wäre, wüsstest du das.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

spess53 schrieb:

> Braucht man nicht. Wenn der Code von dir wäre, wüsstest du das.

Wenn er C könnte, wüsste er, dass Kommentare sowieso komplett ignoriert 
werden.

von Rafael (Gast)


Lesenswert?

Das stand deswegen in Kommentaren, damit gleich zu sehen ist, worauf ich 
Bezug nehme, ergo im Quellcode stehts nicht in Kommentaren. Der 
Quellcode ist ebenfalls von mir. Wenn ich das rausnehme, geht der 
Phasenanschnitt nicht.

von Karl H. (kbuchegg)


Lesenswert?

Und du glaubst, wir alle warten jetzt nur darauf, raussuchen zu dürfen, 
welche Interrupts du hier
TIMSK1 = 0x07;
alle freigibst.
Benutze die Bitnamen, dann sieht man auch was.


TCCR1A = 0x00;
TCCR1B = 0x02;
Das dürften die Prescaler BIts sein. D.h. Spezialmodus ist schon mal 
keiner aktiv.

Aber ehrlich gesagt, hab ich jetzt keine Lust, mir im Datenblatt die 
Bits zusammenzusuchen.

von Rafael (Gast)


Lesenswert?

TIMSK = 0x07;
-->TOIE1 & OCIE1A & OCIE1B sind gesetzt
TCCR1A = 0x00;
-->Normales Hochzählen
EIMSK = 0x01;
-->Interrupt 0 erlauben
EICRA
-->erkennt steigende Flanke
TCCR1B
--> 8-Prescale & Start Timer

hätte ich gewusst, dass man sämtliche Register kennen muss, um mir den 
ICR1 zu erklären, hätte ich das im Vorfeld getan.

von spess53 (Gast)


Lesenswert?

Hi

>hätte ich gewusst, dass man sämtliche Register kennen muss, um mir den
>ICR1 zu erklären, hätte ich das im Vorfeld getan.

Du sollst nichts erklären, sondern es richtig schreiben:

Nicht     TIMSK = 0x07;
sondern   TIMSK = 1<<TOIE1 | 1<<OCIE1A | 1<<OCIE1B

Da weiß jeder ohne Kommentar was Fakt ist und du weißt auch in einem 
halben Jahr was du dort gemacht hast ohne im Datenblatt nachzusehen.

MfG Spess

von Rafael (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>hätte ich gewusst, dass man sämtliche Register kennen muss, um mir den
>>ICR1 zu erklären, hätte ich das im Vorfeld getan.
>
> Du sollst nichts erklären, sondern es richtig schreiben:
>
> Nicht     TIMSK = 0x07;
> sondern   TIMSK = 1<<TOIE1 | 1<<OCIE1A | 1<<OCIE1B
>
> Da weiß jeder ohne Kommentar was Fakt ist und du weißt auch in einem
> halben Jahr was du dort gemacht hast ohne im Datenblatt nachzusehen.
>
> MfG Spess

Gut, akzeptiert.

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.