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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.