-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: ASURO Timer

  1. #1
    ASURO1995
    Gast

    ASURO Timer

    Anzeige

    hallo
    möchte einen timer einbinden der beim start zu zählen anfängt. sobald ein gewünschter wert erreicht ist soll eine funktion ausgelöst werden.

    z.b. mit diesem program soll der asuro 5" einer linie folgen, danach anhalten.

    Code:
    #include "asuro.h"
    
    int main(void){
    unsigned int data[2];
    	Init();
    	FrontLED(ON);
    	MotorDir(FWD,FWD);
    	MotorSpeed(255,255);
    	BackLED(ON,ON);
    	while(1){
    	LineData(data);
    	if (data[1] < 35 && data[0] < 35)
    	{MotorSpeed(255,255);
    	BackLED(ON,ON);
    	MotorDir(FWD,FWD);}
    	if (data[0] < 35 && data[1] > 35)
    	{MotorSpeed(150,255);
    	BackLED(OFF,ON);
    	MotorDir(FWD,FWD);}
    	if (data[0] > 35 && data[1] < 35)
    	{MotorSpeed(255,150);
    	BackLED(ON,OFF);
    	MotorDir(FWD,FWD);}
    	if (data[0] > 35 && data[1] > 35)
    	{MotorSpeed(155,155);
    	MotorDir(FWD,RWD);}
    	}
    	return 0;
    }
    hat jemand einen fertigen programmteil den man einfügen könnte.

    besten dank

    ASURO1995

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    32
    Beiträge
    731
    Ich weiss nicht ob der Asuro da schon was mitbringt, aber sowas geht mit einem Timer.
    http://www.rn-wissen.de/index.php/Timer/Counter_(Avr)

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Man könnte z.B. die Schleifendurchgänge zählen:
    Code:
    ...
    int main(void){
    unsigned int data[2];
    unsigned long loopcounter=0; // zählt die Schleifendurchgänge
       Init();
       FrontLED(ON);
       MotorDir(FWD,FWD);
       MotorSpeed(255,255);
       BackLED(ON,ON);
       while(1){
       if(loopcounter++ > 8000) // 8000 sind ca. 5 Sekunden
    	{
          StatusLED(YELLOW);
    		MotorSpeed(0,0);
    		loopcounter=0;
    		while(!PollSwitch()); // Warten auf Taste
    		StatusLED(GREEN);
    	}
       LineData(data);
    ...
    Das ist zwar nicht sehr genau, allerdings ist auch der Aufwand sehr gering.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    ASURO1995
    Gast
    danke

    wird mir sicher weiterhelfen

  5. #5
    ASURO1995
    Gast
    Jipiii...

    hat funktioniert!!!!

    danke \/

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    32
    Beiträge
    731
    Ist zwar eine sehr einfache Variante, aber mit anderer Controllerfrequenz bekommst du auch ein anderes Ergebnis

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Der asuro läuft zwingend mit 8MHz;) Natürlich schwankt die Zykluszeit mit der Länge des Programms in der Hauptscheife, aber wenn es funktioniert ist es doch gut, oder?

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    32
    Beiträge
    731
    Naja... Sagen wir einfach viele Wege führen nach Rom

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von Osser
    Registriert seit
    31.10.2006
    Ort
    Köln
    Alter
    47
    Beiträge
    387
    Hi,

    Du kannst auch Gettime(..) verwenden
    Code:
    .
    .
    int main(void) {
      uint16_t timeInMS;
      uint16_t timeDelta;
    
      Init();
      timeInMS = Gettime();
      while (1) {
        timeDelta = Gettime() - timeInMS;
        // Wird alle 1000ms==1sec ausgeführt
        if (timeDelta >= 1000) {
          timeInMS = Gettime();
          // hier dein code
        }
    
      }
      .
      .
    }

    Gruss,

    O.

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Gettime() ist nicht bei der orginalen CD-Lib dabei, das kam erst mit Msleep() und dem 36kHz-Timer, Wenn ich mich nicht irre...

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •