- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 29

Thema: RNFRA+Sensor+Schrittmotor

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    ja hatte es in einem anderen thread gelesen nachdem ich die frage gepostet habe aner trotzdem danke
    hatte vergessen dass $regfile "m32def.dat" einzugeben
    MfG
    DarkSoldier

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    @Richard die Datein gibts im Netz zum download:http://www.shop.robotikhardware.de/s...products_id=12
    hätte dann noch eine Frage: Ich habe oben beschrieben wie ich meinen roboter programmieren will. Dazu habe ich jetzt ein Programm geschrieben nur, weiß ich nicht ob dass funktioniert wie ich mir das Vorstelle. Als ich es ausprobieren wollte, kam mal wieder eine Fehlermeldung. Deswegen würde ich jemanden der mit Bascom erfahrung hat bitten, dies zu kontrollieren und zu sagen was falsch ist . Das ist eins der ersten Programme die ich selber geschrieben habe, deswegen bitte ich euch nicht auf die "äußere Form " zu achten.
    Wäre nett wenn ihr mir weiter helfen könntet, mal wieder
    MfG
    Danke im Vorraus DarkSoldier






    $regfile "m32def.dat"
    Declare Sub Ledein
    Declare Sub Ledaus
    Const Writepowerport_adr = &H72
    Const Readpowerport_adr = &H73
    Dim I2cdaten As Byte
    Dim I As Word
    $crystal = 8000000
    Config Scl = Portc.0
    Config Sda = Portc.1
    I2cinit
    I2cstart
    I2cwbyte &H74
    I2cwbyte &B00000010
    I2cstop
    Config Pind.6 = Output
    Portd.6 = 1

    Config Pinc.5 = Output
    Portc.5 = 0
    Config Pind.6 = Output
    Portd.6 = 1
    Elseif
    I2cstart
    I2cwbyte Writepowerport_adr
    I2cwbyte 15
    I2cstop
    Then
    Config Pind.6 = Output
    Portd.6 = 0
    Config Pinc.4 = Output
    Portc.4 = 0
    Config Pinc.5 = Output
    Portc.5 = 1
    Config Pinc.3 = Output
    Do
    Portc.2 = 0
    Waitms 5
    Portc.2 = 1
    Waitms 5
    Loop Until I < 1
    Config Pind.6 = Output
    Portd.6 = 1

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Das ist eins der ersten Programme die ich selber geschrieben habe, deswegen bitte ich euch nicht auf die "äußere Form " zu achten.
    Du solltest gleich von Beginn an eine gewisse Ordnung in deine Programme bringen. Programmkopf mit Kompileranweisungen, Definitionen, Variablen, Funktionen, Configs und dann die Hauptschleife. Nicht nur wir können dann besser nachvollziehen, was das Programm bewirken soll. Da ich normalerweise in C programmiere kann ich als Beispiel nur ein Programm präsentieren, das ich noch auf meiner Festplatte gefunden habe:

    Code:
    $regfile = "M168Pdef.dat"                                   'es handelt sich um einen ATmega168P
    $crystal = 3686400                                          'der eingebauter RC-Oszillator läuft mit 3,6864 Mhz
    $hwstack = 60                                               'im Speicher werden für den Hardware-Stack 60 Byte reserviert
    $swstack = 60                                               'im Speicher werden für den Software-Stack 60 Byte reserviert
    $framesize = 80                                             'im Speicher werden für den Frame 80 Byte reserviert
    $baud = 19200
    
    
    
    
    'IR Sensor
    Dim Ir As Word
    
    'Motoren
    Dim Mrechts As Byte , Mlinks As Byte
    
    'Servostellung
    Dim Servo1 As Byte , X30 As Bit , X40 As Bit , X50 As Bit , X60 As Bit , X70 As Bit , X80 As Bit
    
    
    'Input für Taster
    S1 Alias Pind.2
    Smi Alias Pinc.1
    
    'Taster
    Config S1 = Input
    Config Smi = Input
    
    'PullUp-Widerstand einschalten
    S1 = 1
    Smi = 1
    
    
    'Submenüs Declarieren
    Declare Sub Vor
    Declare Sub Stopp
    Declare Sub Denken
    Declare Sub Zurück
    Declare Sub Weniglinks
    Declare Sub Links
    Declare Sub Wenigrechts
    Declare Sub Rechts
    Declare Sub Sehen
    
    'PWM Modulieren
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
    
    'Motoren 0 = Vollgas
    Mrechts = 0
    Mlinks = 0
    
    
    'Output für PWM
    Config Portb.1 = Output
    Config Portb.2 = Output
    
    
    'Motoren
    M1vor Alias Portd.4
    M1zur Alias Portd.5
    M2vor Alias Portd.6
    M2zur Alias Portd.7
    
    Config M1vor = Output
    Config M1zur = Output
    Config M2vor = Output
    Config M2zur = Output
    
    
    
    'IR Sensor 300 ca 20 cm, 500 ca 10 cm
    'Config für Ir Augen
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Start Adc
    
    
    'Servo Settings
    'Servo von 20 - 106 (Verwendet 30-80)
    Config Servos = 1 , Servo1 = Portd.3 , Reload = 10
    Config Portd.3 = Output
    
    Enable Interrupts
    
    'Servo in Mittelstellung
    Servo(1) = 54
    
    
    
    'S1 schaltet Robi ein
    Bitwait S1 , Reset
    Bitwait S1 , Set
    
    Wait 1
    
    
    'Hauptschleife Go
    Haupt:
    
    Do
    
       Print "Hauptschleife"
    
      'Mitte  Ca. 54 , 30 Links, 80 Rechts
    
       Servo(1) = 35
    
       Call Sehen
       Call Sehen
       Call Sehen
       Call Sehen
    
       Servo(1) = 75
    
       Call Sehen
       Call Sehen
       Call Sehen
       Call Sehen
    
       Call Vor
    
    Loop
    
    
    
    End                                                         'end program
    
    
    
    Sub Denken
    
       Print "Denken"
    
       'Stopp
       M1vor = 0
       M2vor = 0
       M1zur = 0
       M2zur = 0
    
    
       Waitms 100
       Servo1 = 30
       Servo(1) = Servo1
    
       X30 = 0
       X40 = 0
       X50 = 0
       X60 = 0
       X70 = 0
       X80 = 0
    
       Waitms 300
    
       Do
    
          If Smi = 0 Then Call Zurück
          Servo(1) = Servo1
          Waitms 50
          Ir = Getadc(0)
          If Servo1 = 30 And Ir > 210 Then X30 = 1
          If Servo1 = 35 And Ir > 210 Then X30 = 1
          If Servo1 = 40 And Ir > 210 Then X40 = 1
          If Servo1 = 45 And Ir > 210 Then X40 = 1
          If Servo1 = 50 And Ir > 210 Then X50 = 1
          If Servo1 = 55 And Ir > 210 Then X50 = 1
          If Servo1 = 60 And Ir > 210 Then X60 = 1
          If Servo1 = 65 And Ir > 210 Then X60 = 1
          If Servo1 = 70 And Ir > 210 Then X70 = 1
          If Servo1 = 75 And Ir > 210 Then X70 = 1
          If Servo1 = 80 And Ir > 210 Then X80 = 1
    
          Print "Servopos.: " ; Servo1 ; "  Ir: " ; Ir
    
          Servo1 = Servo1 + 5
    
       Loop Until Servo1 > 80
    
    
    
       If X30 = 1 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Wenigrechts
       If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 1 Then Call Weniglinks
    
       If X30 = 1 And X40 = 1 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts
       If X30 = 1 And X40 = 1 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts
       If X30 = 1 And X40 = 1 And X50 = 1 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts
    
       If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 1 And X80 = 1 Then Call Links
       If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 1 And X80 = 1 Then Call Links
       If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 1 And X70 = 1 And X80 = 1 Then Call Links
    
       If X50 = 1 And X60 = 1 Then Call Zurück
       If X40 = 1 And X70 = 1 Then Call Zurück
    
       Call Vor
    
    End Sub
    
    
    
    
    
    Sub Stopp
    
       Print "Stopp"
    
       'Stopp
       M1vor = 0
       M2vor = 0
       M1zur = 0
       M2zur = 0
    
       Goto Denken
    
    End Sub
    
    
    Sub Vor
    
       Print "Vor"
    
       Pwm1a = Mrechts
       Pwm1b = Mlinks
    
       'Vorwärts fahren
       M1vor = 1
       M2vor = 1
       M1zur = 0
       M2zur = 0
    
       Goto Haupt
    
    End Sub
    
    
    Sub Weniglinks
    
       Print "Weniglinks"
    
       M1vor = 0
       M2vor = 0
       M1zur = 1
       M2zur = 0
    
       Waitms 100
    
       Call Stopp
    
    End Sub
    
    
    Sub Links
    
       Print "Links"
    
       M1vor = 0
       M2vor = 0
       M1zur = 1
       M2zur = 0
    
       Waitms 200
    
       Call Stopp
    
    End Sub
    
    
    Sub Wenigrechts
    
       Print "Wenigrechts"
    
       M1vor = 0
       M2vor = 0
       M1zur = 0
       M2zur = 1
    
       Waitms 100
    
       Call Stopp
    
    End Sub
    
    
    
    Sub Rechts
    
       Print "Rechts"
    
       M1vor = 0
       M2vor = 0
       M1zur = 0
       M2zur = 1
    
       Waitms 200
    
       Call Stopp
    
    End Sub
    
    
    
    
    Sub Zurück
    
        Print "Zurück"
    
        'Zurück
        M1vor = 0
        M2vor = 0
        M1zur = 1
        M2zur = 1
    
        Waitms 250
    
        If Ir > 256 Then Call Links
        If Ir < 257 Then Call Rechts
    
    End Sub
    
    
    Sub Sehen
    
       If Smi = 0 Then Call Zurück
       If S1 = 0 Then Mrechts = Mrechts + 2
    
       Ir = Getadc(0)
       Print "Servo: " ; Servo(1) ; "  Ir: " ; Ir
       If Ir > 230 Then Call Stopp
       Waitms 50
    
    End Sub
    Keine Ahnung, um was es dabei ging. Es soll nur zeigen, wie hübsch ein struckturierter Programmaufbau aussieht.

    Gruß

    mic

    Edit:

    Ich habe mal versucht dein Programm zu ordnen:

    Code:
    $regfile "m32def.dat"
    $crystal = 8000000
    
    Const Writepowerport_adr = &H72
    Const Readpowerport_adr = &H73
    
    Dim I2cdaten As Byte
    Dim I As Word
    
    Config Scl = Portc.0
    Config Sda = Portc.1
    
    Config Pinc.3 = Output
    Config Pinc.4 = Output
    Config Pinc.5 = Output
    Config Pind.6 = Output
    
    Declare Sub Ledein
    Declare Sub Ledaus
    
    I2cinit
    I2cstart
    I2cwbyte &H74
    I2cwbyte &B00000010
    I2cstop
    Portd.6 = 1
    Portc.5 = 0
    Portd.6 = 1
    
    Elseif
    
    I2cstart
    I2cwbyte Writepowerport_adr
    I2cwbyte 15
    I2cstop
    
    Then
    Portd.6 = 0
    Portc.4 = 0
    Portc.5 = 1
    
    Do
    Portc.2 = 0
    Waitms 5
    Portc.2 = 1
    Waitms 5
    
    Loop Until I < 1
    Portd.6 = 1
    Irgendwie wird's dadurch aber auch nicht besser. Vielleicht solltest du dir mal ein Bascom-Tutorial durchlesen.
    Geändert von radbruch (19.06.2011 um 15:44 Uhr) Grund: Edit angefügt
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Das ist kein Programm, wo sind die Sub Routinen und wo werden sie aufgerufen/beendet?
    Ein Elseif oder auch ein Then alleine in einer Zeile ergibt keinen Sinn...und bitte Programmzeilen/Beispiele in Code Tags
    (
    Code:
    )
    Programm
    (
    )
    Einsperren.

    Gruß Richard

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 25.04.2006, 08:35
  2. RNFRA Board und Schrittmotor
    Von burkione im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 05.01.2006, 12:47
  3. Antworten: 0
    Letzter Beitrag: 03.01.2006, 19:35
  4. RNFRA Board mit C-Control
    Von jagdfalke im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 2
    Letzter Beitrag: 10.03.2005, 14:51
  5. Schrittmotor als Sensor
    Von sonic im Forum Sensoren / Sensorik
    Antworten: 37
    Letzter Beitrag: 08.07.2004, 09:33

Stichworte

Berechtigungen

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

Labornetzteil AliExpress