Forum: Mikrocontroller und Digitale Elektronik Timer und delay AVR Tiny13A


von Peter (Gast)


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
}

von greg (Gast)


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.

von Peter (Gast)


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.

von MWS (Gast)


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.

von Peter (Gast)


Lesenswert?

Oooooohmaaan! wollte alles schrittweise machen und dann liegt es daran! 
:D
Das hatte ich nicht gewust, vielen Dank!

von spess53 (Gast)


Lesenswert?

Hi

>DDRB |= (1 << DDB0) ....

Der PIN von INT0 soll ein Ausgang sein?

MfG Spess

von MWS (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>DDRB |= (1 << DDB0) ....
>
> Der PIN von INT0 soll ein Ausgang sein?
>
> MfG Spess

Int0 liegt an PB1.

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.