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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.