-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Motor soll bis zu einem Taster-Druck drehen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    15.05.2006
    Beiträge
    38

    Motor soll bis zu einem Taster-Druck drehen

    Anzeige

    Ich habe mal wieder ein Kleines Problem mit meiner Skinner-Box (Ich werde das Projekt dann euch dann auch vorstellen).
    Ich habe einen Futterautomaten Angeschlossen, der genau eine Umdrehung machen soll (ist nen Getriebe mit bei) allerdings ist das ein Billig-Fernost-Motor, der nie gleich dreht. Momentan wird über nen wait-Befehl gewartet, bis der Motor etwa ne Umdrehung gemacht hat, das ist aber viel zu ungenau.
    Bei der Original-Elektronik, die rausgeflogen ist, war ein Taster an der Motor-Welle, der durch die Welle in der Ausgangsposition gedrück wurde und der Elektronik verriet, wann schluss ist. Diesen Taster würde ich jetzt gerne wieder in BEtrieb nehmen, allerdings habe ich keine Ahnung, wie ich es meinem Bascom sagen soll, da der Taster ja auch bei dem nöchsten Starten noch kurzzeitig gedrück ist.

    Code:
    'Grundsätzliche Angaben zum Controller
    $regfile = "2313def.dat"
    $crystal = 8000000
    
    'Variablen dimensionieren und nullen
    Dim Ist As Integer , Soll As Integer , Startbs As Integer , Aux As Integer
    
    'Port-Deklarationen
    Config Pinb.0 = Input
    Config Pind.1 = Input
    Config Pind.2 = Input
    Config Pinb.1 = Output
    Config Pind.6 = Output
    Config Pind.0 = Output
    
    
    'Einstellungen
    Aux = 1680                                                  'Wie lang soll der AUX an sein (in ms)
    Startbs = 3                                                 'Wie lang soll der Startbildschirm angezeigt werden (in sec.)
    Ist = 0                                                     'Startwert für den Ist-Wert
    Soll = 1                                                    'Startwert für den Soll-Wert
    
    
    'Den Ports Namen geben (nur fürs Layout)
    Taster Alias Pinb.0
    Ledtast Alias Portb.1
    Ledaux Alias Portd.6
    Lederr Alias Portd.0
    Manual Alias Pind.1
    Rst Alias Pind.2
    
    
    'LED3 "Gerät nicht bereit / Fehler" aktivieren
    Lederr = 1
    
    'Display-Optionen
    Cursor Off
    Cls
    Config Lcd = 20 * 4
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2       '
    
    'Startbildschirm anzeigen
      Locate 1 , 1
      Lcd "Sebastian Rietig &"
      Locate 2 , 1
      Lcd "  Tjark Radewaldt"
      Locate 3 , 1
      Lcd " SkinnerMaus 3000+"
      Locate 4 , 1
      Lcd "    Skinner-Box"
    
    'Startbs Sekunden den Startbildschirm aneigen, dann Anige löschen un Gerät freigeben
     Wait Startbs
     Cls
    
    'Kleiner Fehlersucher
    If Soll < Ist Then
       Locate 1 , 1
       Lcd " SkinnerMaus 3000+"
       Locate 2 , 1
       Lcd "Error: Soll < Ist"
    
    Else
       Lederr = 0
    
    'Arbeitsbldschirm anzeigen
       Locate 1 , 1
       Lcd " SkinnerMaus 3000+"
       Locate 2 , 1
       Lcd "Soll:" ; Soll
       Locate 3 , 1
       Lcd "Ist :" ; Ist
       Locate 4 , 1
       Lcd "Waiting for Signal"
    
    'Taster entprellen und bei High zu "Tasteran" springen
    Entprell:
       Debounce Taster , 1 , Tasteran
       Debounce Manual , 1 , Manualan
       Debounce Rst , 1 , Rstan
    
    'Wenn der Taster gedrückt wurde, in diese Schleife springen
    Tasteran:
    Do
    If Taster = 1 Then
       Ledtast = 1
       Locate 4 , 1
       Lcd "Input high        "
       Ist = Ist + 1
       Locate 3 , 1
       Lcd "Ist :" ; Ist
    
          If Ist = Soll Then
             Locate 4 , 1
             Lcd "AUX enabled       "
             Ledaux = 1
             Ledtast = 0
             Waitms Aux
             Locate 4 , 1
             Lcd "Waiting for Signal"
             Ledaux = 0
    
             Soll = Soll + 1
             Ist = 0
             Locate 2 , 1
             Lcd "Soll:" ; Soll
    
             Locate 3 , 1
             Lcd "Ist :" ; Ist ; "   "
          End If
    
       Do
       Loop Until Taster = 0
    Else
       Locate 4 , 1
       Lcd "Waiting for Signal"
       Ledtast = 0
       Goto Entprell
    
    End If
    Loop
    
    
    'Bei Druck auf die Manual-Taste
    Manualan:
    Do
    If Manual = 1 Then
       Locate 4 , 1
       Lcd "Manual Mode       "
       Ledaux = 1
       Waitms Aux
       Locate 4 , 1
       Lcd "Waiting for Signal"
       Ledaux = 0
    
       Do
       Loop Until Manual = 0
    Else
       Locate 4 , 1
       Lcd "Waiting for Signal"
       Goto Entprell
    End If
    Loop
    
    ' Bei Druck auf die Reset-Taste
    Rstan:
    Do
    If Rst = 1 Then
          Wait 3
          If Rst = 1 Then
       Locate 4 , 1
       Lcd "Resetting Data       "
       Lederr = 1
       Ist = 0
       Soll = 1
       Locate 2 , 1
       Lcd "Soll:" ; Soll ; "    "
       Locate 3 , 1
       Lcd "Ist :" ; Ist ; "    "
          End If
       Do
       Loop Until Rst = 0
    Else
       Lederr = 0
       Ledaux = 0
       Locate 4 , 1
       Lcd "Waiting for Signal"
       Goto Entprell
    End If
    
    Loop
    
    End If
    End
    Das ist der bisherige, komplette Code.
    Für den Taster im Automaten würd ich gerne PD.5 nehmen.

    Also ich möchte jetzt, das der Mtor bis zum Tasterdruck dreht, aber mein Problem ist, dass beim nächsten Motor-Start der Taster ja immernoch gedrückt wäre.

    Vielen Dank

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    23.02.2006
    Beiträge
    40
    Du kannst das mit einem Interrupt-Eingang lösen.
    Einfach als Flanke parametrieren, dann machts nichts aus wenn
    der Motor auf dem Taster stehen bleibt, gestoppt wird
    dann ja nur bei der nächsten Flanke. Die Stop-Bedingung
    für den Motor einfach in die Interrupt-Routine packen.
    Schau in der Bascom-Hilfe nach "config int",
    da gibts auch Beispiele.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    15.05.2006
    Beiträge
    38
    Danke!
    Ich werds mal probieren

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.05.2006
    Beiträge
    38
    Ich kriegs ums verrecken nicht hin.
    Sobald Ledaux (der Motor) gestartet wird, stopt das Programm sofort wieder und startet komplett neu (inkl. dem Startbildschirm).
    Ich habe hin und her probiert, aber es gab keine Änderung.
    Der Schließer hängt an INT1 (PD.3)

    Mein Code:
    Code:
    Enable Interrupts
    Enable Int1
    On Int1 motoraus
    
    [...]
    
    Motoraus:
    Ledaux = 0
    Return

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    23.02.2006
    Beiträge
    40
    Hast du den Taster auch gegen Masse gescgaltet, Pullup ein
    und den Interrupt richtig konfiguriert?

    Config Int1 = Falling

    Hast auch ausreichend Stack, Frame- Speicher reserviert?

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    15.05.2006
    Beiträge
    38
    hab nen 10kOhm gegen Masse Frame und Stack-Size hab ich Bascom-Stanard (HW Stack 32, Software Stack 8 und und Framesize 16)


    Config Int1 = Falling hab ich noch nicht

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Reset

    Hallo eIdea,

    Sobald Ledaux (der Motor) gestartet wird, stopt das Programm sofort wieder und startet komplett neu (inkl. dem Startbildschirm).
    Nicht immer ist's die Software! (Obwohl mir der Software-Stack auch zu niedrig aussieht!)
    -> Stromversorgung ok?
    Der Anlaufstrom des Motors könnte die Betriebsspannung des AVR vorübergehend soweit in die Knie zwingen, dass ein Reset ausgelöst wird.

    Abhilfe:
    1. Getrennte Spannungsversorgung
    2. Größere Elektrolyt-Kondensatoren
    3. Mehr Blockkondensatoren 100nF
    4. Stärkeres Netzteil

    Gruss Dirk

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    15.05.2006
    Beiträge
    38
    Naja, die alte Version, so wie ich sie oben gepostet habe, funktioniert.
    Versorgt wird die Schaltung über nen 1,2A-Netzteil mit 6V und nem 7805, der Motor bekommt die 6V direkt vom Netzteil und der AVR schaltet nurn Reed-Relais, um den MOtor zu aktivieren

    Dennoch vielen Dank für den HInweis

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Danke

    Hallo eIdea,

    Dennoch vielen Dank für den HInweis
    Da habe ich gleich noch einen:

    Wenn du einen "normalen" 7805 genommen hast, sollte die Differenz Eingang-Ausgang mind. 2V betragen.

    Wenn der 7805 nur 6V am Eingang zur Verfügung hat und diese 6V noch durch den Anlaufstrom des Motors belastet werden, könnte auf der AVR-Seite ein deutlicher Spannungseinbruch die Folge sein.
    Das könnte ein Reset auslösen.
    Also: Nicht so weit wegschieben, messen!

    Gruß Dirk

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    15.05.2006
    Beiträge
    38
    Ist praktischerweise nen Universal-Netzteil und ich habs mal auf 9V hochgeschoben - Immernoch

    Und der µC wird ja resettet, sobal ich den Taster im Futterautomaten drücke und nciht, sobald der Motor anspringt

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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