- 3D-Druck Einstieg und Tipps         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 35

Thema: Gabellichtschranke ink Inkrementierungsscheibe

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Anzeige

    Powerstation Test
    Jetzt ist der Interupt nicht Declariert und nicht freigegeben. Dann muß die Interuptserviceroutine hinter, unter dem eigentlichem Program stehen, sonst wird sie , wie hier, im Program mit aufgerufen.
    Sieht man im Simulator : Int0 nicht anwählbar. Wieder [-( nöööööö

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    so hoff ich hab dich richtig verstanden

    int0 routine in der schleife!
    und init fürn interrupt is auch wieder drinnen

    ----------------------
    also fürs verständnis bei programmstart wird der interrupt sozusagen freigeschalten bzw initaliert damit er überhaupt anwählbar ist
    und in der schleife wird er immer abgefragt
    aber wird er jetzt immer abgefragt?!
    dachte int0 gibt bei jedem signal selbst zur int0 routine weils ja ein interrupt ist?!
    könnt ja dann auch gleich nen eingang die ganze zeit abfragen und erhöhen lassen oder ist das zu unsicher bezüglich der frequenz?!
    ---------------------

    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
    
    Irq0:
    Incr Irq0
    Return
    
    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

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Und geht das Program im Simulator? Schätze mal nicht ausprobiert.
    Wenn ich Prozessor bin, starte ich in der ersten Zeile, laufe weiter komme dann irgendwie auf die Routine :

    Do

    Irq0:
    Incr Irq0
    Return

    Nur, wohin soll ich dann springen wenn ich Return gefunden habe, Return bedeutet: springe zurück an die nächste Anweisung nach dem Aufruf, (steht im Stack), nur mich hat niemand aufgerufen, also steht nichts im Stack.....
    also stop ich die Prorammausführung, bzw springe nach Nirwana...
    deshalb gehört die IRQ-Routine, wie alle Unterprogramme hinter, bzw. nach dem Hauptprogram im Code
    aber mach dich nicht fertig, das übt, und das vergißt man dann auch nicht so schnell wieder.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    ok stimmt return ist das fehl am platz
    war da glaub ich zu schnell

    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
    
    Irq0:
    Incr Irq0
    
    
    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
    jetzt müsst der interrupt aber funktionieren?!

    noch ne frage die ich vorher vergessen hab
    wo simulierst du das ganze

    gibts da ein eigenes programm oder geht das auch mit Bascom
    wo ich dann taster und zb leds für die ausgänger hab?!

    großes dank an euch!!!

    mfg

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Nee, Return ist schon nicht schlecht Die Interuptroutine steht insgesamt falsch.
    Den Simulator findest du als 4tes Icon neben dem Fernglas.
    Das ist das Werkzeug schlechthin, das mußt du benutzen, läuft es im Simulator, läuft es auch im wirklichem Leben , meistens.
    Beachte: Ports, LCD usw findest du oben in der Zusatzauswahl. Damit mußt du dich auskennen lernen.
    Schonmal aufgemerkt: Ports nur in den grünen LED's betätigen, und das Ergebniss dessen, nur im Einzelschritt ist "DIRECKT" im Sprungverhalten des Codes erkennbar.
    So, das mußt du erst einmal ausprobieren. Nimm aber Codes die funktionieren, sonst verwirt dich noch ALLES.
    Simulator ist ein MUSS, das Werkzeug schlechthin !!!!

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    hy ich nochmals

    hab schon wieder das gefühl einen funktionstüchtigen code produziert zu haben, hab mich nochmal im datenblatt schlau gemacht

    hab mal die ein/ausgänge auf die pinc verlegt
    und pind2 also int0 (was eh so is, aber bisschen neu)

    hab alle teile vom code übersichtlichkeitshalber total getrennt, is glaub ich so einfacher & richtiger?!

    hab das ganze auch getestet springt richtig
    also vom programmablauf richtig
    meine einzige sorge der irq0:
    also bei jeden interrupt also impuls auf pind.2 erhöht irq0 um 1 bis irq0 800 erreicht hat und springt zum sprung halt!? würd das so passen?!

    hier mal der aktuelle code
    Code:
    $regfile = "m8def.dat"
    $baud = 9600
    $crystal = 8000000
    
    Config Pinc.1 = Input
    Config Pinc.2 = Output
    Config Pind.2 = Input
    
    Dim Irq0 As Word
    
    
    
    '' Interrupt Int0 config
    On Int0 Irq0
    
    Config Int0 = Rising
    Enable Int0
    Enable Interrupts
    
    
    Do
    
    ''abfrage ob taste gedrückt
    Abfrage:
    If Pinc.1 = 1 Then
    Goto Rauf
    Else
    Goto Halt
    End If
    
    Loop
    
    '' bei interrupt auf pinb.2 dann erhöhen bis 800 erreicht ist
    Irq0:
    Incr Irq0
    If Irq0 > 800 Then
    Goto Halt
    Else
    Goto Rauf
    End If
    
    '' wenn 800 impulse ereicht dann motor stopp
    Halt:
    Reset Pinc.2
    Return
    
    '' wenn 800 interruptimpulse noch nicht erreicht sind motor läuft weiter
    Rauf:
    Set Pinc.2
    Return

    danke fürs durchschauen

    eventuell werd ich das ganze für die funktion runter morgen erweitern.

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Simulator benutzt ? ----> dann hättest du Fehler bemerkt.

    Setze mal vor '' wenn 800 impulse ereicht dann motor stop
    ein Return
    und
    ersetze mal Goto mit Gosub
    dann läuft das Program wenigstens, ob es deine Aufgabe richtig abarbeitet::: Simulieren Simulieren

    Nachtrag:
    Habe mal durchsimuliert, IRQ0 >1 gesagt, funzt, nur würde ich diesen Vergleich in die Hauptschleife legen, und nicht in die IRQ-Routine zumal die Variable ja auch nirgendwo wieder zu 0 gemacht wird.

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    schau mir das ganze nochmal an

    aber bei goto hat der simulater bei mir zumindest funktioniert und is vom hauptprogramm in die rauf oder halt routine gesprungen?!
    oder hab ich was falsch gmacht

    bei timer hab ich nicht wirklich gwußt wie ich den testen kann
    gibt es dafür ne abhilfe in bascom?!

    mfg
    piri

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Zitat Zitat von lowtzow
    aber bei goto hat der simulater bei mir zumindest funktioniert und is vom hauptprogramm in die rauf oder halt routine gesprungen?!
    Dein Programm hat aber nur einen Durchlauf gemacht und ist dann stehen geblieben. Normalerweise muss ein Programm in einem Microcontroller eigentlich immer irgend etwas machen und sollte nie stehen bleiben.

    Ein Return-Befehl macht übrigens nur nach einem Gosub einen Sinn, nicht nach einem Goto.

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2006
    Beiträge
    144
    danke an die vielen nützlichen zeit, hab in kürzerster zeit schon eine menge über Bascom & mega8 gelernt )))

    hab das programm nochmals ein wenig verändert, und zwar hab ich mir den tipp mit irq abfrage ins hauptmenü zu herzen genommen, macht eigentlich auch mehrs sinn das der mega8 ständigt schaut ob 800 impulse erreicht sind und nicht nur nach einem int0 impuls

    hier mal version neu

    Code:
    $regfile = "m8def.dat"
    $baud = 9600
    $crystal = 8000000
    
    Config Pinc.1 = Input
    Config Pinc.2 = Output
    Config Pind.2 = Input
    
    Dim Irq0 As Word
    
    
    
    
    
    '' Interrupt Int0 config
    On Int0 Irq0
    
    Config Int0 = Rising
    Enable Int0
    Enable Interrupts
    
    
    Do
    
    ''abfrage ob taste gedrückt & Kontrolle ob irq0 noch nicht über 800
    Abfrage:
    If Pinc.1 = 1 Then
    Gosub Rauf
    Else
    End If
    
    
    If Irq0 > 800 Then
    Gosub Halt
    
    
    End If
    
    
    Loop
    
    
    '' bei Int0 wird irq0 um 1 erhöht
    Irq0:
    Incr Irq0
    Return
    
    
    
    
    '' wenn 800 impulse ereicht dann motor stopp
    Halt:
    Reset Pinc.2
    Irq0 = 0
    Return
    
    '' wenn 800 interruptimpulse noch nicht erreicht sind motor läuft weiter
    Rauf:
    Set Pinc.2
    Return
    hab es auch simuliert, hat zwar einige zeit gedauert bis ich die sache mit int0 simulieren draußen hatte, aber! es funktioniert!
    hab es testweise 800 durch 5 ersetzt und siehe da es funktioniert nach den impulsen wird irq0 gesetzt sonst is ja blöd wenn irq0 ins endlose zählt und nach tastendruck immer gleich wieder stopt.

    so werd mich demnächst ans zamstöpseln der teile machen
    motor mit gabellichtschranke & mega8 hab ich ja schon
    muss mir nur anschaun wie ich die teile am besten beschalte

    mfg
    piri

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test