Forum: Mikrocontroller und Digitale Elektronik ATTiny durchlaufzeit -> Takt?


von sn00py (Gast)


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
von Karl H. (kbuchegg)


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.
von Vlad T. (vlad_tepesch)


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
von sn00py (Gast)


Lesenswert?

Ok danke, habs noch etwas umgebaut .... für meine sache
und funktioniert genau so wie es soll

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.