-         

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 35

Thema: Gabellichtschranke ink Inkrementierungsscheibe

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144

    Gabellichtschranke ink Inkrementierungsscheibe

    Anzeige

    Hy

    hab ein Problem und zwar möchte ich einen Motro wo hinten eine Inkrementierungsscheibe mit einem gabellichtschranke sitzt steuern.

    Funktionen "Taste an"
    Motor beginnt sich zu drehn bis zu einem definierten wert (zb. Gabellichtschranke nach 800 impulsen) dann motor stopp!

    Funktion "Taste aus"
    Motor dreht in die andere richtung (wieder bis zu 800 impulsen ) dann stopp.

    also motoransteruern und gabellichtschranke auslesen ist kein problem, aber wie sag ich
    stopp nach 800 impulsen vom Gabellichtschranke?!

    hab schon bisschen im forum gestöpert und das gefunden was mir helfen könnte
    Code:
    ----------------------------------------------
     $regfile = "2313def.dat"
    $crystal = 7372800
    $baud = 19200
    
    Dim Zaehlerirq0 As Long
    
    
    Config Pinb.2 = Output
    Portb.2 = 0
    
    Zaehlerirq0 = 0
    On Int0 Irq0
    Enable Int0
    
    Config Int0 = Falling
    
    Enable Interrupts
    
    
    
    
    '------------------------------------------------------------
    Do
    
    If Zaehlerirq0 > 120 Then
    Portb.2 = 1
    Wait 2
    Portb.2 = 0
    Zaehlerirq0 = 0
    End If
    Waitms 50
    Loop
    
    End
    
    '------------------------------------------------------------
    
    Irq0:
     Incr Zaehlerirq0
    Return
    --------------------------------------------------
    EDIT: Bitte um Code-Tags ! (PicNick)

    leider blick ich nicht ganz durch
    (is aus http://www.roboternetz.de/phpBB2/zei...llichtschranke)

    danke für eure hilfe

    bei interesse könnt ich euch noch ein foto vom motor mit inkrementierungsscheibe reinstellen

    mfg
    piri

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    ok werd das nächste mal den code so reinstellen.

    hmm
    wo könnt ich mich über die funktionen informieren die ich brauche?!

    brauch nen timer der nach einer gewissen zeit sagt stopp
    aber der timer müsst abhängig sein vom optokoppler der an irgeneinen pin hängt.

    steh echt irgendwie an!

    bitte um hilfe

    mfg

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Willst Du das jetzt nach 800 Impulsen stoppen oder über den Timer?
    Stell mal Dein Programm hier rein das Du bis jetzt schon hast.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    So hab mal alles zusammengefasst was ich bis jetzt hab
    nur diese schleifen machen mir kopfzerbrechen, immer diese abfragen

    und woher weiß ich ob die ifschleife dann richtig springt?!
    sorry für so fragen aber ich bin recht neu auf diesem gebiet, für mich wär das programm im ganzen recht logisch bis auf diese spünge, oder irre ich?!

    hab das ganze mal so ausgelegt damit das rolo bei tastendruck mal hochfährt bis zu einen festgelegten wert (800 zählimpulse vom Gabellichtschranken)

    für ne 2.taste brauch ich eigentlich auch noch nen 2. ausgang weil ein knopf is rauf der andre runter, und da ein ausgang nur 0 bzw 1 hat würd er ja eventuell irgendwas machen wenn keine taste gedrückt is
    d.h. wird dann ein 2. ausgang verwendet der den motor in die andre richtung fahren lässt.

    was meint ihr daweil zu diesem programm?!
    hab es noch nicht aufn AVR gespielt weil ich mir auch noch über die beschaltung des gabellichtschranken ein bisschen gedanken machen muss




    Code:
    $regfile = "m8def.dat"
    $baud = 9600
    $crystal = 8000000
    
    Config Pinb.1 = Input
    Config Pinb.2 = Output
    
    Do
    
    If Pinb.1 = 1 Then / / Taste Gedrückt
    Portb.2 = 1 / / Rolo Fährt Hoch
    Else
    Portb.2 = 0 / Rollo Macht Nichts Da Keine Taste Gedrückt
    
    Loop
    
    Irq0 = 0 / / Zähler Wird Initialisiert
    inc irq0
    
    Do
    
    If Irq0 > 800 Then / / Wenn Der Zähler 800 Erreicht Hat
    Portb.2 = 0 / / Motor Stopp
    Irq0 = 0 / / Zähler Wird Zurückgesetzt
    
    Loop
    
    End
    danke für jeden tipp bzw verbesserungsvorschlag

    mfg
    piri

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Also im jetzigen Zustand funktioniert da gar nichts.
    Hast Du schon einmal versucht das Programm mit Bascom zu compilieren?
    Da kommt eine ganze Latte von Fehlermeldungen.

    Fangen wir mal mit dem wichtigsten an:
    Bemerkungen musst Du mit ' eintragen
    Die erste Do-Loop-Schleife wird nie verlassen da eine Bedingung fehlt wann die Schleife verlassen werden soll (DO-LOOP-UNTIL).
    Im jetzigen Zustand würde sich der Motor nur bewegen solange Du die Taste gedrückt hältst.

    Wäre es nicht vernünftiger Du machst die ganze Sache mit Endlagenschalter statt mit einer Gabellichtschranke? So funktionieren nämlich normalerweise Tor- und Rolladensteuerungen.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    danke für das mitwirken, hab dadurch schon einiges verbessern können!!!

    das mit den endtastern hab ich mir anfangs auch überlegt!

    da aber das nur eine nachrüstung von so sstandraad rolos sind die in der scheibe liegn und nur durch ein seil mechanisch betätigt werden ist es technisch bisschen schwieriger zu realisieren.

    sicherer ist sicher der motor & inkrementierungsscheibe! bekomme die motoren noch von einem freund aus technischen geräten gratis zu verfügunggestellt.

    hab mir das mit den kommentaren und den schleifen noch mal angeschaut und eventuell auch ein bisschen verbessert

    Code:
    $regfile = "m8def.dat"
    $baud = 9600
    $crystal = 8000000
    
    Config Pinb.1 = Input
    Config Pinb.2 = Output
    Config Int0 = Rising
    
    Do
    
    Abfrage:                         'hier wird abgefragt ob eine taste gedrückt ist
    If Pinb.1 = 1 Then            ' wenn pinb.1 gedrückt dann in die Rauf routine
    Goto Rauf
    Else
    Portb.2 = 0
    Goto Abfrage
    End If
    
    Rauf:
    Pinb.2 = 1                            'motor fährt rauf
    Incr Irq0
    If Irq0 > 800 Then
    Portb.2 = 0                 'wenn 800 impulse ereicht sind dann stop TIRQ0
    Else
    Goto Rauf
    
    Loop
    habs mal compeliert
    4 fehler
    you can not write to a pin register // hab doch pinb.2 als ausgang definiert?!
    Invalid datatype?!
    wrong datatype (irq0) // das es probleme mit diesem zähler gibt hab ich mir schon gedacht

    hat noch wer tipps übrig
    +
    mfg
    piri


    [edit zeilenumbruch]

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Portb.2 = 0
    ersetze mal mit
    reset Pinb.2
    ebenso
    mit Set,
    statt mit direkter Zuweisung, dann sowieso mit "Pin" nicht mit "Port"

    Bedenke:
    Pin Operationen mit PinX.x nicht mit PortX.x !!!!

    Die Variable irq0 haste nicht defeniert, muss Word sein, weil grösser 255 werden kann.
    Gruß

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    so danke für die info
    aber wieso ist pinb.1=1 & set pinb.1 nicht das selbe?!
    naja wurscht hab wieder was gelernt nehm mal an befehle gehn nur so abfragen gehn mit pinb.1=x

    sollt eigentlich passen!!
    hab das fehlende end if auch richtig gesetzt.

    hab da noch fragen:
    1. bei der rauf routine
    ist pinb.2 solange gesetzt bis die 800 impulse über den irq0 reinkommen oder is das eher so ne rucklige sache, stopp go oder fährt der motor ganz flüssig?!
    2. hab die zähler init routine implementiert bzw definiert, bin mir jetzt nur nicht ganz sicher ob die in die rauf routine ghört oder überhaupt am anfang in die komplette schleife, weil sonst wird sie ja nur einmal abgefragt und sonst nie wieder

    Code:
    $regfile = "m8def.dat"
    $baud = 9600
    $crystal = 8000000
    
    Config Pinb.1 = Input
    Config Pinb.2 = Output
    Dim Irq0 As Word
    
    
    Irq0 = 0
    On Int0 Irq0
    Enable Int0
    Config Int0 = Rising
    Enable Interrupts
    
    
    Do
    
    Abfrage:                 'hier wird abgefragt ob eine taste gedrückt ist
    If Pinb.1 = 1 Then   ' wenn pinb.1 gedrückt dann in die Rauf routine
    Goto Rauf
    Else
    Reset Pinb.2
    Goto Abfrage
    End If
    
    Rauf:
    Set Pinb.2                                                  'motor fährt rauf
    Incr Irq0
    If Irq0 > 800 Then
    Reset Pinb.2                'wenn 800 impulse ereicht sind dann stop TIMER0
    Else
    Goto Rauf
    End  IF
    
    Loop
    danke für tipps und anregungen
    fühl mich mit meinen AVR schon so gut

    mfg
    piri

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Also 'ne Interupt-Serviceroutine kann ich irgendwie nicht erkennen, dazu müßte ein eigener Ablaufcode stehen.
    Hier wird eine Variable mit dem Namen Irq0 erhöht, hat das was mit dem Eingang Int0 zu tun, [-( nööööööö

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    so hab das ganze nochmal überarbeitet

    der inc irq0 is aus der abfrage geflogen, weil irq0 ja sowieso immer ausgelöst wird wenn was anliegt! (denk ich halt mal so war das vorher gemeint)

    also eigene "routine" für irq0

    Code:
    $regfile = "m8def.dat"
    $baud = 9600
    $crystal = 8000000
    
    Config Pinb.1 = Input
    Config Pinb.2 = Output
    Dim Irq0 As Word
    
    
    
    Irq0:
    Incr Irq0
    Return
    
    
    
    
    Do
    
    Abfrage:                         'hier wird abgefragt ob eine taste gedrückt ist
    If Pinb.1 = 1 Then           ' wenn pinb.1 gedrückt dann in die Rauf routine
    Goto Rauf
    Else
    Reset Pinb.2
    Goto Abfrage
    End If
    
    Rauf:
    Set Pinb.2                                                  'motor fährt rauf
    If Irq0 > 800 Then
    Reset Pinb.2                'wenn 800 impulse ereicht sind dann stop TIMER0
    Else
    Goto Rauf
    End  IF
    
    Loop
    mfg
    piri

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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