mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer-Problem Mega8


Autor: Udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich finde den Fehler einfach nicht :-(

Gegeben ist Timer1 eines AVR Mega8, der Rechteckimpulse am Eingang T1 
zählen soll. Alle Variablen sind als volatile deklariert. Software: 
avr-gcc

void timer1_Init(void)
    {
    TCCR1B = 0x00;
    TIMSK |= (1<<TOIE1);
    TCNT1L = 0x00;
    TCNT1H = 0x00;
    TCCR1A = 0x00;
    TCCR1B |= ( (1<<CS12) | (1<<CS11) | (1<<CS10) );
    }
ISR(TIMER1_OVF_vect)
    {
    if (Ueberlauf < 255)
        Ueberlauf ++;
    }

Die Zeitdauer fürs Zählen wird in Timer0 gesteuert; funktioniert 100%ig:

ISR(TIMER0_OVF_vect)
    {
    TCNT0 = TIMER0_WERT;  // Wert für 25ms

    // Zeit zählen
    if (Zeit > 0)
        Zeit --;
    else
        TCCR1B = 0x00; // Timer 1 stoppen
...

Im Hauptprogramm wird ausgewertet und alles wieder auf Start gesetzt:

if (0 == Zeit)
  {
  if (Ueberlauf > 0)
      Wert = 65535;
  else
      Wert = TCNT1;
...
  Wert = 0;
  Ueberlauf = 0;
  Zeit = HG_ZEIT;  //entspricht  1s
  timer1_Init();
...

Das mache ich kontinuierlich im Hauptprogramm und vergleiche Wert mit 
einer Variablen Soll, bei der nach Betätigung einer Taste das Gleiche in 
Grün abläuft. Soll enthält also die Sollfrequenz (in Takten) und Wert 
die Istfrequenz. Der Vergleich
if (Wert <= Soll)
      Status = HG_OK;
  else
      Status = HG_N_OK;

liefert aber als Ergebnis immer, auch bei deutlich höheren Frequenzen 
als in Soll HG_OK. Die Signale liegen natürlich an T1 korrekt an.

Und ich weiss einfach nicht, warum. Hilfe...


Danke, UdoZ

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal das komplette Programm... mir persönlich ist es zu 
mühsam, einzelne Codeschnipsel auszuwerten...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>    TCNT1L = 0x00;
>    TCNT1H = 0x00;
Falsche Reihenfolge. Beim Schreibzugriff immer erst das High-Byte und 
dann das Low-Byte. Am besten gleich
    TCNT1 = 0;
schreiben.

Autor: Udo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

die TCNT1-Sache ist geändert. Danke.

Der zusammengefasste Code ist angehängt. Definitiv nicht benötigter Kram 
wurde beseitigt; ca. 6 kB unnötiger Kram hält auch vom Lesen ab ;-)

UdoZ

Autor: Udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

die 2 vermeintlich unterschiedlichen Speicherstellen im EEPROM sind 
identisch.

UdoZ

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der zusammengefasste Code ist angehängt. Definitiv nicht benötigter Kram
> wurde beseitigt; ca. 6 kB unnötiger Kram hält auch vom Lesen ab ;-)


Unvollständiger Kram hält auch vom lesen ab ;)

- Da fehlen immer noch Programmteile...
- Variablen werden mit Konstanten gefüttert, deren #define in dem
  geposteten Code nicht zu sehen sind...
- usw... usw...

Autor: Udo Z. (Firma: keine) (udoz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Magnus Müller wrote:
>> Der zusammengefasste Code ist angehängt. Definitiv nicht benötigter Kram
>> wurde beseitigt; ca. 6 kB unnötiger Kram hält auch vom Lesen ab ;-)
>
>
> Unvollständiger Kram hält auch vom lesen ab ;)

> - Da fehlen immer noch Programmteile...

Bezüglich des Problems ist der Code komplett. Alle anderen Teile sind 
irrelevant, produzieren keine Stack- oder Timing-/Timerprobleme etc..
Der 'Minimalcode' wurde auch schon mit gleichem, wahrscheinlich banalen 
Fehler bzw. Ergebnis 'live' getestet.


> - Variablen werden mit Konstanten gefüttert, deren #define in dem
>   geposteten Code nicht zu sehen sind...

Die Konstanten stehen in <avr/io.h>, sind im Anhang kommentiert oder in 
dem Fall, in dem nichts kommentiert wurde, selbsterklärend (HG_OK, 
HG_N_OK).
Aber, wenn es hilft:
#define HG_OK     1
#define HG_N_OK   0

;-)


> - usw... usw...

Trotzdem danke für Deine Bemühungen.


UdoZ

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.