Forum: Mikrocontroller und Digitale Elektronik LED Steuerung mit Interrupt


von samer (Gast)


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 */
  }
}

von Johannes M. (johnny-m)


Lesenswert?

1.: Was für ein Controller ist das?
2.: Welche Taktfrequenz
3.: Schaff Dir erstmal die aktuelle WINAVR-Version an. Die ganze 
SIGNAL-Geschichte ist veraltet und sollte nicht mehr benutzt werden.

von samer (Gast)


Lesenswert?

hallo das ist avr atmega 8515 auf stk500

von Johannes M. (johnny-m)


Lesenswert?

samer wrote:
> hallo das ist avr atmega 8515 auf stk500
Das ist die Antwort auf 1. Und was ist mit 2.?

von samer (Gast)


Lesenswert?

ich weiss nicht ganz genau

von Michael K. (mmike)


Lesenswert?

Schon mal simuliert ?

von samer (Gast)


Lesenswert?

Takt , 4Mhz

von Michael K. (mmike)


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 ....

von Magnus Müller (Gast)


Lesenswert?

> Wenn das nicht tut, dann fehlt Deinem µC wohl der Takt ....

Wenn dem µC der Takt fehlen würde, könnte er ihn gar nicht programmieren 
;)

von Magnus Müller (Gast)


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

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.