Forum: Mikrocontroller und Digitale Elektronik Problem mit Timer1 Atmega32


von Sven (Gast)


Lesenswert?

Hallo,

ich Arbeite in C mit einem Atmega32 mit Atmel Studio6 und will einen 
einstellbaren Taktgenerator bauen.
Diesen tue ich über einen Drehimpulsgeber steuern.

Jetzt mein Problem:
Es funktioniert alles einwandfrei, nur jetzt möchte ich gerne die Werte 
des Drehimpulsgebers benutzen um einen Pin eine bestimmte Zeit auf High 
und Low zu schalten.
1
ISR( TIMER1_COMPA_vect)
2
{
3
  SecTakt++;
4
  if(SecTakt >= Frequenz)
5
  {
6
    SecTakt = 0;
7
  }
8
  if(Impuls >= SecTakt)
9
  {
10
    PORTB = PORTB|(1<<LED);
11
  }
12
  else
13
  {
14
    PORTB = PORTB &~(1<<LED);
15
  }
Wenn ich hier die Variabeln Frequenz und Impuls mit eine zahl beschreib 
wird dies auch dementsprechen ausgegeben und SecTakt geht bei  erreichen 
des Frequenzwerts wieder auf Null und beginnt von vorne zu zählen.
Aber wenn Frequenz durch den eingestellten Wert des Drehimpulsgebers 
gewählt wird dann zählt SecTakt durchgehend hoch.

Ist irgendwie ein bisschen blöd zu beschreiben das Problem.
Hoffe aber ihr versteht es und könnt mir eventuell helfen.
schon mal Danke ;)

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Sven schrieb:

> Aber wenn Frequenz durch den eingestellten Wert des Drehimpulsgebers
> gewählt wird dann zählt SecTakt durchgehend hoch.

Die ISR weiss nichts von deinem Drehimpulsgeber.
Das einzige was die interessiert, dass ist der Wert, der in Frequenz 
steht.

Wenn es also da zu Ungereimtheiten kommt, dann musst du dir mal den Wert 
ansehen, der in Frequenz drinnen steht, bzw. wie sich der verändert.

PS: Die Variablen 'Frequenz' bzw. 'Impuls' sind volatile?

: Bearbeitet durch User
von Sven (Gast)


Lesenswert?

Karl Heinz schrieb:
> PS: Die Variablen 'Frequenz' bzw. 'Impuls' sind volatile?

Ja die sind volatile

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.