LED Steuerung mit Interrupt

Gast #653293
Lesenswert?
• ▲
▼
kann mir jemand sagen warum  dies  Programm nicht laüft ,was ist falsch 
?

/*   PD2:  LED blinkt
 * nst, 14.11.2005   */
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

volatile uint8_t led_an;

SIGNAL (SIG_TIMER1_OVF)
{ led_an=~led_an;
}

void ioinit(void)
{ TCCR1A=0;
  TCCR1B=(1<<CS11) | (1<<CS10);  /* full/:8/:64 MCU clock */
  TIMSK=(1<<TOIE1);
  sei();  /* enable interrupts */
}

int main (void)
{
  ioinit();
  DDRD=0x02;      /* use PortD1 for output (LED) */
  PORTD=0x00;     /* turn LED off */
  for (;;)
  { PORTD=~led_an;     /* LED */
  }
}
#653500
Lesenswert?
• ▲
▼
Probier mal folgendes:

/*   PD2:  LED blinkt
 * nst, 14.11.2005   */
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

void Delay (uint32_t delay)
{
  uint32_t i;
  for (i = 0; i < delay; i++)
    nop ();
}

int main (void)
{
  DDRD=0x02;      /* use PortD1 for output (LED) */
  PORTD=0x00;     /* turn LED off */
  for (;;)
  {
    PORTD ^= (1 << PD2);     /* LED */
    Delay (100000);
  }
}

Wenn das nicht tut, dann fehlt Deinem µC wohl der Takt ....
Gast #654714
Lesenswert?
• ▲
▼
By the way: Ich hab den Code mal eben (minimal abgeändert / siehe 
unten)compiliert und durch den Simulator gejagt. Der Simulator sagt dass 
es funktioniert (1 Sek. an... 1 Sek. aus... 1 Sek. an... usw.)
1
/*   PD2:  LED blinkt
2
 * nst, 14.11.2005   */
3
#include <inttypes.h>
4
#include <avr/io.h>
5
#include <avr/interrupt.h>
6
//#include <avr/signal.h>           <-- signal.h ist obsolet !
7

8
volatile uint8_t led_an;
9

10
//SIGNAL (SIG_TIMER1_OVF)           <-- veraltet / ungültig !
11
ISR (TIMER1_OVF_vect)            // <-- neu / gültig ;)
12
{ led_an=~led_an;
13
}
14

15
void ioinit(void)
16
{ TCCR1A=0;
17
  TCCR1B=(1<<CS11) | (1<<CS10);  /* full/:8/:64 MCU clock */
18
  TIMSK=(1<<TOIE1);
19
  sei();  /* enable interrupts */
20
}
21

22
int main (void)
23
{
24
  ioinit();
25
  DDRD=0x02;      /* use PortD1 for output (LED) */
26
  PORTD=0x00;     /* turn LED off */
27
  for (;;)
28
  { PORTD=~led_an;     /* LED */
29
  }
30
}

Wenns bei dir nicht läuft, würde ich mal auf nen 
Bedienungs-/Verdrahtungsfehler tippen.

Ähm... wo liegt das Problem eigentlich genau? Scheitert es bei dir schon 
am Compilieren, oder macht der Mega8515 nach dem Programmieren einfach 
nicht Anausanausanausanausanausanausanaus... ;)

...oder ganz doof gefragt: hast du die LED(s) überhaupt mit Port D 
verbunden? (dazu musst du eines der beigefügten Kabel benutzen)

Gruß,
Magnetus

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