Forum: Mikrocontroller und Digitale Elektronik Attiny 85 Timer 1 startet nicht


von Peter (Gast)


Lesenswert?

Moin Leute,

bin gerade im AVR-Studio im Simulator am testen.
Könnt ihr mir sagen wieso der nicht in den Interrupt springt?
Hab schon einiges getestet aber nichts hat funktioniert.
Hatte mir da einen Breakpoint gesetzt. Auch nach 100.000 Zyklen ist der 
noch nicht in den Interrupt reingesprungen.
1
#define    F_CPU      8000000L
2
#include  <avr\io.h>
3
#include  <stdlib.h>
4
#include   <avr/interrupt.h>
5
6
volatile   int32_t zahl=0;
7
8
ISR(TIMER1_OVF_vect)
9
{
10
    TCNT1 = 128;
11
    zahl++;
12
}
13
14
void timer1_init(void)
15
{
16
  TCCR1 |= (1<<CS10);        // Prescaler=1
17
  TIMSK |= (1<<TOIE1);      // Timeroverflow Interrupt aktiv
18
  TCNT1 = 128;
19
  sei();
20
}
21
22
int main(void)
23
{
24
  timer1_init();
25
26
  while(1)
27
  {
28
    zahl++;
29
  }
30
}

von Peter (Gast)


Lesenswert?

Also der Timer 1 startet garnicht. Der TCNT1 zählt nicht hoch.

von Dietrich L. (dietrichl)


Lesenswert?

Peter schrieb:
> Also der Timer 1 startet garnicht. Der TCNT1 zählt nicht hoch.

Wie stellst du das fest?

von Peter (Gast)


Lesenswert?

Wenn ich den Simulator anhalte, ist der Cycle Counter hochgezählt, aber 
der TCNT1 steht auf den initialisierten 128.

von S. Landolt (Gast)


Lesenswert?

> der TCNT1 steht auf den initialisierten 128
Es wird nicht nur auf 128 initialisiert, sondern auch so in der ISR 
gesetzt - das mal rausnehmen.

von Dietrich L. (dietrichl)


Lesenswert?

Peter schrieb:
> Wenn ich den Simulator anhalte, ist der Cycle Counter hochgezählt, aber
> der TCNT1 steht auf den initialisierten 128.

Ich weiß nicht, wie gut der Simulator den Timer nachbildet, und wo/wann 
du TCNT1 anschaust.
Hast du ein Oszilloskop? Dann könntest du in der Interruptroutine ein 
I/O-Pin toggeln und schauen, ob sich was bewegt. Dann siehst du, was die 
Hardware wirklich macht.

von Stefan F. (Gast)


Lesenswert?

Peter schrieb:
> ISR(TIMER1_OVF_vect)

Da stimmt etwas nicht. Auf 
https://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html 
ist der ATtiny85 hinter diesem Vektor nicht genannt.

Ich denke, du musst die ISR "TIM1_OVF_vect" nennen. Da du diese ISR 
(noch) nicht implementiert hast, springt der Mikrocontroller irgendwo 
falsch hin und stürzt ab.

von Dietrich L. (dietrichl)


Lesenswert?

Dietrich L. schrieb:
> Hast du ein Oszilloskop?

Ohne Oszi: mit Multimeter die Spannung messen. Sie sollte ca. Vcc/2 
sein, also weder 0V noch Vcc.

von Jonas (Gast)


Lesenswert?

Moin,
bei dem Tiny musst du TIM1_OVF_vect nutzen. Außerdem solltest du den CTC 
Modus nutzen wenn du nur 128 zählen willst. Das zurücksetzen auf 127 ist 
nicht so schön, da bis zum zurücksetzen auch Zeit vergangen ist und ggf. 
durch andere Interrupts noch ne größere Verzögerung eintritt.

Viele Grüße

von Ralf G. (ralg)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich denke, du musst die ISR "TIM1_OVF_vect" nennen.
Sollte beides gehen. Auszug (wenn das noch einigermaßen aktuell ist):
1
/* $Id: iotnx5.h 2269 2011-12-29 08:07:25Z joerg_wunsch $ */
2
3
/* Timer/Counter1 Overflow */
4
#define TIM1_OVF_vect_num    4
5
#define TIM1_OVF_vect      _VECTOR(4)
6
#define TIMER1_OVF_vect_num    4
7
#define TIMER1_OVF_vect      _VECTOR(4)
8
#define SIG_OVERFLOW1      _VECTOR(4)

von Peter (Gast)


Lesenswert?

Also am lebenden Objekt habe ich es noch nicht getestet. Auch mit 
TIM1_OVF_vect ändert es nichts. Ob der Simulator so funktioniert wie ich 
mir das vorstelle ist natürlich die andere Frage.

Also mein eigentliches Ziel ist ein Taktgeber für einen Schrittmotor mit 
flexibler Frequenz. Am liebsten natürlich über den ganzen möglichen 
Frequenzbereich des MC, damit ich die kombi auch für andere Projekte 
verwenden kann.

von Ralf G. (ralg)


Lesenswert?

Peter schrieb:
> Auch mit
> TIM1_OVF_vect ändert es nichts. Ob der Simulator so funktioniert wie ich
> mir das vorstelle ist natürlich die andere Frage.

Bei mir funktioniert's!

von Peter (Gast)


Lesenswert?

Welche Version von Avr Studio hast du?

von Peter (Gast)


Lesenswert?

So hab jetzt mal im AVR Studio 4.16 von Simulator auf Simulator 2 
gewechselt. jetzt gehts!

von HildeK (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich denke, du musst die ISR "TIM1_OVF_vect" nennen.
Wenn es in einer ioxxxx.h nicht definiert wäre, hätte es nicht 
compiliert.

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.