-
        

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

Thema: 2 Wiederholungen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.12.2005
    Ort
    München
    Alter
    39
    Beiträge
    27

    2 Wiederholungen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo liebe Leute,

    ich habe hier einen Schrittmotor (7,5°) an meinem RN-Control und jetzt habe ich 2x hintereinander einen:
    Dim I As Byte
    For I = To 10
    Motor schritt 1-4
    Next I

    warum läuft nur immer der erste und den zweiten findet er nicht was mache ich falsch???

    Code:
    '#####################################
    'Schrittmotoransteuerung an RN-Control
    'Art= Vollschritt bipolar
    'Anschluss 1 = Orange
    'Anschluss 2 = Gelb
    'Anschluss 3 = Braun
    'Anschluss 4 = Schwarz
    '#####################################
    
    
    $regfile = "m32def.dat"                                     'controller definieren
    $crystal = 16000000                                         'Taktfrequenz definieren
    
    Config Portb = Output                                       'Port als "Ausgang" definieren
    Config Portc = Output
    Config Portd = Output
    
    1a Alias Portb.0                                            'Pin als Spule 1a benennen
    1b Alias Portb.1                                            'Spule 1b
    
    2a Alias Portc.6                                            'Spule 2a
    2b Alias Portc.7                                            'Spule 2b
    
    
    Portb.0 = 0                                                 'Spule 1a definiert auf Null
    Portb.1 = 0                                                 'Spule 1b
    
    Portc.6 = 0                                                 'Spule 2a
    Portc.7 = 0                                                 'Spule 2b
    
    Portd.4 = 1                                                 'Motortreiber Spule 1 Enable
    Portd.5 = 1                                                 'Motortreiber Spule 2 Enable
    
    Dim I As Byte
    For I = 1 To 60
    
    Dim Zeit As Byte
    Zeit = 3                                                    'Zeit zwischen den einzelnen Schritten (kleiner=schneller)
    
    1a = 1 : 1b = 0 : 2a = 1 : 2b = 0                           'Schritt 1
    Waitms Zeit
    1a = 1 : 1b = 0 : 2a = 0 : 2b = 1                           'Schritt 2
    Waitms Zeit
    1a = 0 : 1b = 1 : 2a = 0 : 2b = 1                           'Schritt 3
    Waitms Zeit
    1a = 0 : 1b = 1 : 2a = 1 : 2b = 0                           'Schritt 4
    Waitms Zeit
    Next I
    
    Waitms 100
    
    Dim A As Byte
    For A = 1 To 60
    
    Dim Zeit As Byte
    Zeit = 3                                                    'Zeit zwischen den einzelnen Schritten (kleiner=schneller)
    
    1a = 1 : 1b = 0 : 2a = 1 : 2b = 0                           'Schritt 1
    Waitms Zeit
    1a = 1 : 1b = 0 : 2a = 0 : 2b = 1                           'Schritt 2
    Waitms Zeit
    1a = 0 : 1b = 1 : 2a = 0 : 2b = 1                           'Schritt 3
    Waitms Zeit
    1a = 0 : 1b = 1 : 2a = 1 : 2b = 0                           'Schritt 4
    Waitms Zeit
    Next A
    
    
    End

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Yo,is nen Fehler drinne und das Listing ist schlecht strukturiert slso unübersichtlich wodurch fehler leicht herausgefordert werden.

    Die Grundstruktur ist eigentlich immer gleich.

    Oben kommen die Definitionen hin.
    Also Variablen,benötigte Libs,welcher Controller usw.
    Darunter dann die evtl. nötigen Vorbereitungen (Bei dir der Definierte Startzustand)
    Ert jetzt kommt der eigentliche Programmbereich den man immer mit einem "END" abschließen sollte damit im Zweifelsfalle der Controller nicht versehentlich in die Papmpa läuft und Unsinn anstellt.(Haste ja gemacht)
    Danach kommen eventuelle Daten (Datazeilen,EEProminhalte usw)

    Wenn de dich dran hälst dann wirds leichter.


    Ich hab mal alle Definitionen nach oben geschoben.

    Die Doppelte "Dim Zeit" wird schon vom Compiler angemeckert (Is dir da nix aufgefallen ?).
    Hab ich entfernt weil unsinnig.


    Den rest hab ich gelassen.

    So sollte es laufen.

    Code:
    '#####################################
    'Schrittmotoransteuerung an RN-Control
    'Art= Vollschritt bipolar
    'Anschluss 1 = Orange
    'Anschluss 2 = Gelb
    'Anschluss 3 = Braun
    'Anschluss 4 = Schwarz
    '#####################################
    
    
    $regfile = "m32def.dat"                                     'controller definieren
    $crystal = 16000000                                         'Taktfrequenz definieren
    
    Dim I As Byte
    Dim A As Byte
    Dim Zeit As Byte
    
    Config Portb = Output                                       'Port als "Ausgang" definieren
    Config Portc = Output
    Config Portd = Output
    
    1a Alias Portb.0                                            'Pin als Spule 1a benennen
    1b Alias Portb.1                                            'Spule 1b
    
    2a Alias Portc.6                                            'Spule 2a
    2b Alias Portc.7                                            'Spule 2b
    
    
    Portb.0 = 0                                                 'Spule 1a definiert auf Null
    Portb.1 = 0                                                 'Spule 1b
    
    Portc.6 = 0                                                 'Spule 2a
    Portc.7 = 0                                                 'Spule 2b
    
    Portd.4 = 1                                                 'Motortreiber Spule 1 Enable
    Portd.5 = 1                                                 'Motortreiber Spule 2 Enable
    
    
    For I = 1 To 60
    
    Zeit = 3                                                    'Zeit zwischen den einzelnen Schritten (kleiner=schneller)
    
    1a = 1 : 1b = 0 : 2a = 1 : 2b = 0                           'Schritt 1
    Waitms Zeit
    1a = 1 : 1b = 0 : 2a = 0 : 2b = 1                           'Schritt 2
    Waitms Zeit
    1a = 0 : 1b = 1 : 2a = 0 : 2b = 1                           'Schritt 3
    Waitms Zeit
    1a = 0 : 1b = 1 : 2a = 1 : 2b = 0                           'Schritt 4
    Waitms Zeit
    Next I
    
    Waitms 100
    
    
    For A = 1 To 60
    
    Zeit = 3
    
    1a = 1 : 1b = 0 : 2a = 1 : 2b = 0                           'Schritt 1
    Waitms Zeit
    1a = 1 : 1b = 0 : 2a = 0 : 2b = 1                           'Schritt 2
    Waitms Zeit
    1a = 0 : 1b = 1 : 2a = 0 : 2b = 1                           'Schritt 3
    Waitms Zeit
    1a = 0 : 1b = 1 : 2a = 1 : 2b = 0                           'Schritt 4
    Waitms Zeit
    Next I
    
    
    End

    Und gleich hinterher ein Vorschlag um das ganze etwas kleiner zu bekommen.
    Erstmal das "Zeit=3" vor die Schleife denn man muß es nicht jeweils 60x auisführen.
    Spart Systemzeit.

    Ich vermute mal das die Ausführliche Schreibweise absicht ist aber Zweimal hintereinander das gleiche läst sich schön vereinfachen.

    Code:
    '#####################################
    'Schrittmotoransteuerung an RN-Control
    'Art= Vollschritt bipolar
    'Anschluss 1 = Orange
    'Anschluss 2 = Gelb
    'Anschluss 3 = Braun
    'Anschluss 4 = Schwarz
    '#####################################
    
    
    $regfile = "m32def.dat"                                     'controller definieren
    $crystal = 16000000                                         'Taktfrequenz definieren
    
    Dim I As Byte
    Dim A As Byte
    Dim Zeit As Byte
    
    Config Portb = Output                                       'Port als "Ausgang" definieren
    Config Portc = Output
    Config Portd = Output
    
    1a Alias Portb.0                                            'Pin als Spule 1a benennen
    1b Alias Portb.1                                            'Spule 1b
    
    2a Alias Portc.6                                            'Spule 2a
    2b Alias Portc.7                                            'Spule 2b
    
    
    Portb.0 = 0                                                 'Spule 1a definiert auf Null
    Portb.1 = 0                                                 'Spule 1b
    
    Portc.6 = 0                                                 'Spule 2a
    Portc.7 = 0                                                 'Spule 2b
    
    Portd.4 = 1                                                 'Motortreiber Spule 1 Enable
    Portd.5 = 1                                                 'Motortreiber Spule 2 Enable
    
    Zeit = 3                                                    'Zeit zwischen den einzelnen Schritten (kleiner=schneller)
    
    For I = 1 To 2
     Zeit = 3
     For A = 1 To 60
      1a = 1 : 1b = 0 : 2a = 1 : 2b = 0                         'Schritt 1
      Waitms Zeit
      1a = 1 : 1b = 0 : 2a = 0 : 2b = 1                         'Schritt 2
      Waitms Zeit
      1a = 0 : 1b = 1 : 2a = 0 : 2b = 1                         'Schritt 3
      Waitms Zeit
      1a = 0 : 1b = 1 : 2a = 1 : 2b = 0                         'Schritt 4
      Waitms Zeit
     Next A
     Waitms 100
    Next I
    
    
    End
    Natürlich läst sich das ganze noch weiter verkleinern denn Speicher ist immer Mangelware aber da wirst du vermutlich später selber noch kräftig dran feilen.

    Probier erstmal obs jetzt geht.
    Gruß
    Ratber

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.12.2005
    Ort
    München
    Alter
    39
    Beiträge
    27
    Hallo,

    Ich danke, ich muss gestehen das, das mein erstes Programm gewesen ist. Aber ich danke dir für die ausführliche Erklärung. Werde es dann mal gleich ausprobieren...

    Danke

    Mit besten Grüßen
    Blackbumpkin

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    05.12.2005
    Ort
    München
    Alter
    39
    Beiträge
    27
    Hallo,

    jetzt weiß ich auch warum du sagtest das geht kürzer.
    Ich habe gesehen ich habe da noch einen Fehler beim 2x hätter sich der Schrittmotor in die andere Richtung drehen sollen...

    so schnell ist es pasiert das man einen Fehler macht!!!

    danke auf alle fälle sonst geht es.

    gibt es noch eine andere möglichkeit so ein Programm kürzer zu machen?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    ch habe gesehen ich habe da noch einen Fehler beim 2x hätter sich der Schrittmotor in die andere Richtung drehen sollen...
    Ja,das hatte ich vermutet aber ich war nicht sicher.




    gibt es noch eine andere möglichkeit so ein Programm kürzer zu machen?
    Oh ja und auch Universeller aber dafür müßte man vieles Umbauen.

    Wenn wir bei der direkten Ansteuerung bleiben dann könnte man die Schrittfolgen in ein Array setzen so das man schön adressieren kann.
    Damit kannste einfach mit nem Zähler arbeiten.
    Das Spart einige Zeilen.

    Oder du legst alle 4 anschlüsse an einen Port dann kannste mit "Portx.y" statt zb. mit "1a = 1 : 1b = 0 : 2a = 1 : 2b = 0" Arbeiten
    Was die Befehlsfolge mal eben auf eine Viertel drückt und auch etwas Platz bringt.

    Aber mit nem M32 ist das erstmal kein so dringendes Problem.
    32K sind viel Platz.
    Was ich oben meinte ist das man sich recht früh an effektives Programieren gewöhnen sollte denn wenn das Endergebnis bei Optimierung auch in einen M8 passt dann hat man Platz und Geld gespart.

    Aber probier erstmal rum.
    Gruß
    Ratber

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    05.12.2005
    Ort
    München
    Alter
    39
    Beiträge
    27
    ja viel spielen das habe ich auch gemerkt das es nicht immer gleich so geht. Gib es eigendlich ihrgend wo eine beschreibung der befehle von Bascom-AVR oder eine Programmier hilfe in Deutsch? Um besser in das Programmieren einzusteigen ich habe bis jetzt immer nur Prog. angeschaut und verändert...

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Versuch mal, ist eine variante, da dreht er sich ewig hin und her

    Code:
    $regfile = "m32def.dat"                                     'controller definieren
    $crystal = 16000000                                         'Taktfrequenz definieren
    
    Dim I As Byte
    Dim A As Byte
    Dim Zeit As Byte
    
    Config Portb = Output                     'Port als "Ausgang" definieren
    Config Portc = Output
    Config Portd = Output
    
    1a Alias Portb.0                               'Pin als Spule 1a benennen
    1b Alias Portb.1                               'Spule 1b
    
    2a Alias Portc.6                                            'Spule 2a
    2b Alias Portc.7                                            'Spule 2b
    
    
    Portb.0 = 0                                                 'Spule 1a definiert auf Null
    Portb.1 = 0                                                 'Spule 1b
    
    Portc.6 = 0                                                 'Spule 2a
    Portc.7 = 0                                                 'Spule 2b
    
    Portd.4 = 1                                                 'Motortreiber Spule 1 Enable
    Portd.5 = 1                                                 'Motortreiber Spule 2 Enable
    
    
    Dim Stepp As Integer
    Dim Direct As Integer
    
       Direct = -1                                              ' rückwärts
       Zeit = 3
    
       Do
          Direct = Direct * -1                                  ' ändern richtung
          For A = 1 To 240
             Stepp = Stepp + Direct
             Stepp = Stepp And &H0003
             On Stepp Gosub P_0 , P_1 , P_2 , P_3
             Waitms Zeit
          Next
      Loop
    End
    
    P_0:
      1a = 1 : 1b = 0 : 2a = 1 : 2b = 0                         'Schritt 1
      Return
    P_1:
      1a = 1 : 1b = 0 : 2a = 0 : 2b = 1                         'Schritt 2
      Return
    P_2:
      1a = 0 : 1b = 1 : 2a = 0 : 2b = 1                         'Schritt 3
      Return
    P_3:
      1a = 0 : 1b = 1 : 2a = 1 : 2b = 0                         'Schritt 4
      Return
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    05.12.2005
    Ort
    München
    Alter
    39
    Beiträge
    27
    für was stehen jetzt eigendlich die DIM ... as INEGER Befehlszeile???
    weil wenn sie nicht da ist geht es auch...

    und kannst du mir mal das ein wenig erklären da ich es nicht wirklich verstehe wie man auf so was jetzt kommt...

    super danke

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Direct und stepp sind Zahlen mit Vorzeichen anders isses nicht bei Bascom
    Code:
      
    Anfang: 
        Direct = -1
        stepp = 0     ' das macht der Bascom am Anfang freiwillig
    
     aussere (ewige) Schleife 
         direct = direct * -1            ' das ergibt einmal +1 und einmal -1
         Und nun 240 mal:              ' 60 * 4 Schritte
             stepp + direct        ' ist direct = +1 geht's rauf, sonst runter
             stepp and &H0003   'dadurch bleiben nur die 2 kleinsten Bits über
    daher kann stepp nur 0, 1, 2 oder 3  werden  ( bei +)
    daher kann stepp nur 3, 2, 1 oder 0  werden  ( bei - )
    
           On stepp p-0,--- p_3    
    
    je nach der Zahl in stepp (0-3)   wird ein Schritt muster gesetzt
          auch entweder 1234 oder 4321 
    
    that's it
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Zitat Zitat von Blackbumpkin
    ja viel spielen das habe ich auch gemerkt das es nicht immer gleich so geht. Gib es eigendlich ihrgend wo eine beschreibung der befehle von Bascom-AVR oder eine Programmier hilfe in Deutsch? Um besser in das Programmieren einzusteigen ich habe bis jetzt immer nur Prog. angeschaut und verändert...

    Klar gibts ne Beschreibung.
    einmal in der Hilfe von Bascom und einmal ein ca. 30MB PDF zum Download bei Mcselec was etwas übersichtlicher ist als die Hilfe.

    In Deutsch siehts allerdings mau aus.
    Es gibt einige Versuche im Web aber die sind teilweise vealtet.
    Ansonsten gibt es einige Bücher zu kaufen aber ich würde nicht einsehen dafür auch noch Geld hinzulegen.

    Es wäre eh sinvoll Englisch zu lernen denn in der Technischen Welt ist das die Sprache schlechthin.
    Fast alle Dokumentationen (Spezifikationen,Handbücher,Datenblätter,Infos usw.) werden in Englisch gemacht.

    Schau dir mal Picknicks Programm an.
    Da siehste schön wie man so Schreibt das man die eigentliche Arbeit mit Flags erledigen kann.
    Weiter entwickelt kannste dann der Routine zb. sowas sagen "Links,390 Schritte" und das wars.
    Natürlich läst sich noch viele mehr anstellen aber zuviel auf einmal ist kontraproduktiv


    für was stehen jetzt eigendlich die DIM ... as INEGER Befehlszeile???
    #

    Schau mal bei den Variablentypen in der Hilfe rein.
    Bit = ein Bit 0 und 1 ,mehr nicht
    Byte = ein Byte also 8 Bit also 2^8 =256 Werte also 0-255
    Word = Zwei Byte = 16 Bit also 2^16 = 65536 Werte also 0-65535
    Integer = Zwei Byte wie Word aber mit Vorzeichen. -32,768 bis +32,767
    Long = 32 Bit also 4 Byte wie Integer mit Vorzeichen -2147483648 bis 2147483647
    Single = Flieskommazahl 32 Bit 1.5 x 10^–45 bis 3.4 x 10^38
    Double = das gleiche wie Single nur 64 bit 5.0 x 10^–324 bis 1.7 x 10^308
    Und zuletzt String = Zeichenkette bis 254 Zeichen.

    steht aber alles in der Hilfe bzw. Handbuch.
    Gruß
    Ratber

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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