Forum: Compiler & IDEs AVR8 Timing mit Scheduler


von gb87 (Gast)


Lesenswert?

Hi,

Ich suche gerade Funktionen um Timing mit einem Scheduler für einen AVR8 
(AT90USB162) zu machen.
Der Scheduler macht hauptsächlich nur das USB, und einen Task von mir 
(der ruft die Funktionen einfach nur hintereinander auf).
Ich schalte Ventile mit dem Ding, das Timing davon muss so auf 1-10ms 
genau sein.
_delay_ms / us geht nicht weil der USB-Task weiterlaufen soll.

beim AVR32 hatte ich für sowas die cycle_counter.h Funktionen mit denen 
ich die aktuellen Millisekunden seid dem Anschalten abfragen konnte.

Gibts sowas für AVR8? bzw. wie würde man es sonst machen?

von Marius W. (mw1987)


Lesenswert?

Stichwort: Timer

von gb87 (Gast)


Lesenswert?

Marius Wensing schrieb:
> Stichwort: Timer

Da hasste dir ja viel mühe gegeben, also: es gibt da nichts fertiges für 
den AVR8?
Sonst Timer+Interrupt+Zählen oder was?

von Karl H. (kbuchegg)


Lesenswert?

gb87 schrieb:
> Marius Wensing schrieb:
>> Stichwort: Timer
>
> Da hasste dir ja viel mühe gegeben,

Wie man in den Wald hineinruft ....

> Sonst Timer+Interrupt+Zählen oder was?
letzten Endes: genau so.

Wie das bei deinem Scheduler konkret aussieht und ob es da etwas 
Fertiges gibt, weiß die Doku zu deinem Scheduler.

von gb87 (Gast)


Lesenswert?

Ich dachte halt bei so einem Standard Problem gibts da schon was 
fertiges, ich konnte aber nichts richtiges finden.
Hätte mir gedacht dass das schon hunderte Programmierer vor mir 
geschrieben haben und den Code optimiert haben etc...

Karl Heinz Buchegger schrieb:
> Wie das bei deinem Scheduler konkret aussieht und ob es da etwas
> Fertiges gibt, weiß die Doku zu deinem Scheduler.

while(1)
{
  funktion1();
  funktion2();
  ....
}

Das ist der Scheduler ;)

ich hätte halt was gesucht wo man gleich funktionen hat um dem 
timer/interrupt zu starten und ein funktionen um die Zeit ab dem Start 
im MS abzufragen (wie halt der cycle_counter vom AVR32)

von Uwe (de0508)


Lesenswert?

Hallo gb87,

es sei auf:

a) Beitrag "Wartezeiten effektiv (Scheduler)"
b) http://www.cocoos.net/

verwiesen.

Beide Systeme setzte ich ein und sie laufen 1A.

Um den Timer(-steuerung) musst Du dich selber kümmern, da man nicht 
wissen kann, welche Du sonst noch verwendest. Stichwort PWM..

Beispiel: cocoos.net
1
int main(void)
2
{
3
  cli();
4
  wdt_reset();
5
6
  /* Setup ports, clock... */
7
  system_init();
8
9
  /* Initialize cocoOS */
10
  os_init();
11
12
  /* Create event objects */
13
14
  twi_received_event = event_create();
15
  rs232_received_event = event_create();
16
17
  /* Create kernel objects */
18
19
  // 7-segment LED Multiplexer
20
  task_create( task_7d_led, 1, NULL, 0, 0 );
21
  task_create( task_twi_request_data, 2, NULL, 0, 0 );
22
  task_create( task_rs232_request_data, 3, NULL, 0, 0 );
23
  task_create( task_wdt_reset, 4, NULL, 0, 0 );
24
  task_create( task_send_alive, 5, NULL, 0, 0 );
25
26
  clock_init_us(CLOCK_TICK_US);
27
28
  os_start();
29
30
  return 0;
31
}

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.