Timer-Problem Mega8

Gast #660139
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
Gast #660313
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...
(Firma: keine) #660429
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren