Hallo Picture,
keine Angst , 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...