Forum: Mikrocontroller und Digitale Elektronik Timer 8 Bit, Interrupt


von Marco Müllner (Gast)


Lesenswert?

Hallo Leute,

Ich beschäftige mich im Moment ein wenig mit dem Timer +Interrupt. Jetz 
hab ich mit den GCC ein Programm geschrieben. In diesem soll nach einer 
gewissen Zeit einfach alle LEDS 1 setzen.

Problem: Er kommt nicht in den Interrupt.

Der Quelltext:
-------------------------------------------------------------
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
5
int Zeit;
6
7
ISR(TIMER0_OVF_vect) 
8
{
9
   Zeit++; 
10
}
11
12
13
void main()
14
{
15
16
    Zeit = 0;
17
  
18
  DDRD = 0xFF;
19
  PORTB = 0xFF;
20
  TIMSK |= (1<<TOIE0);
21
  TCCR0 |= (1<<CS00)|(1<<CS02);
22
  sei();
23
24
  for (;;)
25
  {
26
   if (Zeit > 3)
27
     {
28
         PORTB = 0x00;
29
     }
30
  }  
31
}
32
---------------------------------------------------------------------
Benutzen tu ich AVR Studio 4.13, WinAVR (neueste Version, weiß nicht 
genau welche), das Entwicklungsboard STK 500 und den µC ATMega 8515L.

Könntet ihr mir helfen?

Solltet ihr noch weitere Informationen brauchen, einfach fragen.

von Matthias L. (Gast)


Lesenswert?

>Problem: Er kommt nicht in den Interrupt.

Bist du dir da sooo sicher?


versuchs mal so:
1
volatile int Zeit;

von Marco Müllner (Gast)


Angehängte Dateien:

Lesenswert?

er hängt an der if schleife fest, soviel steht für mich fest.

Im Anhang befindet sich ein Bild wo er hängenbleibt

von willi (Gast)


Lesenswert?

DDRD = 0xFF;     <-PortD
  PORTB = 0xFF;    <-PortB
   PORTB = 0x00;   <-PortB

is das richtig so?

von Marco Müllner (Gast)


Lesenswert?

definitiv nicht :) aber hab ich jetz geändert, tun tut sich aber immer 
noch nix.... er bleibt immer noch dort hängen

von willi (Gast)


Lesenswert?

was macht denn dein timer0 register im sumulator? zählt das hoch?

von Marco Müllner (Gast)


Lesenswert?

nein tut er nicht

von Stefan E. (sternst)


Lesenswert?

Wie simulierst du denn, etwa im Einzelschritt?
Dir ist schon klar, dass du einen Teiler von 1024 eingestellt hast, und 
es daher 1024 Takte dauert, bis der Zähler seinen Wert ändert, oder?

von willi (Gast)


Lesenswert?

dann haste das problem ja gefunden und du kannst dir sicher sein das er 
wirklich nie in die interruptroutine springt. also nochmal die 
ienstellung von timer0 kontrollieren

von Marco Müllner (Gast)


Lesenswert?

Ich simuliere nicht im einzelnen, sondern lasse ihn durchlaufen. Ich 
habe über 5 Minuten gewartet. Da muss etwas passieren.

Und die Einstellungen von Timer0 sind ziemlich sicher richtig, ich werde 
sie noch überprüfen

von Stefan E. (sternst)


Lesenswert?

Marco Müllner wrote:
> Ich simuliere nicht im einzelnen, sondern lasse ihn durchlaufen.

Und dennoch machst du irgendeinen Bedienfehler, denn bei mir läuft der 
Zähler in der Simulation.

von Marco Müllner (Gast)


Lesenswert?

mit Interrupt? also so wie es geplant ist?

von Stefan E. (sternst)


Lesenswert?

Ja.
Allerdings benutze ich AVR-Studio 4.14. Vielleicht ist es ja doch kein 
Bedienfehler, sondern ein Bug.

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.