-         

Ergebnis 1 bis 2 von 2

Thema: Motoransteuerung RN-Stepp 297 mit RN-Control V 1.4 Pause zwischen Drehung einfügen

  1. #1

    Motoransteuerung RN-Stepp 297 mit RN-Control V 1.4 Pause zwischen Drehung einfügen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,
    ich bin noch ein ziemlicher Anfänger was Elektronik und Programmierung betrifft daher eine recht simple Frage.

    Wie kann ich in den Code von RN_Stepp297_beispiele.bas von der Robotikhardware CD folgende Funktion einfügen
    Wenn ich die Taste 2 drücke (Case2) soll sich der Schrittmotor 82 Schritte drehen dann eine Pause von 2 sec einlegen und dann wieder 82 Schritte drehen und das ganze 72 mal

    Hier ist nochmal der Ganze Code und Danke im Voraus

    '################################################# ##
    'Schrittmotoransteuerung mit RN-Control und
    'Ansteuerungsboard RN-Stepp297
    'RN-Stepp297 ist die bekannt Standardschaltung
    'mit L297 und L298 (Bausatz)
    'rn_stepp297_beispiele
    '
    ' Achtung:
    ' Diese Demo ist mit Bascom Compiler 1.11.8.4 getestet
    ' Getestet mit RN-Schrittmotor Firmware V 1.1
    '
    ' RN-Stepp97 wird wie folgt angeschlossen
    ' Enable auf PA0 / Richtung auf PA1 / Takt auf PA2
    '
    'Aufgabe:
    ' Dieses Testprogramm zeigt wie man RN-Stepp297
    ' über Takt- und Richtungsleitung ansteuert

    ' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
    ' Taste 1: Schaltet Motorstrom ein (Stellung wird gehalten)
    ' Taste 2: Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren)
    ' Taste 3: Bewegt Motor schneller genau 400 Halbschritte
    ' Taste 4: Ändert die Drehrichtung
    ''Taste 5: Schaltet Motor aus
    '
    'Autor: Frank
    'Weitere Beispiele und Beschreibung der Hardware
    'in der Anleitung zu RN-Schrittmotor
    'Anleitung findet man unter http://www.Roboternetz.de im Download Bereich
    'oder www.robotikhardware.de
    'Weitere Beispiele sind im Roboternetz gerne willkommen!
    '################################################# #############

    $programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)




    ' -------------- RN-Control übliche _____________________
    Declare Function Tastenabfrage() As Byte

    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 64

    $crystal = 16000000 'Quarzfrequenz
    $baud = 9600
    Config Scl = Portc.0 'Ports fuer IIC-Bus
    Config Sda = Portc.1

    Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
    Config Pina.7 = Input 'Für Tastenabfrage
    Porta.7 = 1 'Pullup Widerstand ein
    Dim Taste As Byte
    Dim Ton As Integer

    I2cinit
    Start Adc
    Sound Portd.7 , 400 , 450 'BEEP
    Sound Portd.7 , 400 , 250 'BEEP
    Sound Portd.7 , 400 , 450 'BEEP
    Print
    Print "**** RN-Control V1.4 *****"
    Print "Demoprogramm um Zusatzboard RN-Stepp297 zu testen/demonstrieren"
    Print
    ' -------------- Ende RN-Control übliche _____________________


    Config Pina.0 = Output
    Stepper_enable Alias Porta.0

    Config Pina.1 = Output
    Stepper_richtung Alias Porta.1

    Config Pina.2 = Output
    Stepper_takt Alias Porta.2

    Dim I As Integer


    Stepper_enable = 0 ' Erst mal aus


    Do
    Taste = Tastenabfrage()
    If Taste <> 0 Then

    Select Case Taste

    Case 1 'Schaltet Motorstrom ein
    Stepper_enable = 1

    Case 2 'Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren)
    For I = 1 To 400
    Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1
    Waitms 30
    Next


    Case 3
    For I = 1 To 400
    Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1
    Waitms 5
    Next


    Case 4
    Toggle Stepper_richtung

    Case 5 'Schaltet Motor aus
    Stepper_enable = 0


    End Select
    Sound Portd.7 , 400 , 500 'BEEP
    End If

    Waitms 100
    Loop

    End




    ' Diese Unterfunktion fragt die Tastatur am analogen Port ab
    ' Sollte beim betätigen einer Taste kein Quittungston kommen, dann
    ' muss die die Tastenabfrage (Select Case Anweisung in Funktion )
    ' an ihr Board angepaßt werden. Widerstandstoleranzen sorgen in
    ' Einzelfällen manchmal dafür das die Werte etwas anders ausfallen
    ' Am besten dann den WS wert mit Print für jede Taste ausgeben lassen

    Function Tastenabfrage() As Byte
    Local Ws As Word

    Tastenabfrage = 0
    Ton = 600
    Ws = Getadc(7)
    ' Print "ws= " ; Ws
    If Ws < 1010 Then
    Select Case Ws
    Case 400 To 455
    Tastenabfrage = 1
    Ton = 550
    Case 335 To 380
    Tastenabfrage = 2
    Ton = 500
    Case 250 To 305
    Tastenabfrage = 3
    Ton = 450
    Case 180 To 220
    Tastenabfrage = 4
    Ton = 400
    Case 100 To 130
    Tastenabfrage = 5
    Ton = 350
    End Select
    Sound Portd.7 , 400 , Ton 'BEEP
    End If

    End Function

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    Das braucht dann seine Zeit. 72 Mal 2 Sekunden Pause plus 72 Mal 82 Umdrehungen inkl. 30 ms Pause. Da würde ich mir dann Gedanken um "Multitasking" machen. Entweder per Timer oder mit Zeitschlitzen arbeiten. Falls Daten per I2C übertragen werden sollen und auch die Stopptaste würde ich während dessen nicht stilllegen. Ist das in Deinem Projekt nicht von Bedeutung, dann einfach die Schleife von 400 auf 82 ändern und eine Pause von 2 Sekunden einfügen. Darum noch eine 2. Schleife mit 72 Durchläufen und Deine Wünsche sind ohne Rücksicht auf Verluste der Tasten und I2C während der Codeausführung erfüllt.

    In den Kopf:
    Code:
    dim Durchlauf as byte
    Dann die Änderungen:
    Code:
    Case 2                                             'Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren)
    For Durchlauf = 1 to 72
       For I = 1 To 82
                          Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1 
           Waitms 30
       Next I
       Wait 2
    next durchlauf
    Oder mit Stopptaste:

    In den Kopf:
    Code:
    dim Durchlauf as byte
    dim ipause as integer
    dim abbruch as byte 'schneller als bit
    Dann die Änderungen:
    Code:
    Case 2                                             'Bewegt Motor genau 400 Halbschritte (1 Umdrehung bei den meisten Motoren)
    abbruch=0
    For Durchlauf = 1 to 72
       For I = 1 To 82
                          Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1 
           Waitms 30
           if abbruch=1 then exit for
       Next I
       for ipause= 1 to 2000 ' evtl. Wegen Tastenabfrage verkleinern
          Waitms 1
          taste = tastenabfrage()
          if taste=5 then
             abbruch=1
          end if
         if abbruch=1 then exit for
    next durchlauf
    Alles ungetestet...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Ähnliche Themen

  1. Bascom- Programmierung für RN-Control und RN-Stepp 297 mit T
    Von Karsten6 im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 0
    Letzter Beitrag: 08.08.2010, 17:21
  2. LED-blinkt - auch ohne Pause zwischen ein/aus
    Von Dolfo im Forum Assembler-Programmierung
    Antworten: 3
    Letzter Beitrag: 14.05.2009, 07:04
  3. Antworten: 1
    Letzter Beitrag: 11.11.2008, 17:06
  4. Motoransteuerung auf RN-Control
    Von Lunarman im Forum Motoren
    Antworten: 5
    Letzter Beitrag: 18.02.2006, 15:07
  5. Pause einfügen mit Timer1
    Von ceekay im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 28.09.2005, 17:17

Berechtigungen

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