Problem mit Timer1 Atmega32

Gast #3983873
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 ;)
#3983923
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?

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