-
-
Erfahrener Benutzer
Roboter Genie
Hallo martini007
beim flüchtigen hinschauen, fiel mir einiges auf.
Für welchen PIC soll denn das Programm sein ??? 675 oder 629
weil da gibt es schon einen Wiederspruch in deiner Software:
list P=12F675
include "P12F629.inc"
vor dem wort include, muss meiner Meinung nach ein # stehen, also
#include "P12679.inc"
ich hoffe, deine Programmzeilen sind nicht alle "linksbündig" (stehen ganz links in der Zeile) wie hier im Text. Da dürfen sich nur die Sprungmarken bzw. Labels befinden.
Dann würdest Du aber etliche von Warungen bekommen: Found opcode in column xx
ich hoffe, daß ist nicht der Fall.
Deine Verzögerungsschleife DELAY100MS hast Du ja schon entschärft (Zeilen ausgeklammert), damit der PIC dort nicht "hängen" bleibt.
Das gibt wirklich eine Endlosschleife, hab ich mal simuliert. Da diese Verzögerung nun weg ist, kann es sein (bzw. sehr wahrscheinlich) daß deine LED derart schnell blinkt, daß Du es garnicht mitbekommst.
Der Timer 0 ist noch garnicht initialisiert worden, dadurch läuft er auch nicht.
Übrigens, Timer 0 zählt aufwärts. Wenn Du den Wert im TMR0 Register auf 255 setzt, dann ist der Timer recht schnell fertig,
da im nächsten Zyklus der Wert auf 256 bzw. 0 geht und das Interruptflag T0IF gesetzt wird.
Wenn Du den Wert auf 0 setzt, ist der Timer nach 256 Zyklen fertig, das sind dann aber auch nur 256 mikro Sekunden.
Für deine Blinkfrequenz immer noch unbrauchbar.
Also verpassen wir dem Timer einen Vorteiler, bzw. programmieren ihn.
Dafür gibt es den sogenannten "Prescale" Vorteiler, dieser kann jedoch für den Watchdog oder den Timer 0 benutzt werden.
Standardmäßig ist der Vorteiler für den Watchdog programmiert, daß können wir ändern, indem wir das Bit PSA im OPTION_REG löschen.
Dann gibt es 3 Bits, welche für das Teilerverhältnis zuständig sind PS0,PS1,PS2 ebenfalls im OPTION_REG
wenn wir alle 3 Bits setzen können wir den Timer am langsamsten laufen lassen. Aber selbst dann liegt die Laufzeit des Timers
immer noch unter 100ms. Wir kommen auf ca. 65ms aber schon wesentlich brauchbarer.
baue mal bitte den folgen Code mit in deine Initialisierunge rein:
InitTimer0:
bsf STATUS,RP0 ; die richige BANK auswählen
bcf OPTION_REG,T0CS ; interne Taktquelle wählen für Timer 0
bcf OPTION_REG,PSA ; Vorteiler für Timer 0 benutzen
bsf OPTION_REG,PS0 ; Teilung durch 256 einstellen
bsf OPTION_REG,PS1
bsf OPTION_REG,PS2
bcf STATUS,RP0 ; und die BANK wieder zurückschalten
in der Schleife DELAY100MS schreibts Du dann nicht den Wert 255 sondern 0 in das TMR0 Register
Nun kannst Du, denke ich, alles weitere selbst probieren.
Aller Anfang ist schwer, mach Dir nix draus.
mit freundlichen Grüßen
Siro
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen