- LiTime Speicher und Akkus         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 39

Thema: Programmierung C - Asuro

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    02.01.2012
    Beiträge
    31

    Programmierung C - Asuro

    Anzeige

    Praxistest und DIY Projekte
    Hallo!

    Ich bin versiert im Umgang mit Programmiersprachen, doch auf dem Gebiet C bin ich ein Neuling. Jetzt hab ich mir ein einfaches Programm für den Asuro gebastelt, aber es will und will nicht funktionieren. Er überspringt mir ständig meine Schleife, von der das Fahren abhängig ist - hier mal ein Code (hab ihn vereinfacht, aber vielleicht könnt ihr mir mal Tipps geben, wie er mir die Schleife mitnimm)

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();
    	int i;
    	i=1;
    	while(i<300)
    	{
    	MotorDir(FWD,FWD);
    	MotorSpeed(200,200);
    	i++;
    	}
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(0,0);
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hallo,

    ich selbst kann zwar kein (oder nur sehr sehr wenig) C, aber was glaubst du, wielange der µC braucht, deine while(i<300) Schleife abzuarbeiten? Das geht so schnell, dass die Motoren nicht einmal drauf reagieren können.
    Du könntest z.b. einen Wait-Befehl einbauen, in C heißt das glaube ich Delay(x). Aber da kenne ich mich zuwenig aus.

    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Zuerst musst du die util/delay.h includen und dann kannst du per _delay_ms(x); für x millisekunden pausieren.

    Code:
    #include "asuro.h"
    #include <util/delay.h>  int main(void) {     Init();     int i;     i=1;     while(i<300)     {     MotorDir(FWD,FWD);     MotorSpeed(200,200);     i++;
            _delay_ms(500); // eine halbe sekunde pausieren bevor weitergemacht wird     }     MotorDir(BREAK,BREAK);     MotorSpeed(0,0);
    }
    
    EDIT: sorry der online editor hat mir das layout zerissen.. :/
    MfG Torrentula

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    In der Library des asuro befindet sich die Funktion Sleep() zur Verzögerung. Ein Sleep(1) dauert 1/72000 Sekunden, eine Verzögerung um eine Sekunde könnte dann etwa so aussehen:

    while(1=0; i<1000; i++) Sleep(72); // 72 ist eine Millisekunde mit der 72kHz-Library.

    Programme für AVR-Microkontroller sollten nie beendet werden, da niemand weiß, wohin der Rücksprung aus main() führt und welche Folgen ein Rücksprung haben kann! Deshalb sollten die Progamme als Endlosschleife laufen oder in einer solchen Enden:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();
    	while(1)
    	{
    //eigenes Programm
    	}
    	return(0);
    }
    (Programmgrundgerüst für den asuro)


    Dein Programm von oben könnte also etwa so aussehen:

    Code:
    #include "asuro.h"
    
    int i;
    
    int main(void)
    {
    	Init();
    	MotorDir(FWD,FWD);
    	MotorSpeed(200,200);
    	for(i=0; i>1000; i++) Sleep(72);
    	StatusLED(RED);
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(0,0);
    	while(1);
    	return(0);
    }
    Gruß

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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    02.01.2012
    Beiträge
    31
    Vielen Dank für eure Antworten - ich hab mir schon soetwas gedacht, hab aber nicht recht gewusst wie ich die Sleep-Funktion richtig einsetze - vielen Dank nochmal, auch den Tipp bez. des Codes!

    [EDIT]
    Eines ist mir aber noch unklar - wieso ist da eine Schleife vor dem Sleep? Die bräucht ich in dem Fall ja gar nicht, wenn ich einfach die Sleepzeit mit 1000 multipliziere hab ich ja die Sekunden, oder verstehe ich da was falsch?

    Vielen Dank!
    [/EDIT]
    Geändert von brandy_000 (03.01.2012 um 23:57 Uhr)

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Die for-Schleife macht 1000 mal Sleep(72), wartet also eine Sekunde. Die Sleepzeit kann nicht größer als 255 sein, weil der Parameter für Sleep() ein char ist.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    02.01.2012
    Beiträge
    31
    Ok danke...

    Vielen Dank!

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    02.01.2012
    Beiträge
    31
    So jetzt brauch ich nochmals eure Hilfe!

    Hier mein Code:
    Code:
    #include "asuro.h"
    
    int i;
    
    int main(void)
    {
    	Init();
    	MotorDir(FWD,FWD);
    	MotorSpeed(200,200);
    	StatusLED(GREEN);
    	for(i=0; i>2000; i++) Sleep(72);
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(0,0);
    	StatusLED(RED);
    	while(1);
    	return(0);
    }
    Theoretisch sollte er jetzt losfahren - 2 Sekunden lang fahren und dann bremsen. Macht er aber nicht, sondern nach dem Booten leuchtet sofort die rote LED!
    Vielen Dank nochmal!

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    i>2000

    i ist nie größer als 2000, die Schleife wird deshalb sofort wieder verlassen. Blöd wenn man ungetestete Programme verbreitet. Entschuldigung. Richtig wäre

    for(i=0; i<2000; i++)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    02.01.2012
    Beiträge
    31
    Ok das hätte ich auch selbst sehen können!
    Danke nochmal!

Seite 1 von 4 123 ... LetzteLetzte

Ähnliche Themen

  1. Asuro Programmierung
    Von Berghuhn im Forum Asuro
    Antworten: 18
    Letzter Beitrag: 15.10.2010, 07:04
  2. Asuro Programmierung
    Von Hannes1984 im Forum Asuro
    Antworten: 0
    Letzter Beitrag: 12.05.2009, 22:35
  3. ASURO Programmierung
    Von teufeldd im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 2
    Letzter Beitrag: 04.04.2007, 11:02
  4. Probleme mit Asuro programmierung
    Von Paripah im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 12.05.2006, 15:10
  5. ASURO-Programmierung
    Von baschi-1,3 im Forum Asuro
    Antworten: 3
    Letzter Beitrag: 20.04.2006, 13:48

Berechtigungen

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

LiFePO4 Speicher Test