Forum: Mikrocontroller und Digitale Elektronik STK500 Timer & LED


von Alexander M. (a_lexander)


Lesenswert?

Hallo Zusammen!

Vielleicht will mir jemand kurz helfen...
Meine Idee:
Wenn ich Taster 0 drücke, sollen die LEDs 0xCC angehen (und auch an 
bleiben), also eigentlich ganz einfach.. ;) Mirkocontroller: ATmega328p

Quellcode 1 funktioniert:
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
int main(void)
4
{
5
  
6
  DDRD = 0xFF;
7
  PORTD = 0x00;
8
  DDRB = 0x00;
9
  
10
    while(1) {
11
    if(~PINB & (1 << PINB0)) {
12
      PORTD = 0xCC;
13
    }    
14
  }
15
}

Der folgende Quellcode funktioniert nicht. Es werden nach der Betätigung 
des Tasters wieder die LEDs zurückgesetzt, also quasi "nicht 
speichernd". Mir total unklar..
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
int main(void)
4
{
5
  cli();
6
  
7
  TCCR0A = (1 << WGM01);
8
  TCCR0B = (1 << CS02) | (1 << CS00);
9
  OCR0A = 255;
10
  TIMSK0 = (1 << OCIE0A);
11
  
12
  DDRD = 0xFF;
13
  PORTD = 0x00;
14
  DDRB = 0x00;
15
  
16
  sei();
17
  
18
    while(1) {
19
    if(~PINB & (1 << PINB0)) {
20
      PORTD = 0xCC;
21
    }    
22
  }
23
}

Vielen Dank für die Hilfe ;)

von Beo Bachta (Gast)


Lesenswert?

Alexander M. schrieb:
> Vielen Dank für die Hilfe ;)

Du brauchst eine ISR die den Interrupt bedient den du
"programmiert" hast.

etwa so:
1
ISR (TIMER0_COMPA_vect)
2
{
3
    // hier etwas sinnvolles zum Timer tun
4
}

Sonst bekommst du dauernd einen Neustart deines Controllers.

von Alexander M. (a_lexander)


Lesenswert?

Alles Klar. Muss ich jetzt direkt im Datenblatt nachschauen... Danke!

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.