Timer und delay AVR Tiny13A

Gast #3503022
Lesenswert?

Hallo, kann es sein dass die delay Funktion beim Atiny13 mit dem Timer 
verknüpft ist?

Denn bei meinem Programm wird soll eine LED blinken dies tut sie aber 
nur bei nicht initialisiertem Timer. Wenn ich ihn initialisiere dann 
Leuchtet sie konstant.

Hier mein quellcode:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <util/delay.h>
4

5
#define F_CPU 1225000UL
6

7
volatile uint8_t aus;
8
volatile uint8_t z;
9

10
void main (void)
11
{
12
DDRB |= (1 << DDB0) | (1 << DDB3);
13
DDRB &= ~(1 << DDB1);
14

15
PORTB |= (1 << PB3) | (1 << PB1);
16
  
17
TCCR0B |= (1 << CS00);
18
TIMSK0 |= (1 << TOIE0);
19

20
GIMSK = (1 << INT0);
21
MCUCR |= (1 << ISC01);
22
sei();
23

24
aus = 0;
25
z = 5;
26

27
  while(1)
28
  {
29
    if (aus == 1)
30
    {
31
      ausgabe (z);
32
      aus = 0;
33
    }
34
  }
35
  
36
}
37

38
/*
39
ISR(TIM0_OVF_vect)
40
{
41
  if (z < 6)
42
  {
43
    z++;
44
  }
45
  else 
46
  {
47
    z = 1;
48
  }
49
}
50
*/
51
ISR(INT0_vect)
52
{
53
  if (aus == 0)
54
  {
55
    aus  = 1;
56
  }
57
  else
58
  {
59
    aus  = 0;
60
  }
61
}
62

63

64
void ausgabe(uint8_t zahl)
65
{
66
  for(; zahl > 0;zahl--)
67
  {
68
    PORTB |= (1<<PB0);
69
    _delay_ms(500);
70
    PORTB &= ~(1<<PB0);
71
    _delay_ms(500);
72
  }
73
}
Gast #3503034
Lesenswert?

Peter schrieb:
> Hallo, kann es sein dass die delay Funktion beim Atiny13 mit dem
> Timer
> verknüpft ist?
>

Nö.

> Denn bei meinem Programm wird soll eine LED blinken dies tut sie aber
> nur bei nicht initialisiertem Timer. Wenn ich ihn initialisiere dann
> Leuchtet sie konstant.

Wenn der IRQ nicht aufgerufen wird, wird "aus" niemals 1 und dann wird 
"ausgabe" nie aufgerufen. Hat nichts mit dem Delay zu tun.
Gast #3503040
Lesenswert?

Das ist es ja der IRQ wird aufgerufen und aus "aus = 0" wurde "aus = 1"
und die funktion ausgeben wurde ebenfalls aufgerufen da die LED leuchtet 
doch ausgehen tut sie nicht mehr und da nur "_delay_ms" dazwischen ist 
liegt es doch nah dass das programm dort hängen geblieben ist.
Gast #3503051
Lesenswert?

Peter schrieb:
> Wenn ich ihn initialisiere dann Leuchtet sie konstant.

Ein erlaubter Timerinterrupt mit auskommentierter oder unpassender ISR 
führt bei Überlauf des Timers auf den bad interrupt und dann auf den 
Resetvektor. Da die Led nach Reset bis zum nächsten Reset  eine zeitlang 
eingeschaltet ist, erscheint sie leuchtend, blinkt aber eigentlich 
schnell mit der Frequenz in der die Resets ausgeführt werden.

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