mikrocontroller.net

Forum: Compiler & IDEs timer 1 interrupt


Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
}

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ps: sei ist im hauptprogramm

Autor: Oliver (Gast)
Datum:

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

verwirrt doch etwas.

Oliver

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c kann ich rechtschreibung auch es kommt keine warnung und satzzeichen 
konnte ich noch nie leiden

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habs hinbekommen auch ohne hilfe und es funkztioniert ohne weiteres 
mit
TCNT1 aber egal

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
  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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.