-
        

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

Thema: Takt an Eingang halbieren und an anderem Port augeben

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360

    Takt an Eingang halbieren und an anderem Port augeben

    Anzeige

    Ich brauche zur synchonisierung einer alten Drummashine eine 2:1 Teilung.

    Ich habe das mit debounce und toggle versucht was auch klappt jedoch läuft es da nicht immer synchron.

    Clocksync ist der Eingang eines Ports, Taktout der Ausgang.

    Teilung:
    Debounce Clocksync , 0 , Toggler, sub
    Goto Teilung

    Toggler:
    toggle Taktout
    Return

    Welche andere Möglichkeit habe ich den Takt 2:1 zu teilen? Da das Programm nichts weiter zutun hat als die Teilung zu realisieren sollte das auch ohne Timer gehen oder?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Wenn das Signal sauber ist und nicht entprellt werden muss, ist ein AVR damit schon deutlich unterfordert. Am simpelsten wäre wohl ein externer Interrupt, der zb auf der steigenden Flanke auslöst und dann jedesmal den Ausgang toggelt. Ließe sich genausogut mit nen bisschen Logikgattern bauen.

    Die Frequenz dürfte ja einige Hundert Hz nicht überschreiten, nehme ich bei Drummachine mal an...

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Das Signal ist sauber und muß nicht entprellt werden. Es gibt noch kleine Zusatzaufgaben wie Triggern der Start und Stoptaste usw. Nur eine reine Taktteilung ist es also nicht drum scheiden Logikgatter aus.

    Hast du nen Code für mich als Beispiel? Es läuft zwar mit Debounce und Toggle auch jedoch hängt es vom Zufall ab ob alles wirklich schön bei der 1 startet und sich synchronisiert.

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Das Halbieren wäre an sich einfach, da wär' z.B. "toggle" schon ok.

    Aber um immer eine bestimmte At-First position zu haben, müßte man entweder START oder STOP auch erkennen.
    eventuell ein einfaches Time-Out ?
    d.h. wenn eine Sekunde gar nix kommt --> STOP


    EDIT: Wenn wieder die MIDI-GEschichte ist, da gibt's ja start-stop und clock ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Läuft nicht über MIDI sondern DIN/SYNC. Das ist so beschaltet: Start/Stop (high= start, low=stop) dann Masse und natürlich noch das Clocksignal. Nach 6 high/low Übergängen wird ein Step weiter geschalten. Ich hab hier nun ein Gerät welches keine DIN/SYNC Buchse hat. Ich habe eine DIN/SYNC Buchse eingebaut und benötige nun den empfangenen Takt halbiert.

    Wenn nun also start/stop von low auf high geht (externes Gerät wurde gestartet) trennt mir der Atmel den internen Takt auf und verarbeitet nun das Signal welches extern kommt (muß aber halbiert werden). Gleichzeitig sendet es einen kurzen high impuls an die Starttaste. Stopt man den externen Takt wird ein kurzes Stop gesendet an die Stoptaste und das Programm geht wieder in den 1:1 Durchschleifbetrieb. (interner Takt des Drumcomputers).

    Die ganze Ansteuerung funktioniert jedoch startet alles abundzu verzögert. Es läuft dann im Takt mit aber nicht sauber auf der 1. das passiert selten aber abundzu eben doch.

    Ist ein Interrupt also nötig? Das ganze läuf auf einem Mega8 mit internen 8Mhz Takt.

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Glaub garnicht, daß du einen Interrupt brauchst.
    Du mußt nur dauernd die Pins auf Flanken checken und dem entsprechend den Grundzustand bestimmen und aus dem zusammen dann die Outputs setzen.
    Ev. für die Output-Start-Stops einen Timer beschäftigen, damit die Signallänge passt.

    Da sollte es eigentlich dann keine vernudelten 1-er geben.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Wie überprüfe ich die Flanken? Hast du da ein Beispiel für mich Robert? Das mit dem Start/Stop klappt ganz gut aber ich teste das mal mit einem Timer... wäre toll wenns nur daran liegt.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377

    Re: Takt an Eingang halbieren und an anderem Port augeben

    Zitat Zitat von Accenter
    Ich brauche zur synchonisierung einer alten Drummashine eine 2:1 Teilung.
    Hallo Accenter!

    Ich habe mir jetzt die anderen Beiträge noch nicht durchgelesen. Mich hat nur das Wort "Teilung" angesprungen, weil ich vor Kurzem etwas darüber geschrieben habe. Vielleicht kannst du damit etwas anfangen. http://halvar.at/elektronik/kleiner_...0_als_counter/

    mfg
    Gerold
    :-)

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Flanken erkennt man einfach daran, dass sich der vorherige Zustand vom aktuellen unterscheidet.
    Nach dem Check wird der aktuelle Zustand zum "vorherigen".
    Steigend ist, wenn der alte Zustand =0 war und der neue=1

    programmtechnisch kann man das verschieden lösen, je nach Umfeld.

    In deinem Fall stellt der Zustand"alt" zusätzlich ja auch den Betriebsmodus dar (0= Bypass, 1=Sync)

    Persönlich würde ich also Alt/Neu zu einer Zahl 0-3 kombinieren und einfach vier verschiende Sub-Programm anspringen


    01---> Start --> Start Signal=1, Hold-Counter starten, clock 2:1
    11---> Sync---> clock 2:1, Hold-counter runterzählen (bei 0 Start-Signal=0)
    10---> Stop --> Stop Signal=1, Hold-Counter starten, clock 1:1
    00---> Bypass> Hold-counter runterzählen (bei 0 Stop-Signal=0) , clock 1:1

    Wie gesagt, man könnte auch einen Timer für das "Hold" beschäftigen
    Den würde man beim Status-wechsel enablen, und der setzt einfach beide Start + Stop Output auf NULL, es kann ja nur bei einem ein 1-er gewesen sein. dann disabled er sich selbst.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Mein Programm läuft wie es ist eigentlich super. Das einzige Problem ist, dass es abundzu verspätet startet. Das liegt scheinbar aber am debounce und toggle... wenn ich den Takt ohne Teilung durchreiche, läuft es mit der doppelten Geschwindigkeit aber exakt im Timing. Gibt es in Bascom einen Befehl um die Flanken austzuwerten oder muß ich das mit Flag-Bits machen?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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