ATTiny durchlaufzeit -> Takt?

Gast #2531793
Lesenswert?

Hallo

Wie mache ich es, das ich einen halbwegs vernünftigen Takt 
zusammenbekomme?

Ich habe ein Programm, das unterschiedlich oft unterscheidlich lange 
braucht je nach dem halt.

Nun möchte ich aber gerne eben eine LED blinken lassen, je nach zusatnd 
des programmes, mal schnell - langsam usw.

Wie komme ich nun auf einen Halbwegs stablien Takt dafür?

Es geht hier nicht um µs, sonder eine genauigkeit von ein+- 100 ms ist 
total ausreichend.

Wie macht man das?

Timer1 ist definitiv schon in Verwednung für eine Soft Uart.

Sollte man dann den Timer2/Timer0 verwenden oder einfach Takte zählen?

verwendet wird ein ATTiny2313
#2531806
Lesenswert?

sn00py schrieb:

> Sollte man dann den Timer2/Timer0 verwenden oder einfach Takte zählen?

Wenn du einen Timer frei hast, dann benutz ihn doch!
Wenn du keinen Timer frei hast: Man kann durchaus einer Timer-ISR auch 
mehrere Aufgaben überantworten. Es ist nicht so, dass eine Timer-ISR nur 
eine Sache machen darf.

Für nicht benutzte Timer kriegst du von Atmel kein Geld zurück.

Timer-ISR aufsetzen, so dass sie zb alle 10 Millisekunden aufgerufen 
wird (oder was sich dann eben sonst bei dir einfach ausgeht).
Abhängig von einer globalen Variable 'Speed' wird einmal ein Zähler bis 
10 und ein anderes mal bis 20 gezählt, ehe in der Timer-ISR die LED 
umgeschaltet wird.

Eine simple Möglichkeit ist zb
1
#define BLINK_FAST   1
2
#define BLINK_SLOW   0
3

4
volatile uint8_t Speed;
5
uint8_t blinkCnt;
6

7
ISR( ... )
8
{
9
  blinkCnt++;
10

11
  if( ( Speed && blinkCnt > 10 ) ||
12
      ( !Speed && blinkCnt > 20 ) )
13
  {
14
    LED_PORT ^= ( 1 << LED_PIN );
15
    blinkCnt = 0;
16
  }
17
}

Im Hauptprogramm weißt du der variablen Speed einfach BLINK_FAST oder 
BLINK_SLOW zu, je nachdem was du haben willst.
#2531849
Lesenswert?

1
#define BLINK_FAST   10
2
#define BLINK_SLOW   20
3

4
volatile uint8_t Speed;
5
uint8_t blinkCnt;
6

7
ISR( ... )
8
{
9
  blinkCnt++;
10

11
  if( blinkCnt > Speed )
12
  {
13
    LED_PORT ^= ( 1 << LED_PIN );
14
    blinkCnt = 0;
15
  }
16
}
warum dann nicht gleich so, da können belibige Speedwerte definiert 
werden

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