mikrocontroller.net

Forum: Compiler & IDEs Timer1 verhält sich komisch


Autor: Frank Maier (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

mein Timer 0 verhält sich nicht so, wie man das erwarten sollte, da ich
in das Compare-Register einen Wert von 500 schreibe, mein Oszilloskop
aber nicht mal eine 1µs! anzeigt, d.h. er löst sofort den Interrupt aus
und zählt nicht vorher bis 500. Woran liegt das - ich probiere daran
schon seit 3 Stunden herum!!! Überigens - der Wert, der in Phase = 1
geschrieben wird (uart_wert) funktioniert tadellos.

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man in ein 8-Bit-Register nicht maximal 255 hineinschreiben?

Autor: Frank Maier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry - ich meinte natürlich Timer1, also den 16-Bit Timer - das kann
man dem Code auch entnehmen.

Autor: Frank Maier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann sich bitte mal einer von den Experten meinen Code anschauen - ich
komme echt nicht weiter - wenn ich Timer1 aktiviere, scheint der µC
sofort in die Signal Overflow1 Routine zu gehen. Was ist da falsch?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich finde dein Code ist ein bischen Kuddelmuddel , aber egal.

Vielleicht nur ein Schuss ins blaue. Nimm bitte mal das sei(); aus der
Funktion uart_init raus und setzte es bitte in die Main Funktion hinter
Timer_init.

Mfg
Dirk

Autor: Frank Maier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

das sei(); habe ich bereits dort hin positioniert, aber das bringt auch
nichts (leider).
Was findest du an meinem Code kuddelmuddel? Ich habe immer ein offenes
Ohr für Verbesserungsvorschläge - die einzelnen Prozeduren sind ja
schon nach ihrer Aufgabe geordnet!

Autor: Andreas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich glaube du setzt den output compare immer auf 0, wenn vorher nichts
übers uart reinkommt:

SIGNAL(SIG_OUTPUT_COMPARE1A)  // Timer1 = Wert
{
  if (phase == '0')
  {
    phase = '1';
    change_timer(uart_wert);
  }
...

Daher auch die kurze Zeit. Setze mal uart_wert in init_timer() auf
500.


Gruß
Andreas

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.