hallo, ich habe hier einen interrupt timer. jede sekunde sollten die ausgänge von porta und portb von 0 auf 1 gehen und dann umgekehrt. mit portb klappt das auch aber bei porta bleibt (ich teste das mit einer led) der ausgang mal ein paar durchgänge auf 1 und wechselt nur manchmal, scheinbar willkürlich, wieder auf 0 und bleibt dann wieder einige durchgänge so. kann mir jemand sagen, wo der fehler liegt? ich habe den verdacht, dass mit der config was nicht stimmen könnte, komme aber nicht weiter.
Hallo Simon B., poste mal das Programm - sonst wird es schwierig. Otto
in deinem listing ist die rede von einem '16f84' du betreibst aber laut deinen angaben einen '16f627' sind die beiden den kompatibel?
Meist fehlt das hier: movlw 7 movwf CMCON ;PortA nur digital, Comparator off Gerhard
danke für die antworten. ich weiß nicht genau in wie weit 16f84 und 16f627a kompatibel sind aber ich habe die config so gut ich konnte angepasst. die comperatoren ausschalten hat leider auch nichts bewirkt. ich habe es auch an verschiedenen stellen im code versucht oder muss es an eine ganz bestimmte? ich habe es auch mit "CMCON EQU H'001F'" probiert, ging auch nicht.
Hi Du redest von Interrupt Timer Wenn du interrupts machst gibt es folgendes zu beachten: - Du musst am Anfang deiner Interrupt- Routine das Arbeitsregister und die Flags sichern und am Ende der Routine sie wieder zurückladen, sonst gibt's Verwirrungen zwischen Interrupt und Main-Programm. Für einen 16F627a beginn in deiner Routine einfach mit movwf w_temp swapf STATUS,w bcf STATUS, RP0 ; status_temp in Bank 0 movwf status_temp und ende deine Routine so: swapf status_temp,w movwf STATUS swapf w_temp,f swapf w_temp,w retfie - Du musst das zugehöhrige Flag-Bit wieder auf "0" setzen. Sonst wird gleich nach dem Ende des Interrupts ein neuer Interrupt erzeugt. - Wichtig ist auch das du die richtigen Voreinstellunge für einen Interrupt gemacht hast. Schau dir im Datasheet noch mal alle Register genau an !! Hoffentlich hilft's dir was !!
hallo, danke für die antwort. ich hab im interrupt init die zeile "bcf STATUS, RP0" hinzugefügt und am interrupt ende "movw status_temp,w" mit "swapf ..." vertauscht, am verhalten von porta hat das leider nichts geändert. der timer ist jetzt jedoch langsamer geworden, ungefähr halb so schnell. ich werd wohl doch das datenblatt nochmal genau lesen müssen :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.