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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.