- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: [ASURO] Eure Programme

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.11.2004
    Alter
    48
    Beiträge
    153

    [ASURO] Eure Programme

    Anzeige

    Powerstation Test
    Ich würd mal gern sehen, was ihr euch für euren ASURO so für Programme geschrieben habt. Ich bastel zur Zeit an diesem hier:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();
    	
    	unsigned int crash;
    	unsigned int i;
    	
    	i = 0;
    	crash = 0;
    	
    	while(1)
    	{
    		if(PollSwitch() != 0)
    		{
    			crash = 1;
    			MotorSpeed(0, 0);
    			StatusLED(YELLOW);
    		}
    		
    		if(crash == 1)
    		{
    			StatusLED(RED);
    			while(i < 10)
    			{
    				MotorDir(RWD, RWD);
    				MotorSpeed(100, 100);
    				i++;
    			}
    			
    			i = 0;
    			
    			while(i < 10)
    			{
    				MotorDir(FWD, RWD);
    				MotorSpeed(100, 100);
    				i++;
    			}
    			
    			crash = 0;
    		}
    		else
    		{
    			MotorSpeed(150, 150);
    			MotorDir(FWD, FWD);
    			StatusLED(GREEN);
    		}
    	}
    	
    	return 0;
    }
    Wobei das nicht so läuft wie es sollte. Ich möchte, dass wenn mein ASURO irgendwo gegenfährt, ca. 1-2 Sekunden rückwärts fährt, sich dann ein wenig dreht und dann wieder vorwärts. Und das dann immer so, wenn er irgendwo gegenfährt. Nur habe ich das Problem, dass er sich nur dann dreht, wenn PollSwitch() ungleich 0 ist, also wenn einer der Sensoren gedrückt ist.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also wie schon geschrieben habe ich mich mit Sonics Hilfe mal dran gesetzt und die Funktionen in Bascom geschrieben. Das gibts alles hier zum Downloaden mit einer Beschreibung aller Funktionen:

    Zur Seite

    Oder halt hier das ganze Script:

    Code:
    '**************************************************************
    '******  Der Versuch Asuro in Bascom zu übersetzen ;-)   ******
    '******  Von: RCO                                        ******
    '******  Mit Hilfe von Sonic und natürlich der Asuro.c   ******
    '**************************************************************
    '*********          www.Roboternetz.de               **********
    '**************************************************************
    
    'Integrierte Funktionen:
    'Motordir(x,x)    x: Fwd, Rwd, Break, Free
    'Motorspeed(x,x)  x: 0-255
    'Backled(x,x)     x: An, Aus
    'Statusled(x)     x: Aus, Green, Red, Yellow
    'Frontled(x)      x: An, Aus
    'Odometrie()       Ausgabe in Odoright;Odoleft(word)
    'Linidata()        Ausgabe in Lineright;lineleft(word) (da data reserviert)
    'Pollswitch()     :ist selbst die Variable(byte)
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 2400
    On Int1 Int1_int
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Enable Interrupts
    Start Adc
    Enable Adc
    Enable Int1
    
    Config Int1 = Falling
    
    
    Declare Sub Motordir(byval Mldir As Byte , Byval Mrdir As Byte)
    Declare Sub Motorspeed(byval Mlspeed As Byte , Byval Mrspeed As Byte)
    Declare Sub Backled(byval Led1 As Byte , Byval Led2 As Byte)
    Declare Sub Frontled(byval Led1 As Byte)
    Declare Sub Statusled(byval Color As Byte)
    Declare Sub Odometrie()
    Declare Sub Linedata()
    Declare Function Pollswitch() As Byte
    '-----------Motoren-------------------
    Const Fwd = 1
    Const Rwd = 2
    Const Free = 3
    Const Brake = 4
    
    'Motor Rechts
    Config Pinb.1 = Output
    Config Pind.4 = Output
    Config Pind.5 = Output
    
    'Motor Links
    Config Pinb.2 = Output
    Config Pinb.4 = Output
    Config Pinb.5 = Output
    '----------Led------------------------
    Const Aus = 0
    Const Red = 1
    Const Green = 2
    Const Yellow = 3
    Const An = 1
    'FrontLED (Odometrie)
    Config Pind.6 = Output
    
    ' ****** !!! ACHTUNG !!! *******BACKLEDs***********************************
    
    Config Pinc.0 = Output                                      'Rechts
    Config Pinc.1 = Output                                      'Links
    
    ' Die BackLEDs können nicht genutzt werden wenn die Odometrie benutzt wird.
    ' --> BackLEDs pinc.0 und pinc.1 als Ausgang definieren
    ' --> Odometrie pinc.0 und pinc.1 als Eingang bzw. ADC definieren
    ' ****** !!! ACHTUNG !!! **************************************************
    
    'StatusLED
    Config Pind.2 = Output                                      'Rot?
    Config Pinb.0 = Output                                      'Grün?
    
    '----------Odometrie-------------------
    Dim Odoright As Word                                        'data geht nciht, da expression
    Dim Odoleft As Word
    Config Pinc.2 = Input
    Config Pinc.3 = Input
    
    '----------Line-------------------
    Dim Lineright As Word
    Dim Lineleft As Word
    'Config Pinc.0 = Input  'Nur aktivieren wenn Backleds aus
    'Config Pinc.1 = Input
    
    '-----------Pollswitch-----------
    Config Pind.3 = Input
    Portd.3 = 0                                                 'für den Interrupt
    Config Pinc.4 = Input
    Portc.4 = 0
    Dim Poll As Byte
    
    
    '##########################################################################
    '############################### Main #####################################
    '##########################################################################
    
    Do
    
    
    
    Loop
    End
    
    '##########################################################################
    '############################### Ende #####################################
    '##########################################################################
    
    '--------Subs-------------------------
    Sub Motorspeed(byval Mlspeed As Byte , Byval Mrspeed As Byte)
       Pwm1a = Mlspeed
       Pwm1b = Mrspeed
       End Sub
    
    Sub Frontled(byval Led1 As Byte)
       Portd.6 = Led1
       End Sub
    
    Sub Motordir(byval Mldir As Byte , Byval Mrdir As Byte)
       If Mldir = 1 Then                                        'FWD
          Portd.4 = 0
          Portd.5 = 1
       Elseif Mldir = 2 Then                                    'RWD
          Portd.4 = 1
          Portd.5 = 0
       Elseif Mldir = 3 Then                                    'FREE
          Portd.4 = 0
          Portd.5 = 0
       Elseif Mldir = 4 Then                                    'BRAKE
          Portd.4 = 1
          Portd.5 = 1
       End If
       '-----------------
       If Mrdir = 1 Then                                        'FWD
          Portb.4 = 0
          Portb.5 = 1
       Elseif Mrdir = 2 Then                                    'RWD
          Portb.4 = 1
          Portb.5 = 0
       Elseif Mrdir = 3 Then                                    'FREE
          Portb.4 = 0
          Portb.5 = 0
       Elseif Mrdir = 4 Then                                    'BRAKE
          Portb.4 = 1
          Portb.5 = 1
       End If
       End Sub
    
    Sub Backled(byval Led1 As Byte , Byval Led2 As Byte)
       Portc.1 = Led1
       Portc.0 = Led2
       End Sub
    
    Sub Statusled(byval Color As Byte)
       If Color = 0 Then                                        'Aus
       Portd.2 = 0
       Portb.0 = 0
       Elseif Color = 1 Then                                    'ROT?
       Portd.2 = 1
       Portb.0 = 0
       Elseif Color = 2 Then                                    'Green ?
       Portd.2 = 0
       Portb.0 = 1
       Elseif Color = 3 Then                                    'Yellow
       Portd.2 = 1
       Portb.0 = 1
       End If
       End Sub
    
    Sub Linedata()
       Lineright = Getadc(2)
       Lineleft = Getadc(3)
       End Sub
    
    Sub Odometrie()
       Odoright = Getadc(0)
       Odoleft = Getadc(1)
       End Sub
    
    Function Pollswitch() As Byte
    Dim Erg2 As Long
    Dim Erg1 As Word
    Portd.3 = 1
    Erg1 = Getadc(4)
    Erg2 = 10240000 / Erg1
    Erg2 = Erg2 - 10000
    Erg2 = Erg2 * 63
    Erg2 = Erg2 + 5000
    Erg2 = Erg2 / 10000
    Pollswitch = Erg2
    Portd.3 = 0
    End Function
    
    Int1_int:
    'Platz fpr Routine, z.B. Aufruf von Pollswitch()
    Return
    MFG Moritz

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    22.11.2003
    Beiträge
    214
    Das ist wirklich sehr schön und vereinfacht das Leben ungemein.
    Ich habe mal ein wenig gespielt. Ich möchte gerne Eure Treiber auslagern und mit :
    $include "Asu_Basc2_h.bas"
    und
    $include "Asu_Basc2_c.bas"
    die Anteile vor bzw nach der dem eigentlichen Hauptprogramm einbinden.
    Wenn ich das aber mache bekomme ich diverse Fehlermeldungen, die nicht erscheinen, wenn ich alles in einem File lasse.
    Kann mir das jemand erklären?
    Gruß Stefan

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Sorry, da kann ich dir auch nicht helfen, ich wollte eigentlich das selbe machen, habe mihc aber noch nicht damit beschäftigt, wie man Code auslagern kann.

    Vielleicht einfach mal einen neuen Thread dazu aufmachen.

    MFG moritz

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    22.11.2003
    Beiträge
    214
    Ich habs,
    man muss nur die ersten initialisierungsdaten (mit dem "$" davor im Hauptfile haben - dann gehts

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.01.2005
    Beiträge
    11
    Zitat Zitat von bergowitch
    Ich habs,
    man muss nur die ersten initialisierungsdaten (mit dem "$" davor im Hauptfile haben - dann gehts
    du meinst das $include <>? natürlich muss das im Hauptfile sein, weil du compilierst ja das Hauptfile
    ansonsten, schau mal in google nach "C in 21 days" da lernst du bestimmt schnell und viel

  7. #7
    Hallo!!

    Ich arbeite grade an einer extra datei die das programmieren in c mit bisher 3 funktionen vereinfacht:

    -MotorSpeed wird zu Speed und muss nun in prozent angegeben werden(individuell einstellbar auf eigenen roboter rechts-links-verhältnis....)
    -Blinken aller LEDs mit angaben des zeitintervalls in 10tel sekunden
    - unsd die dafür nötige funktion die sleep benutzt um einen timer in 10tel sekunden einzubauen.
    Code:
    /************************************************************
    *
    * Dateiname: eigen.h
    * Projekt : ASURO
    *
    *
    * Ver. Date Author Comments
    * ------- ---------- -------------- ------------------------------
    * 1.00 27.01.2005 build
    *
    ************************************************************/
    /***********************************************************
    *
    * Dieses Program ist frei verwendbar für jegliche Zwecke. man darf es verändern und/oder * duplizieren. Ich übernehme keine Haftung für eventuelle Schäden durch diese Datei.
    *
    ************************************************************/
    
    
    //Sleep mit eingabe in 10tel sekunden!
    //-----------------------------------------------------
    void Wait(unsigned int sek);
    void Wait(unsigned int sek){
    unsigned int i;
    unsigned int x;
    for(i=0; i<sek;i++){
    for(x=0;x<36;x++){
    Sleep(200);
    }
    }
    }
    //-----------------------------------------------------
    
    
    /*Blinken aller LEDs in rot */
    //-------------------------------------------------
    void Blinken(int i);
    void Blinken(int i){
    StatusLED(RED);
    FrontLED(ON);
    BackLED(ON,ON);
    Wait(i);
    StatusLED(OFF);
    FrontLED(OFF);
    BackLED(OFF,OFF);
    Wait(i);
    }
    
    //---------------------------------------------------
    
    
    /*MotorSpeed=Speed ( jetzt mit prozent angabe!)*/
    //----------------------------------------------------
    void Speed(int x, int y);
    void Speed(int x, int y){
    unsigned char left,right;
    if (((x*255)/100)>255){Blinken(10);}
    if (((x*251)/100)>251){Blinken(20);}
    left=(x*255)/100;
    right=(y*251)/100;
    MotorSpeed (left,right);
    }
    //-----------------------------------------------------/
    Angehängte Dateien Angehängte Dateien

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    Hallo Robotiker,

    Ich hab mich ein bischen verliebt in die Asuro und seinem Atmega chip. Ich mochte mahl genau verstehen wass da alles in die Atmega chip hervor geht. Mann ist das ein menge Arbeit!
    Ich hab mich jetzt mahl auf die InfraRot empfanger geworfen (mit hilfe von die Asuro.c Datei) und mahl ein einfaches Asuro steurung program geschrieben.
    Vielleicht habt Ihr schon manchmal dasselbe gemacht. Ich mochte's nur zeigen.
    Mit Hyperterminal kan mann Asuro mittels die pfeilen-tasten lenken.

    (immer die '.txt' entfernen)

    Gruss,

    Henk
    Angehängte Dateien Angehängte Dateien

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Simpel und trotzdem lustig, macht echjt Spaß

    MFG Moritz

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    30.12.2004
    Ort
    Oberösterreich/Linz
    Alter
    33
    Beiträge
    76
    Auch wenn das eine ziemlich blöde Frage ist wie kann ich das ´.txt´entfernen?????

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad