AVR8 Timing mit Scheduler

Gast #2475122
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?
Gast #2475233
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)
#2475240
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
}

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