- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: Effektgerät mit PIC 16F874

  1. #11
    Gast
    Anzeige

    Praxistest und DIY Projekte
    Hi Robert,
    hab das Programm mal geändert und aufs wesentliche reduziert - und es läuft!
    Zumindest folgender Teil:

    LOOP:
    RCIF ?
    ====Nein ----------> LOOP
    ====Ja MIDI CLOCK ?
    =======nein -----> (RCIF=0) LOOP
    =======ja --> Zähler = 0 ?
    =========nein --> Zähler - 1 -------------> (RCIF=0) LOOP
    =========ja call AKTION_16 (s.u)
    ============ Zähler <= 12 ------------> (RCIF=0) LOOP

    AKTION_16 (einmal je 1/16)


    Was ich allerdings nicht verstehe ist wie es weiter gehen soll.
    D.h. ich verstehe nicht ganz warum du ein Bit schieben willst und vor allem wie es funktionieren soll, wenn ich im Patern mehrere 1en und Nullen gespeichert habe.

    Auf jeden fall schonmal vielen Dank

    Daniel


    FRAGE AN STEGR: WO FINDE ICH DEN CODE TAG?

  2. #12
    Gast
    ...kann ich jetzt nicht wieder den Teil vom original verwenden:

    OBYTE1_0NOTSET
    bsf OBYTE1,0 ;setze OBYTE,0
    btfss HLS1,0
    goto LOWOUT
    bsf PORTA,0 ;FX high
    goto MIDI_IN_CL
    OBYTE1_1NOTSET
    bsf OBYTE1,1 ;setze OBYTE,1
    btfss HLS1,1
    goto LOWOUT
    bsf PORTA,0 ;FX high
    goto MIDI_IN_CL

    ???

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.10.2004
    Ort
    Nordschwarzwald
    Alter
    41
    Beiträge
    506
    Zitat Zitat von Anonymous
    FRAGE AN STEGR: WO FINDE ICH DEN CODE TAG?
    beim Posten ("Antwort schreiben") siehst du über dem Textfeld eine ganze Reihe an Buttons. Dort gibt es auch einen, auf dem Code steht.
    Im Textfeld erscheit daraufhin ein [.code] (ohne den Punkt) und ein [./code]. Da zwischen drinnen einfach den Quelltext rein schreiben und dann sieht das schön übersichtlicher aus. Ausserdem wird dabei eine Fixed-Schrift verwendet, bei der alle Zeichen gleich breit sind, so wie du's ausm Editor kennst und somit geht deine Formatierung nicht verloren.

    MfG
    Stefan

  4. #14
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, Daniel !
    Zweierlei:
    Freut mich, daß wir einen Anfang gefunden haben
    Du solltest Dich registrieren lassen, könnt' ja sein, daß Du noch öfters kommst.
    So:
    Du brauchst (dzt) für jedes 1/16 einen Schalter, also 16 Stücker für jeden Takt (4/4)
    Da bieten sich natürlich die Bits von zwei Bytes an. Diese zwei Bytes sind also ein Pattern
    Code:
     
    PATTERN
    Pattern_a     Bits  0 - 7  --->    1/16   1 - 8
    Pattern_b     Bits  0 - 7  --->    1/16   9 - 16
    Bei jedem neuen 1/16 (ACTION_16) müssen wir also das aktuelle Bit abfragen (ob BUMM oder NICHT BUMM) und auf's nächste 1/16 stellen.
    Wir nehmen also zwei andere Bytes "shift", durch die wir EINEN 1'er durchschieben.
    Beispiel-Pattern: einmal kurz BUMM bei jedem 1/4 ( a la kick-drum)
    Folgende Situation beim ersten 1/16
    Code:
          Pattern_b         Pattern_a
         76543210          76543210
         00010001          00010001
         Shift_b              Shift_a
         00000000          00000001
    Jedesmal müssen wir sehen, ob dort, wo im "shift" gerade der 1-er ist, im "Pattern" gerade 1 oder 0 ist. bei "1" machern wir BUMM, bei 0 nicht.
    Code:
    Pattern b/a      
                          00010001          00010001          
    shift b/a
                          00000000          00000001          1     -->  BUMM
                          00000000          00000010          2     -->  nix
                          00000000          00000100          3     -->  nix
                          00000000          00001000          4     -->  nix
                          00000000          00010000          5     -->  BUMM
                                   ...............
                          01000000          00000000          15    --> nix
                          10000000          00000000          16    -->  nix
    Das ist der Grund, warum der 1-er durch die zwei Bytes geshifted wird.
    Natürlich kann man das auch anders machen, aber du schreibst dir die Finger krumm, wenn die Sache dann komplizierter wird, mit mehreren Pattern und anderen Taktarten. fürs erste mfg robert

  5. #15
    Gast
    HI Robert,
    werde mir alles mal genau anschauen, programmieren und mich dann melden.
    Abermals Vielen Dank

    ...warum registrieren?

    Daniel

  6. #16
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, lies dir das auf der HP mal durch, einige Vorteile, was Download etc. betrifft.
    Registrierte User kämpfen halt gewissermaßen mit offenem Visier.
    aber wie du meinst. mfg robert

  7. #17
    Gast
    OK DAnn steht bei mir ua statt Gast, Brain... klappt momentan noch nicht weil mein Account noch inaktiv ist - was auch immer - ich meine ich hätte mich aber schonmal angemeldet?
    Gruß Daniel

  8. #18
    Gast
    Also, ich hab mich mal mit deinen Ausführungen vertraut gemacht.Bis zu Schieben hab ich auch alles verstanden, aber dann....


    Schieben:
    clrc ;clear carry
    rlf shift_a
    rlf shift_b
    bnc schieben_fertig ;;wird das carry, wenn es gesetzt ist vom Überlauf aus Shift_a , Shift_b gesetzt?
    clrf shift_a ;;warum wird shift_a hier gelöscht
    inc shift_a ; wieder "1" drin ;; und hier wieder eine 1 reingesetzt
    schieben_fertig
    return ;;return ist doch der befehl um aus einem Unterprog zurück zu kommen, also soll der nach action, also wenn er ein MIDI_CL erkannt hat zu schieben springen? - Oder kann der auch einfach linear laufen, dh automatisch zu schieben gelangen?
    Noch 2 Sache: Mir ist nicht klar wie die 1 in das zweite Byte gelangt (shift_b) und wenn eine 1 bereits vor dem ersten Durchgang drinstehtist der doch beim ersten Durchgang an der zweiten stelle?!

    Vielleicht dumme Fragen?!

    Daniel

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    25.01.2005
    Beiträge
    16
    jetzt hats geklappt

  10. #20
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, Brain, willkommen im Club !
    der Befehl "rlf" shiftet das ganze Byte eins rauf. Das Carry-Bit von vorher kommt an die stelle Bit 0 und das ursprüngliche Bit 7 wandert dann ins Carry. (dewegen putz' ich ja das Carry vorher, sost habe ich zwei 1-er in shift a/b) Mach ich also gleich nochmal "rfl" wandert DIESES Carry (also eigentlich Bit 7 von vorher) in das zweite Feld unten rein, der gewünschte Effekt. das Bit, das aus shift_b rausgeschoben wird, is uns wurst, brauchen wir nicht.
    Der erste "1"-er stammt vom "Anfang:"
    Reihenfolge Shift <> Abfragen:
    Nach MIDI-Start SIND wir ja schon IM ersten 1/16, also müssen wir gleich checken, UND DANN für's nächste Mal herrichten.
    Diese Shifterei kannst du übrigens sehr gut im Simulator Step-by-step nachvollziehen.

    Also: wir befinden uns beim ersten 1/16, machen aber noch nix
    Midi-Clock:
    Jetzt checken wir und machen das Gate auf oder zu
    shiften rauf fürs nächste mal
    return (=Warten auf Midi-Clock/12)
    usw.
    Wie gesagt, außer der Midi clock kannst du das perfekt im Simulator Bitweise ausprobieren und brauchst keinen Blindflug
    mfg robert

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

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

12V Akku bauen