PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC12F675 spielt Jingle Bells



Siro
19.11.2009, 22:20
Hallo zusammen,
ich hab eine etwas betagte Sotware rausgekramt, die recht gut zur Vorweihnachtszeit passt. Ein 8 Pinner der Jingle Bells spielt und dabei
4 Leds ansteuert. Ich hatte bzw. habe immer noch ein kleines Problem im Melodiefile. Bin ich zwar vorerst umgangen, kann mir das Problem aber nicht recht erklären. Die Halbe Pause will nicht richtig, aber mit 2 aufeinanderfolgenden Viertel Pausen hauts hin. Geht ja auch so, aber ganz klar ist mir das nicht. Vielleicht löst ja jemand das Problem.
Zudem habt ihr was zum Basteln für die Feiertage.
Viel Spass dabei
wünscht euch Siro

übrigens, den Source Code kan man nur runterladen, wenn man eingelogged ist.

PICture
24.11.2009, 14:43
Hallo Siro!

Ich konnte mir dein tolles Programm nicht ganz gut vorstellen, weil ich selber keine Macros benutze.

Trotzdem scheint mir die Zeile

_2 EQU (D'6000' / BPM * 2) ; länge der halben

nicht richtig zu sein, da _2 EQU 2 * _4 seien müsste, also von mir aus nicht gleich D'6000' / BMP * 2 sondern D'6000' / BMP / 2.

Wenn meine Überlegungen falsch sind, bitte nicht schlagen... O:)

MfG

Siro
25.11.2009, 10:30
Hallo Picture,
keine Angst 8-[ , hier wird niemand geschlagen.
Ersteinmal vielen Dank, daß Du mal in den Code reingeschaut hast.
Du hast völlig recht:
_2 EQU 2 * _4 ist richtig. Ich hatte an dieser Stelle immer wieder rumprobiert, aber das Problem blieb trotzdem. Ich denke aber dem Problem auf der Spur zu sein, ich habe Bit 6 und 7 als Flags benutzt. Die Berechnung von _2 kommt auf einen Wert von 74 und das wäre Binär 1001010 und damit wird das Bit 6 besetzt. Als Zeitwert bleiben dann nur noch Binär 1010 übrig. was einem Wert von 10 entspricht, was aber eigentlich 74 sein sollte. Ich denke da liegt das Problem. Aber ich habe einen zusätzlichen Fehler gefunden, der garnicht auffällt. Wenn die Melodie zu Ende gespielt hat, fängt sie ja wieder von vorne an. Dies passiert aber nicht, weil der Melodieindex auf 0 gesetzt wird (das hab ich nämlich vergessen), sondern weil der PIC sozusagen Abstürzt und einen Reset auslöst. Ich werde das nochmal überarbeiten und nochmal hochladen die Tage. Ist ja auch schon 6 Jahre her, als ich diese Software schrieb.
mfg. Siro


Thema Macros: Ich find die "Dinger" einfach unersetzbar.
Wär sicher mal etwas für deine Tips & Tricks.
Ich stell da mal was mit rein, beim nächsten POST.
Hier nur ein kurzes Beispiel:

ich möchte eine 32 Bit Variable um eins erhöhen.

INC_32 MACRO Var32
BANKSEL Var32
movlw 1
addwf Var32+0,F
movlw 0
addwfc Var32+1,F
addwfc Var32+2,F
addwfc Var32+3,F
endm

im Programm schreiben ich dann nur
INC_32 var_X

dann wird automatisch der obige Code eingesetzt. Das spart doch Unmengen an Zeit und ist viel übersichtlicher. Solange das MACRO richtig ist. Auch die richtige Bank wird hier gleich mit
ausgewählt. Kann ich nur empfehlen. ist doch sicher übersichtlicher als der eigentliche Code... O:)

PICture
25.11.2009, 11:18
Hallo Siro!

Das mit den Flags habe ich auch vermutet, aber war ich nicht ganz sicher und wollte dich nicht ärgern... :)

So wie ich sehe jeder ASM Programmierer versucht sich bei Programmerstellung Zeit sparen, was Für mich selbstverständlich ist. Und jeder macht es so wie ihm am besten gefällt. Ich sammle in einem Unterverzeichnis ganze ziemlich lange Unterprogramme (UP) z.B. Displayausgabe und nach Bedarf kopiere das ganze UP in Programm.

Weil ich immer noch mit Programmablaufdiagrammen (PAD) arbeite, kann ich somit ziemlich schnell ein umfangsreiches ASM Programm erstellen, ännlich wie bei Hochsprache.

