Forum: Compiler & IDEs timer 1 interrupt


von steve (Gast)


Lesenswert?

ich weiß das es zu dem thema schon einige beiträge gibt aber ich bin 
einfach zu doof um meinen timer zum laufen zu bewegen bzw meine 
interruptroutine
ich verwende einen atmega8

währe nett wenn jemand sich mal mienen murx anschauen könnte



void ISR_TIMER1 ()
{
  TIMSK |= (1<<OCIE1A) | (1<<OCIE1B);  //Timer Itnerrupt enable
  TCNT1H=0;  //  Timer Register  High auf 0 Setzen
  TCNT1L=0;  //  Timer Register  Low auf 0 Setzen
  TCCR1B |= (1<<CS12)|(1<<CS10); // Timer Starten mit Vorteiler 1024
  TCNT1<=3600;  // Solange Das Register bis 3600 gezählt hat.

}
ISR (TIMER1_COMPA_vect)
{
  hauptprogramm();
  reti();
}

von steve (Gast)


Lesenswert?

ps: sei ist im hauptprogramm

von Oliver (Gast)


Lesenswert?

Ohne das ganze Programm zu sehen, ist es schwiering, etwas zu sagen, 
aber diese Zeile hier:
1
  TCNT1<=3600;  // Solange Das Register bis 3600 gezählt hat.

verwirrt doch etwas.

Oliver

von steve (Gast)


Lesenswert?

also mein kopiler sagt das das so funktioniert das is dan das
TCNT1H=0 &  TCNT1L=0 register zusemmen aber an meinem restlichen 
programm liegts nicht das funktioniert auserhalb des interrupt 
einwandfrei

von Klaus (Gast)


Lesenswert?

Wie wärs mal mit Rechtschreibung?
Und Groß- und Kleinschreibung?
Und Satzzeichen?

Oliver schrieb:
> TCNT1<=3600;  // Solange Das Register bis 3600 gezählt hat.

Dabei dürfte der Compiler eine Warnung ala "Statement without effect" 
oder so ähnlich ausgeben.

Wie wärs denn mal mit einem C-Buch? Und dem AVR-GCC-Tutorial?

von steve (Gast)


Lesenswert?

c kann ich rechtschreibung auch es kommt keine warnung und satzzeichen 
konnte ich noch nie leiden

von Klaus (Gast)


Lesenswert?

steve schrieb:
> c kann ich rechtschreibung auch es kommt keine warnung und satzzeichen
> konnte ich noch nie leiden

Tja, komm wieder wenn du bereit bist, die beim Stellen der Frage 
wenigstens ein Funken Mühe zu geben!

Achja, und wenn du c könntest, würdest du weder das hier:

Oliver schrieb:
> TCNT1<=3600;

noch sowas hier:

steve schrieb:
> ISR (TIMER1_COMPA_vect)
> {
>   hauptprogramm();
>   reti();
> }

jemals schreiben!

von steve (Gast)


Lesenswert?

und wenn du das tutorial gelesen hättest wüstest du das TCNT1 ein 16-bit 
register ist  ich wär dir dankbar wenn du dich mit deinem 
unkwualifizierten senf mal da raushalten würdest

von Klaus (Gast)


Lesenswert?

steve schrieb:
> TCNT1 ein 16-bit
> register ist

Ich weiß wie viel Bit das Register hat. Aber in C ist es bei einer 
Zuweisung sowas von Egal, wieviele Bits man gerade zuweist...

von Karl H. (kbuchegg)


Lesenswert?

steve schrieb:
> also mein kopiler sagt das das so funktioniert


Der Duden sagt auch, das

  "Die Banane schwamm über die Brücke."

ein einwandfreier deutscher Satz ist.
Trotzdem ist er unsinnig.

Der Compiler kümmert sich nur um die Grammatik. Die Logik die in deinem 
Programm steckt, ist dein Bier.
Und deine Logik ist einfach nur falsch.

von Karl H. (kbuchegg)


Lesenswert?

Klaus schrieb:

> Achja, und wenn du c könntest, würdest du weder das hier:
>
>> TCNT1<=3600;
>
> noch sowas hier:
>
>> ISR (TIMER1_COMPA_vect)
>> {
>>   hauptprogramm();
>>   reti();
>> }
>
> jemals schreiben!

Und das schon gleich gar nicht

void ISR_TIMER1 ()
{
  TIMSK |= (1<<OCIE1A) | (1<<OCIE1B);  //Timer Itnerrupt enable

....

ISR (TIMER1_COMPA_vect)

....


Compare für A und B freigeben, aber nur einen Handler für A haben. 
Klassischer Fall für einen Reset.

von Justus S. (jussa)


Lesenswert?

steve schrieb:
> und wenn du das tutorial gelesen hättest wüstest du das TCNT1 ein 16-bit
> register ist  ich wär dir dankbar wenn du dich mit deinem
> unkwualifizierten senf mal da raushalten würdest

bild ich mir das ein, oder häufen sich hier in letzter Zeit solche 
netten arroganten Zeitgenossen? Die einfach nicht einsehen wollen, dass 
sie etwas falsch machen, und lieber gleich pampig werden?

von steve (Gast)


Lesenswert?

ich habs hinbekommen auch ohne hilfe und es funkztioniert ohne weiteres 
mit
TCNT1 aber egal

von Klaus (Gast)


Lesenswert?

Justus Skorps schrieb:
> bild ich mir das ein, oder häufen sich hier in letzter Zeit solche
> netten arroganten Zeitgenossen? Die einfach nicht einsehen wollen, dass
> sie etwas falsch machen, und lieber gleich pampig werden?

seuftz  Nein das bildest du dir leider nicht ein. Das beobachtet man 
hier immer öfters. Aber auch in anderen Teilen der Gesellschaft. Im 
Sportverein treffe ich auch immer öfters auf Leute, die nicht mehr daran 
interessiert sind Tipps auszutauschen und dazuzulernen, sondern nur noch 
den anderen Beweisen wollen, dass sie alles wissen. Traurig, das 
ganze...

von Karl H. (kbuchegg)


Lesenswert?

steve schrieb:
> ich habs hinbekommen auch ohne hilfe und es funkztioniert ohne weiteres
> mit
> TCNT1 aber egal

Das ist auch nicht der springende Punkt.
Der springende Punkt ist: Was erwartest du von
1
  TCNT1 <= 3600;  // Solange Das Register bis 3600 gezählt hat.

Diese Anweisung erfüllt keinen Zweck. Es wird verglichen ob TCNT1 
kleiner oder gleich 3600 ist. Schön. Aber was passiert mit dem Ergebnis 
dieses Vergleichs? Nichts, gar nichts. Diese Anweisung tut wortwörtlich 
nichts. Dein Kommentar suggeriert aber, dass du dir davon irgendetwas 
erhoffst.

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.