Hallo,
ich wollte ein kleines Programm schreiben, dass solange einen
Schrittmotor dreht wie man auf ein Taste am RB0 Pin drückt.
Zusätzlich will ich bei einem kurzen Druck auf eine Taste am RB1 Pin die
Geschwindigkeit ändern können.
Da ich für den Schrittmotor eine Vorgeschalten Elektronik habe muss ich
lediglich eine kurze Flanke am RA0 Pin geben um einen Schritt zu machen.
Zum Testen habe ich aber einfach mal eine LED an RD1 angeschlossen.
Mein Programm läuft dann in etwa so ab:
Ist RB0 Low(Gedrückt)?
Ja->Setze Motor auf Links Drehen (RA1 auf High setzen)
Mache kurze Flanke an RA0,
Warte X Takte lang.
Ist RB1 Low(Gedrückt)?
Ja->Mach LED an,
Warte 2 Sekunden
Mache LED aus
Fange wieder von vorne an.
Das Programm ist noch nicht fertig, jedoch ist mir ein Fehler
aufgefallen, den ich mir nicht erklären kann.
Wenn ich einmal kurz RB1 Drücke Leuchtet die LED ca. 2 Sekunden auf und
geht dann wieder aus.
Solange ich RB0 Drücke kann ich am Oscillator die gewünschte Frequenz
messen.
Also eigentlich genau, was man bei dem Programm erwarten würde.
Das merkwürdige ist jetzt nur, dass wenn ich RB0 und RB1 annähernd
gleichzeitig drücke fängt die LED an sichtbar zu Flackern und das ein
paar mal in der Sekunde.
Wie ist das möglich, wenn bei jeder LED Aktivierung doch eigentlich
gewährleistet ist, dass ca. 2 Sekunden gewartet wird.
Es kann doch nur etwas mit dem Timer 0 nicht stimmen.
Hat jemand eine Idee, was dieses verhalten verursachen könnte?
Ok habe den Fehler gefunden.
Der Fehler war, dass beim aktivierten "Extended instruction set"
Register Adressen kleiner als 0x96 Speziell behandelt werden.
Sobald ich z.B. die Adressen hiervon
1
Arg0 equ h'0'
2
Arg1 equ h'1'
3
Arg2 equ h'2'
4
Ret0 equ h'3'
5
Ret1 equ h'4'
6
Ret2 equ h'5'
um 0x100 nach oben verschiebe und entsprechend den code ändere, sodass
die Bank Selektion verwendet wird geht alles.