Die Macros und BANKSELs gefallen mir persönlich nicht, weil ich eher Hardwarespezialist bin und ein Bit im Programm für mir eine Spannung auf einem Pin gleich ist und ich möchte bitgenau wissen was läuft.

Wenn ich nicht so wäre, wie ich bin, würden mir die Macros wahrscheinlich sehr gefallen und sie gehören nicht nur in Tips&Tricks, sondern in unseren "PIC Assembler" im Wiki. Deshalb, bitte, poste es lieber dort, weil so es für mehr PIC Benutzer sehr nutzlich seien wird.

Übrigens dein Musik-Programm hat mich auf eine Idee näher gebracht, die schon seit langem in meinem Kopf schwebt. Als ehemaliger Rock-Schlagzeuger, der leider immer älter wird, kann ich aus motorischen Gründen nicht mehr so gut meine Gedankenin in Musik umsetzen.

Deswegen, wenn ich mit allem laufendem fertig werde, möchte ich gerne versuchen einen Schlagzeug-Keyboard basteln um jeden Schlag den ich will erzeugen zu können. Übrigens, mich wundert es, dass so was noch nicht zum Kaufen gibt, oder ?

MfG

Siro
25.11.2009, 12:03
Hallo PICture,
Okay mit "Wiki PIC Assembler", kannte ich noch nicht. Dann kann ich dort ja mal was reinstellen, wegen den MACROS.
Dein Schlagzeug Projekt habe ich jetzt nicht richtig verstanden. Meinst Du eine programmierbare Rhythmus Maschine, die gibt es doch reichlich, oder ein spielbares Elektronisches Drumpad gibts ja auch wie Sand am Meer. Und da das Wort Keyboard fiel. Ich spiele meine Drumspuren mit einem MIDI Keyboard in den Rechner. Der Sound selbst kommt dann von Wave-Dateien. Würd mich interessieren,was genau Du meinst
mfg. Siro

PICture
25.11.2009, 12:59
Ich habe auch Sampled Drums mit Midi-Schnittstelle, Pads und Pedalen. Das möchte ich aber mit einfachem Keyboard ohne Schläger live spielen können, also nichts vorprogrammiertes. Der Grundrytmus z.B. für zwei Bass-Drums kann schon wie in Rhytmus Maschine vorprogrammiert werden.

Ich stelle mir das einfach so vor, das ich z.B. bestimmte Anzahl von 32 Triolen in vorprogramiertem Tempo abspielen möchte, dann drücke ich eine Taste und halte ich sie so lange, wie lange ich die Triolen abgespielen möchte, auf einer Trommel die ich mit zweiter Hand wähle. Es ist nur auf die Schnelle ohne genaueres Analiesieren.

Es sollte möglichst sein, z.B. mehrere gleiche Sequenzen nacheinander auf verschiedenen Trommeln abspielen zu können, wenn ich die Taste von Art der Schläge mit einer Hand halte und mit der anderer Hand nacheinander verschiedene Trommel wähle.

Ich habe mir darüber noch keine detailierte Gedanken gemacht, aber angeblich braucht man nur kurze Impulse erzeugen die paralell zu den Abnehmer in Pads angeschlossen werden. Das sollte sich sogar mit PIC machen lassen. So was fertiges habe ich aber leider noch nicht gesehen... :(

Ich bin leider nicht mehr so schnell um meine Lieblingsmusik Hardmetall (wie "Slipknot", "Killswitch", "The Sorrow", usw.) mit Pedalen und Schläger spielen zu können.

MfG

Siro
25.11.2009, 14:20
Hallo PICture,
ich denke, ich habe das Prinzip deines Vorhabens verstanden. Du möchtest mit der einen Hand über Tasten eine
spezielle Sequenz auswählen (z.B 32 tel Triolen) und mit der anderen Hand die Zuweisung an eine spezielle Trommel tätigen.
Ich denke mal, daß es dann über MIDI die Daten aussenden soll um die Sounds aus einem Midi Soundmodul abzuspielen.
Dann könnte man vielleicht über Fußschalter verschiedene Basedrum Sequenzen laufen lassen. Sicher kein einfaches Vorhaben, aber klar, das kriegt man mit einem PIC hin.
Geht nicht, Gibts nicht.
Siro

PICture
25.11.2009, 14:36
Ungefähr so möchte ich es haben. Zuerst muss ich aber etwas nutzliches bauen und erst wenn ich wirklich nichts mehr zu tun hätte, könnte ich mich damit beschäftigen.

Ich habe schon gegoogelt, aber nichts einfaches was mir gefällt gefunden, da ich um Schlagzeug spielen zu können kein Computer brauche. Momentan ist ein MP3-Player mein bester Freund... :)

MfG